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,449 +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_TRANSPORT_METADATA_H
20
- #define GRPC_CORE_LIB_TRANSPORT_METADATA_H
21
-
22
- #include <grpc/support/port_platform.h>
23
-
24
- #include <atomic>
25
-
26
- #include <grpc/grpc.h>
27
- #include <grpc/impl/codegen/log.h>
28
- #include <grpc/slice.h>
29
-
30
- #include "src/core/lib/debug/trace.h"
31
- #include "src/core/lib/gpr/useful.h"
32
- #include "src/core/lib/gprpp/sync.h"
33
- #include "src/core/lib/slice/slice_utils.h"
34
-
35
- extern grpc_core::DebugOnlyTraceFlag grpc_trace_metadata;
36
-
37
- /* This file provides a mechanism for tracking metadata through the grpc stack.
38
- It's not intended for consumption outside of the library.
39
-
40
- Metadata is tracked in the context of a sharded global grpc_mdctx. The
41
- context tracks unique strings (grpc_mdstr) and pairs of strings
42
- (grpc_mdelem). Any of these objects can be checked for equality by comparing
43
- their pointers. These objects are reference counted.
44
-
45
- grpc_mdelem can additionally store a (non-NULL) user data pointer. This
46
- pointer is intended to be used to cache semantic meaning of a metadata
47
- element. For example, an OAuth token may cache the credentials it represents
48
- and the time at which it expires in the mdelem user data.
49
-
50
- Combining this metadata cache and the hpack compression table allows us to
51
- simply lookup complete preparsed objects quickly, incurring a few atomic
52
- ops per metadata element on the fast path.
53
-
54
- grpc_mdelem instances MAY live longer than their refcount implies, and are
55
- garbage collected periodically, meaning cached data can easily outlive a
56
- single request.
57
-
58
- STATIC METADATA: in static_metadata.h we declare a set of static metadata.
59
- These mdelems and mdstrs are available via pre-declared code generated macros
60
- and are available to code anywhere between grpc_init() and grpc_shutdown().
61
- They are not refcounted, but can be passed to _ref and _unref functions
62
- declared here - in which case those functions are effectively no-ops. */
63
-
64
- /* Forward declarations */
65
- typedef struct grpc_mdelem grpc_mdelem;
66
-
67
- /* if changing this, make identical changes in:
68
- - grpc_core::{InternedMetadata, AllocatedMetadata}
69
- - grpc_metadata in grpc_types.h */
70
- typedef struct grpc_mdelem_data {
71
- const grpc_slice key;
72
- const grpc_slice value;
73
- /* there is a private part to this in metadata.c */
74
- } grpc_mdelem_data;
75
-
76
- /* GRPC_MDELEM_STORAGE_* enum values that can be treated as interned always have
77
- this bit set in their integer value */
78
- #define GRPC_MDELEM_STORAGE_INTERNED_BIT 1
79
-
80
- /* External and static storage metadata has no refcount to ref/unref. Allocated
81
- * and interned metadata do have a refcount. Metadata ref and unref methods use
82
- * a switch statement on this enum to determine which behaviour to execute.
83
- * Keeping the no-ref cases together and the ref-cases together leads to
84
- * slightly better code generation (9 inlined instructions rather than 10). */
85
- typedef enum {
86
- /* memory pointed to by grpc_mdelem::payload is owned by an external system */
87
- GRPC_MDELEM_STORAGE_EXTERNAL = 0,
88
- /* memory is in the static metadata table */
89
- GRPC_MDELEM_STORAGE_STATIC = GRPC_MDELEM_STORAGE_INTERNED_BIT,
90
- /* memory pointed to by grpc_mdelem::payload is allocated by the metadata
91
- system */
92
- GRPC_MDELEM_STORAGE_ALLOCATED = 2,
93
- /* memory pointed to by grpc_mdelem::payload is interned by the metadata
94
- system */
95
- GRPC_MDELEM_STORAGE_INTERNED = 2 | GRPC_MDELEM_STORAGE_INTERNED_BIT,
96
- } grpc_mdelem_data_storage;
97
-
98
- struct grpc_mdelem {
99
- /* a grpc_mdelem_data* generally, with the two lower bits signalling memory
100
- ownership as per grpc_mdelem_data_storage */
101
- uintptr_t payload;
102
- };
103
-
104
- #define GRPC_MDELEM_DATA(md) ((grpc_mdelem_data*)((md).payload & ~(uintptr_t)3))
105
- #define GRPC_MDELEM_STORAGE(md) \
106
- ((grpc_mdelem_data_storage)((md).payload & (uintptr_t)3))
107
- #ifdef __cplusplus
108
- #define GRPC_MAKE_MDELEM(data, storage) \
109
- (grpc_mdelem{((uintptr_t)(data)) | ((uintptr_t)(storage))})
110
- #else
111
- #define GRPC_MAKE_MDELEM(data, storage) \
112
- ((grpc_mdelem){((uintptr_t)(data)) | ((uintptr_t)(storage))})
113
- #endif
114
- #define GRPC_MDELEM_IS_INTERNED(md) \
115
- ((grpc_mdelem_data_storage)((md).payload & \
116
- (uintptr_t)GRPC_MDELEM_STORAGE_INTERNED_BIT))
117
-
118
- /* Given arbitrary input slices, create a grpc_mdelem object. The caller refs
119
- * the input slices; we unref them. This method is always safe to call; however,
120
- * if we know data about the slices in question (e.g. if we knew our key was
121
- * static) we can call specializations that save on cycle count. */
122
- grpc_mdelem grpc_mdelem_from_slices(const grpc_slice& key,
123
- const grpc_slice& value);
124
-
125
- /* Like grpc_mdelem_from_slices, but we know that key is a static slice. This
126
- saves us a few branches and a no-op call to md_unref() for the key. */
127
- grpc_mdelem grpc_mdelem_from_slices(const grpc_core::StaticMetadataSlice& key,
128
- const grpc_slice& value);
129
-
130
- /* Like grpc_mdelem_from_slices, but key is static and val is static. */
131
- grpc_mdelem grpc_mdelem_from_slices(
132
- const grpc_core::StaticMetadataSlice& key,
133
- const grpc_core::StaticMetadataSlice& value);
134
-
135
- /* Like grpc_mdelem_from_slices, but key is static and val is interned. */
136
- grpc_mdelem grpc_mdelem_from_slices(const grpc_core::StaticMetadataSlice& key,
137
- const grpc_core::ManagedMemorySlice& value);
138
-
139
- /* Like grpc_mdelem_from_slices, but key and val are interned. */
140
- grpc_mdelem grpc_mdelem_from_slices(const grpc_core::ManagedMemorySlice& key,
141
- const grpc_core::ManagedMemorySlice& value);
142
-
143
- /* Cheaply convert a grpc_metadata to a grpc_mdelem; may use the grpc_metadata
144
- object as backing storage (so lifetimes should align) */
145
- grpc_mdelem grpc_mdelem_from_grpc_metadata(grpc_metadata* metadata);
146
-
147
- /* Does not unref the slices; if a new non-interned mdelem is needed, allocates
148
- one if compatible_external_backing_store is NULL, or uses
149
- compatible_external_backing_store if it is non-NULL (in which case it's the
150
- users responsibility to ensure that it outlives usage) */
151
- grpc_mdelem grpc_mdelem_create(
152
- const grpc_slice& key, const grpc_slice& value,
153
- grpc_mdelem_data* compatible_external_backing_store);
154
-
155
- /* Like grpc_mdelem_create, but we know that key is static. */
156
- grpc_mdelem grpc_mdelem_create(
157
- const grpc_core::StaticMetadataSlice& key, const grpc_slice& value,
158
- grpc_mdelem_data* compatible_external_backing_store);
159
-
160
- #define GRPC_MDKEY(md) (GRPC_MDELEM_DATA(md)->key)
161
- #define GRPC_MDVALUE(md) (GRPC_MDELEM_DATA(md)->value)
162
-
163
- bool grpc_mdelem_eq(grpc_mdelem a, grpc_mdelem b);
164
- /* Often we compare metadata where we know a-priori that the second parameter is
165
- * static, and that the keys match. This most commonly happens when processing
166
- * metadata batch callouts in initial/trailing filters. In this case, fastpath
167
- * grpc_mdelem_eq and remove unnecessary checks. */
168
- inline bool grpc_mdelem_static_value_eq(grpc_mdelem a, grpc_mdelem b_static) {
169
- if (a.payload == b_static.payload) return true;
170
- return grpc_slice_eq_static_interned(GRPC_MDVALUE(a), GRPC_MDVALUE(b_static));
171
- }
172
- #define GRPC_MDISNULL(md) (GRPC_MDELEM_DATA(md) == NULL)
173
-
174
- inline bool grpc_mdelem_both_interned_eq(grpc_mdelem a_interned,
175
- grpc_mdelem b_interned) {
176
- GPR_DEBUG_ASSERT(GRPC_MDELEM_IS_INTERNED(a_interned) ||
177
- GRPC_MDISNULL(a_interned));
178
- GPR_DEBUG_ASSERT(GRPC_MDELEM_IS_INTERNED(b_interned) ||
179
- GRPC_MDISNULL(b_interned));
180
- return a_interned.payload == b_interned.payload;
181
- }
182
-
183
- /* Mutator and accessor for grpc_mdelem user data. The destructor function
184
- is used as a type tag and is checked during user_data fetch. */
185
- void* grpc_mdelem_get_user_data(grpc_mdelem md, void (*if_destroy_func)(void*));
186
- void* grpc_mdelem_set_user_data(grpc_mdelem md, void (*destroy_func)(void*),
187
- void* data);
188
-
189
- // Defined in metadata.cc.
190
- struct mdtab_shard;
191
-
192
- #ifndef NDEBUG
193
- void grpc_mdelem_trace_ref(void* md, const grpc_slice& key,
194
- const grpc_slice& value, intptr_t refcnt,
195
- const char* file, int line);
196
- void grpc_mdelem_trace_unref(void* md, const grpc_slice& key,
197
- const grpc_slice& value, intptr_t refcnt,
198
- const char* file, int line);
199
- #endif
200
- namespace grpc_core {
201
-
202
- typedef void (*destroy_user_data_func)(void* data);
203
-
204
- struct UserData {
205
- Mutex mu_user_data;
206
- std::atomic<destroy_user_data_func> destroy_user_data{nullptr};
207
- std::atomic<void*> data{nullptr};
208
- };
209
-
210
- class StaticMetadata {
211
- public:
212
- StaticMetadata(const grpc_slice& key, const grpc_slice& value, uintptr_t idx)
213
- : kv_({key, value}), hash_(0), static_idx_(idx) {}
214
-
215
- const grpc_mdelem_data& data() const { return kv_; }
216
-
217
- void HashInit();
218
- uint32_t hash() { return hash_; }
219
- uintptr_t StaticIndex() { return static_idx_; }
220
-
221
- private:
222
- grpc_mdelem_data kv_;
223
-
224
- /* private only data */
225
- uint32_t hash_;
226
- uintptr_t static_idx_;
227
- };
228
-
229
- class RefcountedMdBase {
230
- public:
231
- RefcountedMdBase(const grpc_slice& key, const grpc_slice& value)
232
- : key_(key), value_(value), refcnt_(1) {}
233
- RefcountedMdBase(const grpc_slice& key, const grpc_slice& value,
234
- uint32_t hash)
235
- : key_(key), value_(value), refcnt_(1), hash_(hash) {}
236
-
237
- const grpc_slice& key() const { return key_; }
238
- const grpc_slice& value() const { return value_; }
239
- uint32_t hash() { return hash_; }
240
-
241
- #ifndef NDEBUG
242
- void Ref(const char* file, int line) {
243
- grpc_mdelem_trace_ref(this, key_, value_, RefValue(), file, line);
244
- const intptr_t prior = refcnt_.fetch_add(1, std::memory_order_relaxed);
245
- GPR_ASSERT(prior > 0);
246
- }
247
- bool Unref(const char* file, int line) {
248
- grpc_mdelem_trace_unref(this, key_, value_, RefValue(), file, line);
249
- return Unref();
250
- }
251
- #endif
252
- void Ref() {
253
- /* we can assume the ref count is >= 1 as the application is calling
254
- this function - meaning that no adjustment to mdtab_free is necessary,
255
- simplifying the logic here to be just an atomic increment */
256
- refcnt_.fetch_add(1, std::memory_order_relaxed);
257
- }
258
- bool Unref() {
259
- const intptr_t prior = refcnt_.fetch_sub(1, std::memory_order_acq_rel);
260
- GPR_DEBUG_ASSERT(prior > 0);
261
- return prior == 1;
262
- }
263
-
264
- protected:
265
- #ifndef NDEBUG
266
- void TraceAtStart(const char* tag);
267
- #endif
268
-
269
- intptr_t RefValue() { return refcnt_.load(std::memory_order_relaxed); }
270
- bool AllRefsDropped() { return refcnt_.load(std::memory_order_acquire) == 0; }
271
- bool FirstRef() {
272
- return refcnt_.fetch_add(1, std::memory_order_relaxed) == 0;
273
- }
274
-
275
- private:
276
- /* must be byte compatible with grpc_mdelem_data */
277
- grpc_slice key_;
278
- grpc_slice value_;
279
- std::atomic<intptr_t> refcnt_{0};
280
- uint32_t hash_ = 0;
281
- };
282
-
283
- class InternedMetadata : public RefcountedMdBase {
284
- public:
285
- // TODO(arjunroy): Change to use strongly typed slices instead.
286
- struct NoRefKey {};
287
- struct BucketLink {
288
- explicit BucketLink(InternedMetadata* md) : next(md) {}
289
-
290
- InternedMetadata* next = nullptr;
291
- };
292
- InternedMetadata(const grpc_slice& key, const grpc_slice& value,
293
- uint32_t hash, InternedMetadata* next);
294
- InternedMetadata(const grpc_slice& key, const grpc_slice& value,
295
- uint32_t hash, InternedMetadata* next, const NoRefKey*);
296
-
297
- ~InternedMetadata();
298
- void RefWithShardLocked(mdtab_shard* shard);
299
- UserData* user_data() { return &user_data_; }
300
- InternedMetadata* bucket_next() { return link_.next; }
301
- void set_bucket_next(InternedMetadata* md) { link_.next = md; }
302
-
303
- static size_t CleanupLinkedMetadata(BucketLink* head);
304
-
305
- private:
306
- UserData user_data_;
307
- BucketLink link_;
308
- };
309
-
310
- /* Shadow structure for grpc_mdelem_data for allocated elements */
311
- class AllocatedMetadata : public RefcountedMdBase {
312
- public:
313
- // TODO(arjunroy): Change to use strongly typed slices instead.
314
- struct NoRefKey {};
315
- AllocatedMetadata(const grpc_slice& key, const grpc_slice& value);
316
- AllocatedMetadata(const ManagedMemorySlice& key,
317
- const UnmanagedMemorySlice& value);
318
- AllocatedMetadata(const ExternallyManagedSlice& key,
319
- const UnmanagedMemorySlice& value);
320
- AllocatedMetadata(const grpc_slice& key, const grpc_slice& value,
321
- const NoRefKey*);
322
- ~AllocatedMetadata();
323
-
324
- UserData* user_data() { return &user_data_; }
325
-
326
- private:
327
- UserData user_data_;
328
- };
329
-
330
- } // namespace grpc_core
331
-
332
- #ifndef NDEBUG
333
- #define GRPC_MDELEM_REF(s) grpc_mdelem_ref((s), __FILE__, __LINE__)
334
- inline grpc_mdelem grpc_mdelem_ref(grpc_mdelem gmd, const char* file,
335
- int line) {
336
- #else // ifndef NDEBUG
337
- #define GRPC_MDELEM_REF(s) grpc_mdelem_ref((s))
338
- inline grpc_mdelem grpc_mdelem_ref(grpc_mdelem gmd) {
339
- #endif // ifndef NDEBUG
340
- switch (GRPC_MDELEM_STORAGE(gmd)) {
341
- case GRPC_MDELEM_STORAGE_EXTERNAL:
342
- case GRPC_MDELEM_STORAGE_STATIC:
343
- break;
344
- case GRPC_MDELEM_STORAGE_INTERNED: {
345
- auto* md =
346
- reinterpret_cast<grpc_core::InternedMetadata*> GRPC_MDELEM_DATA(gmd);
347
- /* use C assert to have this removed in opt builds */
348
- #ifndef NDEBUG
349
- md->Ref(file, line);
350
- #else
351
- md->Ref();
352
- #endif
353
- break;
354
- }
355
- case GRPC_MDELEM_STORAGE_ALLOCATED: {
356
- auto* md =
357
- reinterpret_cast<grpc_core::AllocatedMetadata*> GRPC_MDELEM_DATA(gmd);
358
- #ifndef NDEBUG
359
- md->Ref(file, line);
360
- #else
361
- md->Ref();
362
- #endif
363
- break;
364
- }
365
- }
366
- return gmd;
367
- }
368
-
369
- #ifndef NDEBUG
370
- #define GRPC_MDELEM_UNREF(s) grpc_mdelem_unref((s), __FILE__, __LINE__)
371
- void grpc_mdelem_on_final_unref(grpc_mdelem_data_storage storage, void* ptr,
372
- uint32_t hash, const char* file, int line);
373
- inline void grpc_mdelem_unref(grpc_mdelem gmd, const char* file, int line) {
374
- #else
375
- #define GRPC_MDELEM_UNREF(s) grpc_mdelem_unref((s))
376
- void grpc_mdelem_on_final_unref(grpc_mdelem_data_storage storage, void* ptr,
377
- uint32_t hash);
378
- inline void grpc_mdelem_unref(grpc_mdelem gmd) {
379
- #endif
380
- const grpc_mdelem_data_storage storage = GRPC_MDELEM_STORAGE(gmd);
381
- switch (storage) {
382
- case GRPC_MDELEM_STORAGE_EXTERNAL:
383
- case GRPC_MDELEM_STORAGE_STATIC:
384
- return;
385
- case GRPC_MDELEM_STORAGE_INTERNED:
386
- case GRPC_MDELEM_STORAGE_ALLOCATED:
387
- auto* md =
388
- reinterpret_cast<grpc_core::RefcountedMdBase*> GRPC_MDELEM_DATA(gmd);
389
- /* once the refcount hits zero, some other thread can come along and
390
- free an interned md at any time: it's unsafe from this point on to
391
- access it so we read the hash now. */
392
- uint32_t hash = md->hash();
393
- #ifndef NDEBUG
394
- if (GPR_UNLIKELY(md->Unref(file, line))) {
395
- grpc_mdelem_on_final_unref(storage, md, hash, file, line);
396
- #else
397
- if (GPR_UNLIKELY(md->Unref())) {
398
- grpc_mdelem_on_final_unref(storage, md, hash);
399
- #endif
400
- }
401
- return;
402
- }
403
- }
404
-
405
- #define GRPC_MDNULL GRPC_MAKE_MDELEM(NULL, GRPC_MDELEM_STORAGE_EXTERNAL)
406
-
407
- /* We add 32 bytes of padding as per RFC-7540 section 6.5.2. */
408
- #define GRPC_MDELEM_LENGTH(e) \
409
- (GRPC_SLICE_LENGTH(GRPC_MDKEY((e))) + GRPC_SLICE_LENGTH(GRPC_MDVALUE((e))) + \
410
- 32)
411
-
412
- #define GRPC_MDSTR_KV_HASH(k_hash, v_hash) \
413
- (::grpc_core::RotateLeft(size_t(k_hash), size_t(2)) ^ (v_hash))
414
-
415
- void grpc_mdctx_global_init(void);
416
- void grpc_mdctx_global_shutdown();
417
-
418
- /* Like grpc_mdelem_from_slices, but we know that key is a static or interned
419
- slice and value is not static or interned. This gives us an inlinable
420
- fastpath - we know we must allocate metadata now, and that we do not need to
421
- unref the value (rather, we just transfer the ref). We can avoid a ref since:
422
- 1) the key slice is passed in already ref'd
423
- 2) We're guaranteed to create a new Allocated slice, thus meaning the
424
- ref can be considered 'transferred'.*/
425
- inline grpc_mdelem grpc_mdelem_from_slices(
426
- const grpc_core::ManagedMemorySlice& key,
427
- const grpc_core::UnmanagedMemorySlice& value) {
428
- using grpc_core::AllocatedMetadata;
429
- return GRPC_MAKE_MDELEM(new AllocatedMetadata(key, value),
430
- GRPC_MDELEM_STORAGE_ALLOCATED);
431
- }
432
-
433
- inline grpc_mdelem grpc_mdelem_from_slices(
434
- const grpc_core::ExternallyManagedSlice& key,
435
- const grpc_core::UnmanagedMemorySlice& value) {
436
- using grpc_core::AllocatedMetadata;
437
- return GRPC_MAKE_MDELEM(new AllocatedMetadata(key, value),
438
- GRPC_MDELEM_STORAGE_ALLOCATED);
439
- }
440
-
441
- inline grpc_mdelem grpc_mdelem_from_slices(
442
- const grpc_core::StaticMetadataSlice& key,
443
- const grpc_core::UnmanagedMemorySlice& value) {
444
- using grpc_core::AllocatedMetadata;
445
- return GRPC_MAKE_MDELEM(new AllocatedMetadata(key, value),
446
- GRPC_MDELEM_STORAGE_ALLOCATED);
447
- }
448
-
449
- #endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_H */
@@ -1,99 +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/transport/metadata_batch.h"
22
-
23
- #include <stdbool.h>
24
- #include <string.h>
25
-
26
- #include "absl/container/inlined_vector.h"
27
-
28
- #include <grpc/support/alloc.h>
29
- #include <grpc/support/log.h>
30
-
31
- #include "src/core/lib/profiling/timers.h"
32
- #include "src/core/lib/slice/slice_internal.h"
33
- #include "src/core/lib/slice/slice_string_helpers.h"
34
-
35
- void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
36
- const grpc_slice& value) {
37
- grpc_mdelem old_mdelem = storage->md;
38
- grpc_mdelem new_mdelem = grpc_mdelem_from_slices(
39
- grpc_slice_ref_internal(GRPC_MDKEY(old_mdelem)), value);
40
- storage->md = new_mdelem;
41
- GRPC_MDELEM_UNREF(old_mdelem);
42
- }
43
-
44
- namespace {
45
-
46
- class CopySink {
47
- public:
48
- explicit CopySink(grpc_metadata_batch* dst) : dst_(dst) {}
49
-
50
- void Encode(grpc_mdelem md) {
51
- // If the mdelem is not external, take a ref.
52
- // Otherwise, create a new copy, holding its own refs to the
53
- // underlying slices.
54
- if (GRPC_MDELEM_STORAGE(md) != GRPC_MDELEM_STORAGE_EXTERNAL) {
55
- md = GRPC_MDELEM_REF(md);
56
- } else {
57
- md = grpc_mdelem_from_slices(grpc_slice_copy(GRPC_MDKEY(md)),
58
- grpc_slice_copy(GRPC_MDVALUE(md)));
59
- }
60
- // Error unused in non-debug builds.
61
- grpc_error_handle GRPC_UNUSED error = dst_->Append(md);
62
- // The only way that Append() can fail is if
63
- // there's a duplicate entry for a callout. However, that can't be
64
- // the case here, because we would not have been allowed to create
65
- // a source batch that had that kind of conflict.
66
- GPR_DEBUG_ASSERT(error == GRPC_ERROR_NONE);
67
- }
68
-
69
- template <class T, class V>
70
- void Encode(T trait, V value) {
71
- dst_->Set(trait, value);
72
- }
73
-
74
- template <class T>
75
- void Encode(T trait, const grpc_core::Slice& value) {
76
- dst_->Set(trait, std::move(value.AsOwned()));
77
- }
78
-
79
- private:
80
- grpc_metadata_batch* dst_;
81
- };
82
-
83
- } // namespace
84
-
85
- void grpc_metadata_batch_copy(const grpc_metadata_batch* src,
86
- grpc_metadata_batch* dst) {
87
- dst->Clear();
88
- CopySink sink(dst);
89
- src->Encode(&sink);
90
- }
91
-
92
- grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src,
93
- grpc_mdelem md) {
94
- grpc_error_handle out = grpc_error_set_str(
95
- grpc_error_set_str(src, GRPC_ERROR_STR_KEY,
96
- grpc_core::StringViewFromSlice(GRPC_MDKEY(md))),
97
- GRPC_ERROR_STR_VALUE, grpc_core::StringViewFromSlice(GRPC_MDVALUE(md)));
98
- return out;
99
- }