grpc 1.43.1 → 1.44.0.pre2

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 (382) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +84 -64
  3. data/include/grpc/grpc_security.h +10 -0
  4. data/include/grpc/impl/codegen/compression_types.h +0 -2
  5. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  6. data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
  7. data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
  8. data/src/core/ext/filters/client_channel/client_channel.h +8 -8
  9. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  10. data/src/core/ext/filters/client_channel/config_selector.h +4 -4
  11. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  17. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
  26. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
  35. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  36. data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
  37. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  48. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
  49. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  50. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
  51. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  52. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  53. data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
  54. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  55. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  56. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  57. data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
  58. data/src/core/ext/filters/client_channel/subchannel.h +2 -3
  59. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
  60. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
  61. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
  63. data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
  64. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
  65. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
  67. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  68. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  69. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  70. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  71. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  72. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  73. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
  74. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
  75. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
  76. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
  77. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
  78. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  79. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
  80. data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
  81. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
  82. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
  83. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  84. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  85. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
  87. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
  88. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
  89. data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
  90. data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
  91. data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
  92. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  93. data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
  94. data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
  95. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  96. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  98. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  100. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  101. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  102. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  103. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  104. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  105. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  106. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  107. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  108. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  109. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  110. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  111. data/src/core/ext/xds/upb_utils.h +65 -0
  112. data/src/core/ext/xds/xds_api.cc +81 -3458
  113. data/src/core/ext/xds/xds_api.h +56 -611
  114. data/src/core/ext/xds/xds_bootstrap.cc +189 -125
  115. data/src/core/ext/xds/xds_bootstrap.h +20 -15
  116. data/src/core/ext/xds/xds_certificate_provider.h +1 -0
  117. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  118. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  119. data/src/core/ext/xds/xds_client.cc +584 -994
  120. data/src/core/ext/xds/xds_client.h +78 -135
  121. data/src/core/ext/xds/xds_cluster.cc +451 -0
  122. data/src/core/ext/xds/xds_cluster.h +111 -0
  123. data/src/core/ext/xds/xds_common_types.cc +388 -0
  124. data/src/core/ext/xds/xds_common_types.h +110 -0
  125. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  126. data/src/core/ext/xds/xds_endpoint.h +135 -0
  127. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  128. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  129. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  130. data/src/core/ext/xds/xds_listener.cc +1036 -0
  131. data/src/core/ext/xds/xds_listener.h +220 -0
  132. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  133. data/src/core/ext/xds/xds_resource_type.h +98 -0
  134. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  135. data/src/core/ext/xds/xds_route_config.cc +993 -0
  136. data/src/core/ext/xds/xds_route_config.h +215 -0
  137. data/src/core/ext/xds/xds_routing.cc +11 -8
  138. data/src/core/ext/xds/xds_routing.h +8 -5
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
  140. data/src/core/lib/address_utils/parse_address.cc +20 -0
  141. data/src/core/lib/address_utils/parse_address.h +5 -0
  142. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  143. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  144. data/src/core/lib/backoff/backoff.cc +4 -30
  145. data/src/core/lib/backoff/backoff.h +3 -3
  146. data/src/core/lib/channel/channel_args.cc +0 -1
  147. data/src/core/lib/channel/channel_stack.cc +8 -0
  148. data/src/core/lib/channel/channel_stack.h +1 -1
  149. data/src/core/lib/channel/channel_stack_builder.cc +5 -9
  150. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  151. data/src/core/lib/channel/channelz.cc +1 -0
  152. data/src/core/lib/compression/compression.cc +19 -111
  153. data/src/core/lib/compression/compression_internal.cc +142 -202
  154. data/src/core/lib/compression/compression_internal.h +64 -69
  155. data/src/core/lib/compression/message_compress.cc +11 -11
  156. data/src/core/lib/compression/message_compress.h +2 -2
  157. data/src/core/lib/gpr/useful.h +4 -0
  158. data/src/core/lib/gprpp/bitset.h +7 -0
  159. data/src/core/lib/gprpp/chunked_vector.h +45 -3
  160. data/src/core/lib/gprpp/status_helper.cc +20 -28
  161. data/src/core/lib/gprpp/status_helper.h +6 -19
  162. data/src/core/lib/gprpp/table.h +11 -0
  163. data/src/core/lib/http/httpcli.cc +37 -46
  164. data/src/core/lib/http/httpcli.h +3 -15
  165. data/src/core/lib/iomgr/call_combiner.cc +15 -4
  166. data/src/core/lib/iomgr/closure.h +29 -9
  167. data/src/core/lib/iomgr/combiner.cc +25 -3
  168. data/src/core/lib/iomgr/error.cc +2 -0
  169. data/src/core/lib/iomgr/error.h +3 -0
  170. data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
  171. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  172. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  173. data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
  174. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  175. data/src/core/lib/iomgr/exec_ctx.cc +22 -9
  176. data/src/core/lib/iomgr/executor.cc +10 -1
  177. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  178. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  179. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  180. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  181. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  182. data/src/core/lib/iomgr/port.h +2 -2
  183. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  184. data/src/core/lib/iomgr/resolve_address.h +47 -44
  185. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  186. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  187. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  188. data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
  189. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  190. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  191. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  192. data/src/core/lib/iomgr/resolved_address.h +39 -0
  193. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  194. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  198. data/src/core/lib/matchers/matchers.cc +1 -1
  199. data/src/core/lib/promise/activity.h +49 -20
  200. data/src/core/lib/promise/detail/status.h +5 -0
  201. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  202. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  203. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
  204. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
  205. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
  206. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  207. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
  208. data/src/core/lib/resource_quota/api.h +0 -1
  209. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  210. data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
  211. data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
  212. data/src/core/lib/security/authorization/evaluate_args.h +1 -0
  213. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  214. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  215. data/src/core/lib/security/authorization/matchers.cc +227 -0
  216. data/src/core/lib/security/authorization/matchers.h +211 -0
  217. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  218. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  219. data/src/core/lib/security/context/security_context.cc +4 -2
  220. data/src/core/lib/security/context/security_context.h +1 -1
  221. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
  222. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  223. data/src/core/lib/security/credentials/credentials.h +10 -20
  224. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
  225. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
  226. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
  227. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
  228. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  229. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  230. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
  231. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  232. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  233. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  234. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
  235. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  236. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
  237. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
  238. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  239. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  240. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  241. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
  243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
  244. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  245. data/src/core/lib/security/security_connector/security_connector.cc +0 -4
  246. data/src/core/lib/security/security_connector/security_connector.h +5 -1
  247. data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
  248. data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
  249. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
  250. data/src/core/lib/security/transport/auth_filters.h +7 -0
  251. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  252. data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
  253. data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
  254. data/src/core/{ext → lib}/service_config/service_config.h +4 -4
  255. data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
  256. data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
  257. data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
  258. data/src/core/lib/slice/slice.cc +3 -1
  259. data/src/core/lib/slice/slice.h +43 -13
  260. data/src/core/lib/slice/slice_intern.cc +3 -101
  261. data/src/core/lib/slice/slice_internal.h +1 -2
  262. data/src/core/lib/slice/slice_refcount.h +4 -13
  263. data/src/core/lib/slice/slice_refcount_base.h +0 -16
  264. data/src/core/lib/surface/call.cc +140 -382
  265. data/src/core/lib/surface/call.h +4 -4
  266. data/src/core/lib/surface/channel.cc +42 -44
  267. data/src/core/lib/surface/channel.h +4 -4
  268. data/src/core/lib/surface/init.cc +0 -2
  269. data/src/core/lib/surface/lame_client.cc +0 -1
  270. data/src/core/lib/surface/server.cc +12 -29
  271. data/src/core/lib/surface/server.h +2 -2
  272. data/src/core/lib/surface/version.cc +2 -2
  273. data/src/core/lib/transport/error_utils.h +14 -0
  274. data/src/core/lib/transport/metadata_batch.h +799 -717
  275. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  276. data/src/core/lib/transport/parsed_metadata.h +95 -92
  277. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  278. data/src/core/lib/transport/timeout_encoding.h +40 -10
  279. data/src/core/lib/transport/transport.h +1 -1
  280. data/src/core/lib/transport/transport_op_string.cc +6 -39
  281. data/src/core/lib/uri/uri_parser.cc +223 -53
  282. data/src/core/lib/uri/uri_parser.h +36 -23
  283. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
  284. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  285. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  286. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
  287. data/src/core/tsi/ssl_transport_security.cc +53 -13
  288. data/src/core/tsi/ssl_transport_security.h +18 -6
  289. data/src/ruby/ext/grpc/extconf.rb +10 -3
  290. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  291. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  292. data/src/ruby/lib/grpc/version.rb +1 -1
  293. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  294. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  295. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  296. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  297. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  298. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  299. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  300. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  301. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  302. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  303. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  304. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  305. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  306. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  307. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  308. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  309. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  310. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  311. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  312. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  313. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  314. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  315. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  316. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  317. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  318. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  319. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  320. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  321. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  322. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  323. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  324. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  325. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  326. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  327. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  328. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  329. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  330. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  331. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  332. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  333. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  334. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  335. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  336. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  337. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  338. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  339. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  340. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  341. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  343. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  344. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  346. data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  348. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  349. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  350. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  351. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  352. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  353. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
  354. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
  356. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  357. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
  358. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  359. data/third_party/xxhash/xxhash.h +607 -352
  360. metadata +149 -77
  361. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  362. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  363. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  364. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  365. data/src/core/lib/compression/compression_args.cc +0 -140
  366. data/src/core/lib/compression/compression_args.h +0 -58
  367. data/src/core/lib/compression/stream_compression.cc +0 -81
  368. data/src/core/lib/compression/stream_compression.h +0 -117
  369. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  370. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  371. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  372. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  373. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  374. data/src/core/lib/slice/static_slice.cc +0 -377
  375. data/src/core/lib/slice/static_slice.h +0 -300
  376. data/src/core/lib/transport/metadata.cc +0 -714
  377. data/src/core/lib/transport/metadata.h +0 -449
  378. data/src/core/lib/transport/metadata_batch.cc +0 -99
  379. data/src/core/lib/transport/static_metadata.cc +0 -1032
  380. data/src/core/lib/transport/static_metadata.h +0 -322
  381. data/src/core/lib/transport/status_metadata.cc +0 -63
  382. data/src/core/lib/transport/status_metadata.h +0 -48
@@ -1,60 +0,0 @@
1
- // Copyright 2021 gRPC authors.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_POPULARITY_COUNT_H
16
- #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_POPULARITY_COUNT_H
17
-
18
- #include <grpc/support/port_platform.h>
19
-
20
- namespace grpc_core {
21
-
22
- // filter tables for elems: this tables provides an approximate
23
- // popularity count for particular hashes, and are used to determine whether
24
- // a new literal should be added to the compression table or not.
25
- // They track a single integer that counts how often a particular value has
26
- // been seen. When that count reaches max (255), all values are halved. */
27
- template <uint8_t kElems>
28
- class PopularityCount {
29
- public:
30
- PopularityCount() : sum_{0}, elems_{} {}
31
-
32
- // increment a filter count, halve all counts if one element reaches max
33
- // return true if this element seems to be popular, false otherwise
34
- bool AddElement(uint8_t idx) {
35
- elems_[idx]++;
36
- if (GPR_LIKELY(elems_[idx] < 255)) {
37
- sum_++;
38
- } else {
39
- HalveFilter();
40
- }
41
- return elems_[idx] >= 2 * sum_ / kElems;
42
- }
43
-
44
- private:
45
- // halve all counts because an element reached max
46
- void HalveFilter() {
47
- sum_ = 0;
48
- for (int i = 0; i < kElems; i++) {
49
- elems_[i] /= 2;
50
- sum_ += elems_[i];
51
- }
52
- }
53
-
54
- uint32_t sum_;
55
- uint8_t elems_[kElems];
56
- };
57
-
58
- } // namespace grpc_core
59
-
60
- #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_POPULARITY_COUNT_H */
@@ -1,62 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #ifndef GRPC_CORE_LIB_COMPRESSION_ALGORITHM_METADATA_H
20
- #define GRPC_CORE_LIB_COMPRESSION_ALGORITHM_METADATA_H
21
-
22
- #include <grpc/support/port_platform.h>
23
-
24
- #include <grpc/compression.h>
25
-
26
- #include "src/core/lib/compression/compression_internal.h"
27
- #include "src/core/lib/transport/metadata.h"
28
-
29
- /** Return compression algorithm based metadata value */
30
- grpc_slice grpc_compression_algorithm_slice(
31
- grpc_compression_algorithm algorithm);
32
-
33
- /** Find compression algorithm based on passed in mdstr - returns
34
- * GRPC_COMPRESS_ALGORITHM_COUNT on failure */
35
- grpc_compression_algorithm grpc_compression_algorithm_from_slice(
36
- const grpc_slice& str);
37
-
38
- /** Return compression algorithm based metadata element */
39
- grpc_mdelem grpc_compression_encoding_mdelem(
40
- grpc_compression_algorithm algorithm);
41
-
42
- /** Return message compression algorithm based metadata element (grpc-encoding:
43
- * xxx) */
44
- grpc_mdelem grpc_message_compression_encoding_mdelem(
45
- grpc_message_compression_algorithm algorithm);
46
-
47
- /** Return stream compression algorithm based metadata element
48
- * (content-encoding: xxx) */
49
- grpc_mdelem grpc_stream_compression_encoding_mdelem(
50
- grpc_stream_compression_algorithm algorithm);
51
-
52
- /** Find compression algorithm based on passed in mdstr - returns
53
- * GRPC_COMPRESS_ALGORITHM_COUNT on failure */
54
- grpc_message_compression_algorithm
55
- grpc_message_compression_algorithm_from_slice(const grpc_slice& str);
56
-
57
- /** Find stream compression algorithm based on passed in mdstr - returns
58
- * GRPC_STREAM_COMPRESS_ALGORITHM_COUNT on failure */
59
- grpc_stream_compression_algorithm grpc_stream_compression_algorithm_from_slice(
60
- const grpc_slice& str);
61
-
62
- #endif /* GRPC_CORE_LIB_COMPRESSION_ALGORITHM_METADATA_H */
@@ -1,140 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #include <grpc/support/port_platform.h>
20
-
21
- #include "src/core/lib/compression/compression_args.h"
22
-
23
- #include <limits.h>
24
- #include <string.h>
25
-
26
- #include <grpc/compression.h>
27
- #include <grpc/grpc.h>
28
- #include <grpc/support/alloc.h>
29
- #include <grpc/support/log.h>
30
- #include <grpc/support/string_util.h>
31
-
32
- #include "src/core/lib/channel/channel_args.h"
33
- #include "src/core/lib/gpr/string.h"
34
- #include "src/core/lib/gpr/useful.h"
35
-
36
- grpc_compression_algorithm
37
- grpc_channel_args_get_channel_default_compression_algorithm(
38
- const grpc_channel_args* a) {
39
- size_t i;
40
- if (a == nullptr) return GRPC_COMPRESS_NONE;
41
- for (i = 0; i < a->num_args; ++i) {
42
- if (a->args[i].type == GRPC_ARG_INTEGER &&
43
- !strcmp(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM, a->args[i].key)) {
44
- grpc_compression_algorithm default_algorithm =
45
- static_cast<grpc_compression_algorithm>(a->args[i].value.integer);
46
- return default_algorithm < GRPC_COMPRESS_ALGORITHMS_COUNT
47
- ? default_algorithm
48
- : GRPC_COMPRESS_NONE;
49
- }
50
- }
51
- return GRPC_COMPRESS_NONE;
52
- }
53
-
54
- const grpc_channel_args*
55
- grpc_channel_args_set_channel_default_compression_algorithm(
56
- const grpc_channel_args* a, grpc_compression_algorithm algorithm) {
57
- GPR_ASSERT(algorithm < GRPC_COMPRESS_ALGORITHMS_COUNT);
58
- grpc_arg tmp;
59
- tmp.type = GRPC_ARG_INTEGER;
60
- tmp.key = const_cast<char*>(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM);
61
- tmp.value.integer = algorithm;
62
- return grpc_channel_args_copy_and_add(a, &tmp, 1);
63
- }
64
-
65
- /** Returns 1 if the argument for compression algorithm's enabled states bitset
66
- * was found in \a a, returning the arg's value in \a states. Otherwise, returns
67
- * 0. */
68
- static int find_compression_algorithm_states_bitset(const grpc_channel_args* a,
69
- int** states_arg) {
70
- if (a != nullptr) {
71
- size_t i;
72
- for (i = 0; i < a->num_args; ++i) {
73
- if (a->args[i].type == GRPC_ARG_INTEGER &&
74
- !strcmp(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET,
75
- a->args[i].key)) {
76
- *states_arg = &a->args[i].value.integer;
77
- **states_arg =
78
- (**states_arg & ((1 << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1)) |
79
- 0x1; /* forcefully enable support for no compression */
80
- return 1;
81
- }
82
- }
83
- }
84
- return 0; /* GPR_FALSE */
85
- }
86
-
87
- const grpc_channel_args* grpc_channel_args_compression_algorithm_set_state(
88
- const grpc_channel_args** a, grpc_compression_algorithm algorithm,
89
- int state) {
90
- int* states_arg = nullptr;
91
- const grpc_channel_args* result = *a;
92
- const int states_arg_found =
93
- find_compression_algorithm_states_bitset(*a, &states_arg);
94
-
95
- if (grpc_channel_args_get_channel_default_compression_algorithm(*a) ==
96
- algorithm &&
97
- state == 0) {
98
- const char* algo_name = nullptr;
99
- GPR_ASSERT(grpc_compression_algorithm_name(algorithm, &algo_name) != 0);
100
- gpr_log(GPR_ERROR,
101
- "Tried to disable default compression algorithm '%s'. The "
102
- "operation has been ignored.",
103
- algo_name);
104
- } else if (states_arg_found) {
105
- if (state != 0) {
106
- grpc_core::SetBit(reinterpret_cast<unsigned*>(states_arg), algorithm);
107
- } else if (algorithm != GRPC_COMPRESS_NONE) {
108
- grpc_core::ClearBit(reinterpret_cast<unsigned*>(states_arg), algorithm);
109
- }
110
- } else {
111
- /* create a new arg */
112
- grpc_arg tmp;
113
- tmp.type = GRPC_ARG_INTEGER;
114
- tmp.key =
115
- const_cast<char*>(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET);
116
- /* all enabled by default */
117
- tmp.value.integer = (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1;
118
- if (state != 0) {
119
- grpc_core::SetBit(reinterpret_cast<unsigned*>(&tmp.value.integer),
120
- algorithm);
121
- } else if (algorithm != GRPC_COMPRESS_NONE) {
122
- grpc_core::ClearBit(reinterpret_cast<unsigned*>(&tmp.value.integer),
123
- algorithm);
124
- }
125
- result = grpc_channel_args_copy_and_add(*a, &tmp, 1);
126
- grpc_channel_args_destroy(*a);
127
- *a = result;
128
- }
129
- return result;
130
- }
131
-
132
- uint32_t grpc_channel_args_compression_algorithm_get_states(
133
- const grpc_channel_args* a) {
134
- int* states_arg;
135
- if (find_compression_algorithm_states_bitset(a, &states_arg)) {
136
- return static_cast<uint32_t>(*states_arg);
137
- } else {
138
- return (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1; /* All algs. enabled */
139
- }
140
- }
@@ -1,58 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #ifndef GRPC_CORE_LIB_COMPRESSION_COMPRESSION_ARGS_H
20
- #define GRPC_CORE_LIB_COMPRESSION_COMPRESSION_ARGS_H
21
-
22
- #include <grpc/support/port_platform.h>
23
-
24
- #include <grpc/compression.h>
25
- #include <grpc/impl/codegen/grpc_types.h>
26
-
27
- /** Returns the compression algorithm set in \a a. */
28
- grpc_compression_algorithm
29
- grpc_channel_args_get_channel_default_compression_algorithm(
30
- const grpc_channel_args* a);
31
-
32
- /** Returns a channel arg instance with compression enabled. If \a a is
33
- * non-NULL, its args are copied. N.B. GRPC_COMPRESS_NONE disables compression
34
- * for the channel. */
35
- const grpc_channel_args*
36
- grpc_channel_args_set_channel_default_compression_algorithm(
37
- const grpc_channel_args* a, grpc_compression_algorithm algorithm);
38
-
39
- /** Sets the support for the given compression algorithm. By default, all
40
- * compression algorithms are enabled. It's an error to disable an algorithm set
41
- * by grpc_channel_args_set_compression_algorithm.
42
- *
43
- * Returns an instance with the updated algorithm states. The \a a pointer is
44
- * modified to point to the returned instance (which may be different from the
45
- * input value of \a a). */
46
- const grpc_channel_args* grpc_channel_args_compression_algorithm_set_state(
47
- const grpc_channel_args** a, grpc_compression_algorithm algorithm,
48
- int state);
49
-
50
- /** Returns the bitset representing the support state (true for enabled, false
51
- * for disabled) for compression algorithms.
52
- *
53
- * The i-th bit of the returned bitset corresponds to the i-th entry in the
54
- * grpc_compression_algorithm enum. */
55
- uint32_t grpc_channel_args_compression_algorithm_get_states(
56
- const grpc_channel_args* a);
57
-
58
- #endif /* GRPC_CORE_LIB_COMPRESSION_COMPRESSION_ARGS_H */
@@ -1,81 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2017 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #include <grpc/support/port_platform.h>
20
-
21
- #include "src/core/lib/compression/stream_compression.h"
22
-
23
- #include <grpc/support/log.h>
24
-
25
- #include "src/core/lib/compression/stream_compression_gzip.h"
26
- #include "src/core/lib/slice/slice_utils.h"
27
-
28
- extern const grpc_stream_compression_vtable
29
- grpc_stream_compression_identity_vtable;
30
-
31
- bool grpc_stream_compress(grpc_stream_compression_context* ctx,
32
- grpc_slice_buffer* in, grpc_slice_buffer* out,
33
- size_t* output_size, size_t max_output_size,
34
- grpc_stream_compression_flush flush) {
35
- return ctx->vtable->compress(ctx, in, out, output_size, max_output_size,
36
- flush);
37
- }
38
-
39
- bool grpc_stream_decompress(grpc_stream_compression_context* ctx,
40
- grpc_slice_buffer* in, grpc_slice_buffer* out,
41
- size_t* output_size, size_t max_output_size,
42
- bool* end_of_context) {
43
- return ctx->vtable->decompress(ctx, in, out, output_size, max_output_size,
44
- end_of_context);
45
- }
46
-
47
- grpc_stream_compression_context* grpc_stream_compression_context_create(
48
- grpc_stream_compression_method method) {
49
- switch (method) {
50
- case GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS:
51
- case GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS:
52
- return grpc_stream_compression_identity_vtable.context_create(method);
53
- case GRPC_STREAM_COMPRESSION_GZIP_COMPRESS:
54
- case GRPC_STREAM_COMPRESSION_GZIP_DECOMPRESS:
55
- return grpc_stream_compression_gzip_vtable.context_create(method);
56
- default:
57
- gpr_log(GPR_ERROR, "Unknown stream compression method: %d", method);
58
- return nullptr;
59
- }
60
- }
61
-
62
- void grpc_stream_compression_context_destroy(
63
- grpc_stream_compression_context* ctx) {
64
- ctx->vtable->context_destroy(ctx);
65
- }
66
-
67
- int grpc_stream_compression_method_parse(
68
- grpc_slice value, bool is_compress,
69
- grpc_stream_compression_method* method) {
70
- if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_IDENTITY)) {
71
- *method = is_compress ? GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS
72
- : GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS;
73
- return 1;
74
- } else if (grpc_slice_eq_static_interned(value, GRPC_MDSTR_GZIP)) {
75
- *method = is_compress ? GRPC_STREAM_COMPRESSION_GZIP_COMPRESS
76
- : GRPC_STREAM_COMPRESSION_GZIP_DECOMPRESS;
77
- return 1;
78
- } else {
79
- return 0;
80
- }
81
- }
@@ -1,117 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2017 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #ifndef GRPC_CORE_LIB_COMPRESSION_STREAM_COMPRESSION_H
20
- #define GRPC_CORE_LIB_COMPRESSION_STREAM_COMPRESSION_H
21
-
22
- #include <grpc/support/port_platform.h>
23
-
24
- #include <stdbool.h>
25
-
26
- #include <zlib.h>
27
-
28
- #include <grpc/slice_buffer.h>
29
-
30
- #include "src/core/lib/transport/static_metadata.h"
31
-
32
- typedef struct grpc_stream_compression_vtable grpc_stream_compression_vtable;
33
-
34
- /* Stream compression/decompression context */
35
- typedef struct grpc_stream_compression_context {
36
- const grpc_stream_compression_vtable* vtable;
37
- } grpc_stream_compression_context;
38
-
39
- typedef enum grpc_stream_compression_method {
40
- GRPC_STREAM_COMPRESSION_IDENTITY_COMPRESS = 0,
41
- GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS,
42
- GRPC_STREAM_COMPRESSION_GZIP_COMPRESS,
43
- GRPC_STREAM_COMPRESSION_GZIP_DECOMPRESS,
44
- GRPC_STREAM_COMPRESSION_METHOD_COUNT
45
- } grpc_stream_compression_method;
46
-
47
- typedef enum grpc_stream_compression_flush {
48
- GRPC_STREAM_COMPRESSION_FLUSH_NONE = 0,
49
- GRPC_STREAM_COMPRESSION_FLUSH_SYNC,
50
- GRPC_STREAM_COMPRESSION_FLUSH_FINISH,
51
- GRPC_STREAM_COMPRESSION_FLUSH_COUNT
52
- } grpc_stream_compression_flush;
53
-
54
- struct grpc_stream_compression_vtable {
55
- bool (*compress)(grpc_stream_compression_context* ctx, grpc_slice_buffer* in,
56
- grpc_slice_buffer* out, size_t* output_size,
57
- size_t max_output_size, grpc_stream_compression_flush flush);
58
- bool (*decompress)(grpc_stream_compression_context* ctx,
59
- grpc_slice_buffer* in, grpc_slice_buffer* out,
60
- size_t* output_size, size_t max_output_size,
61
- bool* end_of_context);
62
- grpc_stream_compression_context* (*context_create)(
63
- grpc_stream_compression_method method);
64
- void (*context_destroy)(grpc_stream_compression_context* ctx);
65
- };
66
-
67
- /**
68
- * Compress bytes provided in \a in with a given context, with an optional flush
69
- * at the end of compression. Emits at most \a max_output_size compressed bytes
70
- * into \a out. If all the bytes in input buffer \a in are depleted and \a flush
71
- * is not GRPC_STREAM_COMPRESSION_FLUSH_NONE, the corresponding flush method is
72
- * executed. The total number of bytes emitted is outputted in \a output_size.
73
- *
74
- * A SYNC flush indicates that the entire messages in \a in can be decompressed
75
- * from \a out. A FINISH flush implies a SYNC flush, and that any further
76
- * compression will not be dependent on the state of the current context and any
77
- * previous compressed bytes. It allows corresponding decompression context to
78
- * be dropped when reaching this boundary.
79
- */
80
- bool grpc_stream_compress(grpc_stream_compression_context* ctx,
81
- grpc_slice_buffer* in, grpc_slice_buffer* out,
82
- size_t* output_size, size_t max_output_size,
83
- grpc_stream_compression_flush flush);
84
-
85
- /**
86
- * Decompress bytes provided in \a in with a given context. Emits at most \a
87
- * max_output_size decompressed bytes into \a out. If decompression process
88
- * reached the end of a gzip stream, \a end_of_context is set to true; otherwise
89
- * it is set to false. The total number of bytes emitted is outputted in \a
90
- * output_size.
91
- */
92
- bool grpc_stream_decompress(grpc_stream_compression_context* ctx,
93
- grpc_slice_buffer* in, grpc_slice_buffer* out,
94
- size_t* output_size, size_t max_output_size,
95
- bool* end_of_context);
96
-
97
- /**
98
- * Creates a stream compression context. \a pending_bytes_buffer is the input
99
- * buffer for compression/decompression operations. \a method specifies whether
100
- * the context is for compression or decompression.
101
- */
102
- grpc_stream_compression_context* grpc_stream_compression_context_create(
103
- grpc_stream_compression_method method);
104
-
105
- /**
106
- * Destroys a stream compression context.
107
- */
108
- void grpc_stream_compression_context_destroy(
109
- grpc_stream_compression_context* ctx);
110
-
111
- /**
112
- * Parse stream compression method based on algorithm name
113
- */
114
- int grpc_stream_compression_method_parse(
115
- grpc_slice value, bool is_compress, grpc_stream_compression_method* method);
116
-
117
- #endif // GRPC_CORE_LIB_COMPRESSION_STREAM_COMPRESSION_H