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
@@ -21,18 +21,48 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/slice.h>
25
- #include <grpc/support/time.h>
26
-
27
- #include "src/core/lib/gpr/string.h"
28
24
  #include "src/core/lib/iomgr/exec_ctx.h"
25
+ #include "src/core/lib/slice/slice.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ class Timeout {
30
+ public:
31
+ static Timeout FromDuration(grpc_millis duration);
32
+
33
+ // Computes: 100 * ((this - other) / other)
34
+ double RatioVersus(Timeout other) const;
35
+ Slice Encode() const;
36
+ grpc_millis AsDuration() const;
37
+
38
+ private:
39
+ enum class Unit : uint8_t {
40
+ kNanoseconds,
41
+ kMilliseconds,
42
+ kTenMilliseconds,
43
+ kHundredMilliseconds,
44
+ kSeconds,
45
+ kTenSeconds,
46
+ kHundredSeconds,
47
+ kMinutes,
48
+ kTenMinutes,
49
+ kHundredMinutes,
50
+ kHours,
51
+ };
52
+
53
+ Timeout(uint16_t value, Unit unit) : value_(value), unit_(unit) {}
54
+
55
+ static Timeout FromMillis(int64_t millis);
56
+ static Timeout FromSeconds(int64_t seconds);
57
+ static Timeout FromMinutes(int64_t minutes);
58
+ static Timeout FromHours(int64_t hours);
59
+
60
+ uint16_t value_;
61
+ Unit unit_;
62
+ };
29
63
 
30
- #define GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE 10
64
+ absl::optional<grpc_millis> ParseTimeout(const Slice& text);
31
65
 
32
- /* Encode/decode timeouts to the GRPC over HTTP/2 format;
33
- encoding may round up arbitrarily. If the timeout is larger than about 1157
34
- days, it will be capped and "99999999S" will be sent on the wire. */
35
- void grpc_http2_encode_timeout(grpc_millis timeout, char* buffer);
36
- int grpc_http2_decode_timeout(const grpc_slice& text, grpc_millis* timeout);
66
+ } // namespace grpc_core
37
67
 
38
68
  #endif /* GRPC_CORE_LIB_TRANSPORT_TIMEOUT_ENCODING_H */
@@ -24,13 +24,13 @@
24
24
  #include <stddef.h>
25
25
 
26
26
  #include "src/core/lib/channel/context.h"
27
- #include "src/core/lib/gprpp/arena.h"
28
27
  #include "src/core/lib/gprpp/orphanable.h"
29
28
  #include "src/core/lib/iomgr/call_combiner.h"
30
29
  #include "src/core/lib/iomgr/endpoint.h"
31
30
  #include "src/core/lib/iomgr/polling_entity.h"
32
31
  #include "src/core/lib/iomgr/pollset.h"
33
32
  #include "src/core/lib/iomgr/pollset_set.h"
33
+ #include "src/core/lib/resource_quota/arena.h"
34
34
  #include "src/core/lib/slice/slice_internal.h"
35
35
  #include "src/core/lib/transport/byte_stream.h"
36
36
  #include "src/core/lib/transport/connectivity_state.h"
@@ -40,47 +40,14 @@
40
40
  /* These routines are here to facilitate debugging - they produce string
41
41
  representations of various transport data structures */
42
42
 
43
- namespace {
44
- class MetadataListEncoder {
45
- public:
46
- explicit MetadataListEncoder(std::vector<std::string>* out) : out_(out) {}
47
- void Encode(const grpc_mdelem& md) {
48
- MaybeAddComma();
49
- out_->push_back("key=");
50
- char* dump = grpc_dump_slice(GRPC_MDKEY(md), GPR_DUMP_HEX | GPR_DUMP_ASCII);
51
- out_->push_back(dump);
52
- gpr_free(dump);
53
- out_->push_back(" value=");
54
- dump = grpc_dump_slice(GRPC_MDVALUE(md), GPR_DUMP_HEX | GPR_DUMP_ASCII);
55
- out_->push_back(dump);
56
- gpr_free(dump);
57
- }
58
-
59
- void Encode(grpc_core::GrpcTimeoutMetadata, grpc_millis deadline) {
60
- MaybeAddComma();
61
- out_->push_back(absl::StrFormat("deadline=%" PRId64, deadline));
62
- }
63
-
64
- template <typename Which>
65
- void Encode(Which, const typename Which::ValueType& value) {
66
- MaybeAddComma();
67
- out_->push_back(
68
- absl::StrCat(Which::key(), "=", Which::DisplayValue(value)));
69
- }
70
-
71
- private:
72
- void MaybeAddComma() {
73
- if (out_->size() != initial_size_) out_->push_back(", ");
74
- }
75
- std::vector<std::string>* const out_;
76
- const size_t initial_size_ = out_->size();
77
- };
78
- } // namespace
79
-
80
43
  static void put_metadata_list(const grpc_metadata_batch& md,
81
44
  std::vector<std::string>* out) {
82
- MetadataListEncoder encoder(out);
83
- md.Encode(&encoder);
45
+ bool first = true;
46
+ md.Log([out, &first](absl::string_view key, absl::string_view value) {
47
+ if (!first) out->push_back(", ");
48
+ first = false;
49
+ out->push_back(absl::StrCat(key, "=", value));
50
+ });
84
51
  }
85
52
 
86
53
  std::string grpc_transport_stream_op_batch_string(
@@ -1,20 +1,18 @@
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
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
@@ -36,14 +34,127 @@
36
34
  namespace grpc_core {
37
35
 
38
36
  namespace {
39
- // Checks if this string is made up of pchars, '/', '?', and '%' exclusively.
37
+
38
+ // Returns true for any sub-delim character, as defined in:
39
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-2.2
40
+ bool IsSubDelimChar(char c) {
41
+ switch (c) {
42
+ case '!':
43
+ case '$':
44
+ case '&':
45
+ case '\'':
46
+ case '(':
47
+ case ')':
48
+ case '*':
49
+ case '+':
50
+ case ',':
51
+ case ';':
52
+ case '=':
53
+ return true;
54
+ }
55
+ return false;
56
+ }
57
+
58
+ // Returns true for any unreserved character, as defined in:
59
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-2.3
60
+ bool IsUnreservedChar(char c) {
61
+ if (absl::ascii_isalnum(c)) return true;
62
+ switch (c) {
63
+ case '-':
64
+ case '.':
65
+ case '_':
66
+ case '~':
67
+ return true;
68
+ }
69
+ return false;
70
+ }
71
+
72
+ // Returns true for any character in scheme, as defined in:
73
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1
74
+ bool IsSchemeChar(char c) {
75
+ if (absl::ascii_isalnum(c)) return true;
76
+ switch (c) {
77
+ case '+':
78
+ case '-':
79
+ case '.':
80
+ return true;
81
+ }
82
+ return false;
83
+ }
84
+
85
+ // Returns true for any character in authority, as defined in:
86
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-3.2
87
+ bool IsAuthorityChar(char c) {
88
+ if (IsUnreservedChar(c)) return true;
89
+ if (IsSubDelimChar(c)) return true;
90
+ switch (c) {
91
+ case ':':
92
+ case '[':
93
+ case ']':
94
+ case '@':
95
+ return true;
96
+ }
97
+ return false;
98
+ }
99
+
100
+ // Returns true for any character in pchar, as defined in:
101
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-3.3
102
+ bool IsPChar(char c) {
103
+ if (IsUnreservedChar(c)) return true;
104
+ if (IsSubDelimChar(c)) return true;
105
+ switch (c) {
106
+ case ':':
107
+ case '@':
108
+ return true;
109
+ }
110
+ return false;
111
+ }
112
+
113
+ // Returns true for any character allowed in a URI path, as defined in:
114
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-3.3
115
+ bool IsPathChar(char c) { return IsPChar(c) || c == '/'; }
116
+
117
+ // Returns true for any character allowed in a URI query or fragment,
118
+ // as defined in:
40
119
  // See https://tools.ietf.org/html/rfc3986#section-3.4
41
- bool IsPCharString(absl::string_view str) {
42
- return (str.find_first_not_of("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
43
- "abcdefghijklmnopqrstuvwxyz"
44
- "0123456789"
45
- "?/:@\\-._~!$&'()*+,;=%") ==
46
- absl::string_view::npos);
120
+ bool IsQueryOrFragmentChar(char c) {
121
+ return IsPChar(c) || c == '/' || c == '?';
122
+ }
123
+
124
+ // Same as IsQueryOrFragmentChar(), but excludes '&' and '='.
125
+ bool IsQueryKeyOrValueChar(char c) {
126
+ return c != '&' && c != '=' && IsQueryOrFragmentChar(c);
127
+ }
128
+
129
+ // Returns a copy of str, percent-encoding any character for which
130
+ // is_allowed_char() returns false.
131
+ std::string PercentEncode(absl::string_view str,
132
+ std::function<bool(char)> is_allowed_char) {
133
+ std::string out;
134
+ for (char c : str) {
135
+ if (!is_allowed_char(c)) {
136
+ std::string hex = absl::BytesToHexString(absl::string_view(&c, 1));
137
+ GPR_ASSERT(hex.size() == 2);
138
+ // BytesToHexString() returns lower case, but
139
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-6.2.2.1 says
140
+ // to prefer upper-case.
141
+ absl::AsciiStrToUpper(&hex);
142
+ out.push_back('%');
143
+ out.append(hex);
144
+ } else {
145
+ out.push_back(c);
146
+ }
147
+ }
148
+ return out;
149
+ }
150
+
151
+ // Checks if this string is made up of query/fragment chars and '%' exclusively.
152
+ // See https://tools.ietf.org/html/rfc3986#section-3.4
153
+ bool IsQueryOrFragmentString(absl::string_view str) {
154
+ for (char c : str) {
155
+ if (!IsQueryOrFragmentChar(c) && c != '%') return false;
156
+ }
157
+ return true;
47
158
  }
48
159
 
49
160
  absl::Status MakeInvalidURIStatus(absl::string_view part_name,
@@ -52,8 +163,13 @@ absl::Status MakeInvalidURIStatus(absl::string_view part_name,
52
163
  return absl::InvalidArgumentError(absl::StrFormat(
53
164
  "Could not parse '%s' from uri '%s'. %s", part_name, uri, extra));
54
165
  }
166
+
55
167
  } // namespace
56
168
 
169
+ std::string URI::PercentEncodePath(absl::string_view str) {
170
+ return PercentEncode(str, IsPathChar);
171
+ }
172
+
57
173
  // Similar to `grpc_permissive_percent_decode_slice`, this %-decodes all valid
58
174
  // triplets, and passes through the rest verbatim.
59
175
  std::string URI::PercentDecode(absl::string_view str) {
@@ -65,18 +181,14 @@ std::string URI::PercentDecode(absl::string_view str) {
65
181
  out.reserve(str.size());
66
182
  for (size_t i = 0; i < str.length(); i++) {
67
183
  unescaped = "";
68
- if (str[i] != '%') {
69
- out += str[i];
70
- continue;
71
- }
72
- if (i + 3 >= str.length() ||
73
- !absl::CUnescape(absl::StrCat("\\x", str.substr(i + 1, 2)),
74
- &unescaped) ||
75
- unescaped.length() > 1) {
76
- out += str[i];
77
- } else {
184
+ if (str[i] == '%' && i + 3 <= str.length() &&
185
+ absl::CUnescape(absl::StrCat("\\x", str.substr(i + 1, 2)),
186
+ &unescaped) &&
187
+ unescaped.length() == 1) {
78
188
  out += unescaped[0];
79
189
  i += 2;
190
+ } else {
191
+ out += str[i];
80
192
  }
81
193
  }
82
194
  return out;
@@ -86,11 +198,11 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
86
198
  absl::StatusOr<std::string> decoded;
87
199
  absl::string_view remaining = uri_text;
88
200
  // parse scheme
89
- size_t idx = remaining.find(':');
90
- if (idx == remaining.npos || idx == 0) {
201
+ size_t offset = remaining.find(':');
202
+ if (offset == remaining.npos || offset == 0) {
91
203
  return MakeInvalidURIStatus("scheme", uri_text, "Scheme not found.");
92
204
  }
93
- std::string scheme(remaining.substr(0, idx));
205
+ std::string scheme(remaining.substr(0, offset));
94
206
  if (scheme.find_first_not_of("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
95
207
  "abcdefghijklmnopqrstuvwxyz"
96
208
  "0123456789+-.") != std::string::npos) {
@@ -102,30 +214,38 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
102
214
  "scheme", uri_text,
103
215
  "Scheme must begin with an alpha character [A-Za-z].");
104
216
  }
105
- remaining.remove_prefix(scheme.length() + 1);
217
+ remaining.remove_prefix(offset + 1);
106
218
  // parse authority
107
219
  std::string authority;
108
- if (absl::StartsWith(remaining, "//")) {
109
- remaining.remove_prefix(2);
110
- authority =
111
- PercentDecode(remaining.substr(0, remaining.find_first_of("/?#")));
112
- remaining.remove_prefix(authority.length());
220
+ if (absl::ConsumePrefix(&remaining, "//")) {
221
+ offset = remaining.find_first_of("/?#");
222
+ authority = PercentDecode(remaining.substr(0, offset));
223
+ if (offset == remaining.npos) {
224
+ remaining = "";
225
+ } else {
226
+ remaining.remove_prefix(offset);
227
+ }
113
228
  }
114
229
  // parse path
115
230
  std::string path;
116
231
  if (!remaining.empty()) {
117
- path = PercentDecode(remaining.substr(0, remaining.find_first_of("?#")));
118
- remaining.remove_prefix(path.length());
232
+ offset = remaining.find_first_of("?#");
233
+ path = PercentDecode(remaining.substr(0, offset));
234
+ if (offset == remaining.npos) {
235
+ remaining = "";
236
+ } else {
237
+ remaining.remove_prefix(offset);
238
+ }
119
239
  }
120
240
  // parse query
121
241
  std::vector<QueryParam> query_param_pairs;
122
- if (!remaining.empty() && remaining[0] == '?') {
123
- remaining.remove_prefix(1);
124
- absl::string_view tmp_query = remaining.substr(0, remaining.find('#'));
242
+ if (absl::ConsumePrefix(&remaining, "?")) {
243
+ offset = remaining.find('#');
244
+ absl::string_view tmp_query = remaining.substr(0, offset);
125
245
  if (tmp_query.empty()) {
126
246
  return MakeInvalidURIStatus("query", uri_text, "Invalid query string.");
127
247
  }
128
- if (!IsPCharString(tmp_query)) {
248
+ if (!IsQueryOrFragmentString(tmp_query)) {
129
249
  return MakeInvalidURIStatus("query string", uri_text,
130
250
  "Query string contains invalid characters.");
131
251
  }
@@ -136,12 +256,15 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
136
256
  query_param_pairs.push_back({PercentDecode(possible_kv.first),
137
257
  PercentDecode(possible_kv.second)});
138
258
  }
139
- remaining.remove_prefix(tmp_query.length());
259
+ if (offset == remaining.npos) {
260
+ remaining = "";
261
+ } else {
262
+ remaining.remove_prefix(offset);
263
+ }
140
264
  }
141
265
  std::string fragment;
142
- if (!remaining.empty() && remaining[0] == '#') {
143
- remaining.remove_prefix(1);
144
- if (!IsPCharString(remaining)) {
266
+ if (absl::ConsumePrefix(&remaining, "#")) {
267
+ if (!IsQueryOrFragmentString(remaining)) {
145
268
  return MakeInvalidURIStatus("fragment", uri_text,
146
269
  "Fragment contains invalid characters.");
147
270
  }
@@ -151,6 +274,18 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
151
274
  std::move(query_param_pairs), std::move(fragment));
152
275
  }
153
276
 
277
+ absl::StatusOr<URI> URI::Create(std::string scheme, std::string authority,
278
+ std::string path,
279
+ std::vector<QueryParam> query_parameter_pairs,
280
+ std::string fragment) {
281
+ if (!authority.empty() && !path.empty() && path[0] != '/') {
282
+ return absl::InvalidArgumentError(
283
+ "if authority is present, path must start with a '/'");
284
+ }
285
+ return URI(std::move(scheme), std::move(authority), std::move(path),
286
+ std::move(query_parameter_pairs), std::move(fragment));
287
+ }
288
+
154
289
  URI::URI(std::string scheme, std::string authority, std::string path,
155
290
  std::vector<QueryParam> query_parameter_pairs, std::string fragment)
156
291
  : scheme_(std::move(scheme)),
@@ -188,4 +323,39 @@ URI& URI::operator=(const URI& other) {
188
323
  }
189
324
  return *this;
190
325
  }
326
+
327
+ namespace {
328
+
329
+ // A pair formatter for use with absl::StrJoin() for formatting query params.
330
+ struct QueryParameterFormatter {
331
+ void operator()(std::string* out, const URI::QueryParam& query_param) const {
332
+ out->append(
333
+ absl::StrCat(PercentEncode(query_param.key, IsQueryKeyOrValueChar), "=",
334
+ PercentEncode(query_param.value, IsQueryKeyOrValueChar)));
335
+ }
336
+ };
337
+
338
+ } // namespace
339
+
340
+ std::string URI::ToString() const {
341
+ std::vector<std::string> parts = {PercentEncode(scheme_, IsSchemeChar), ":"};
342
+ if (!authority_.empty()) {
343
+ parts.emplace_back("//");
344
+ parts.emplace_back(PercentEncode(authority_, IsAuthorityChar));
345
+ }
346
+ if (!path_.empty()) {
347
+ parts.emplace_back(PercentEncode(path_, IsPathChar));
348
+ }
349
+ if (!query_parameter_pairs_.empty()) {
350
+ parts.push_back("?");
351
+ parts.push_back(
352
+ absl::StrJoin(query_parameter_pairs_, "&", QueryParameterFormatter()));
353
+ }
354
+ if (!fragment_.empty()) {
355
+ parts.push_back("#");
356
+ parts.push_back(PercentEncode(fragment_, IsQueryOrFragmentChar));
357
+ }
358
+ return absl::StrJoin(parts, "");
359
+ }
360
+
191
361
  } // namespace grpc_core
@@ -1,20 +1,18 @@
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
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #ifndef GRPC_CORE_LIB_URI_URI_PARSER_H
20
18
  #define GRPC_CORE_LIB_URI_URI_PARSER_H
@@ -40,15 +38,23 @@ class URI {
40
38
  bool operator==(const QueryParam& other) const {
41
39
  return key == other.key && value == other.value;
42
40
  }
41
+ bool operator<(const QueryParam& other) const {
42
+ int c = key.compare(other.key);
43
+ if (c != 0) return c < 0;
44
+ return value < other.value;
45
+ }
43
46
  };
44
47
 
45
- // Creates an instance of GrpcURI by parsing an rfc3986 URI string. Returns
46
- // an IllegalArgumentError on failure.
48
+ // Creates a URI by parsing an rfc3986 URI string. Returns an
49
+ // InvalidArgumentError on failure.
47
50
  static absl::StatusOr<URI> Parse(absl::string_view uri_text);
48
- // Explicit construction by individual URI components
49
- URI(std::string scheme, std::string authority, std::string path,
50
- std::vector<QueryParam> query_parameter_pairs, std::string fragment_);
51
+ // Creates a URI from components. Returns an InvalidArgumentError on failure.
52
+ static absl::StatusOr<URI> Create(
53
+ std::string scheme, std::string authority, std::string path,
54
+ std::vector<QueryParam> query_parameter_pairs, std::string fragment);
55
+
51
56
  URI() = default;
57
+
52
58
  // Copy construction and assignment
53
59
  URI(const URI& other);
54
60
  URI& operator=(const URI& other);
@@ -56,6 +62,8 @@ class URI {
56
62
  URI(URI&&) = default;
57
63
  URI& operator=(URI&&) = default;
58
64
 
65
+ static std::string PercentEncodePath(absl::string_view str);
66
+
59
67
  static std::string PercentDecode(absl::string_view str);
60
68
 
61
69
  const std::string& scheme() const { return scheme_; }
@@ -76,7 +84,12 @@ class URI {
76
84
  }
77
85
  const std::string& fragment() const { return fragment_; }
78
86
 
87
+ std::string ToString() const;
88
+
79
89
  private:
90
+ URI(std::string scheme, std::string authority, std::string path,
91
+ std::vector<QueryParam> query_parameter_pairs, std::string fragment);
92
+
80
93
  std::string scheme_;
81
94
  std::string authority_;
82
95
  std::string path_;
@@ -86,4 +99,4 @@ class URI {
86
99
  };
87
100
  } // namespace grpc_core
88
101
 
89
- #endif /* GRPC_CORE_LIB_URI_URI_PARSER_H */
102
+ #endif // GRPC_CORE_LIB_URI_URI_PARSER_H
@@ -27,8 +27,6 @@ void grpc_chttp2_plugin_init(void);
27
27
  void grpc_chttp2_plugin_shutdown(void);
28
28
  void grpc_client_channel_init(void);
29
29
  void grpc_client_channel_shutdown(void);
30
- void grpc_inproc_plugin_init(void);
31
- void grpc_inproc_plugin_shutdown(void);
32
30
  void grpc_resolver_fake_init(void);
33
31
  void grpc_resolver_fake_shutdown(void);
34
32
  void grpc_lb_policy_grpclb_init(void);
@@ -64,6 +62,8 @@ void ServiceConfigParserShutdown(void);
64
62
 
65
63
  #ifndef GRPC_NO_XDS
66
64
  namespace grpc_core {
65
+ void RbacFilterInit(void);
66
+ void RbacFilterShutdown(void);
67
67
  void XdsClientGlobalInit();
68
68
  void XdsClientGlobalShutdown();
69
69
  } // namespace grpc_core
@@ -99,7 +99,6 @@ void grpc_register_built_in_plugins(void) {
99
99
  grpc_register_plugin(grpc_core::ServiceConfigParserInit,
100
100
  grpc_core::ServiceConfigParserShutdown);
101
101
  grpc_register_plugin(grpc_client_channel_init, grpc_client_channel_shutdown);
102
- grpc_register_plugin(grpc_inproc_plugin_init, grpc_inproc_plugin_shutdown);
103
102
  grpc_register_plugin(grpc_resolver_fake_init, grpc_resolver_fake_shutdown);
104
103
  grpc_register_plugin(grpc_lb_policy_grpclb_init,
105
104
  grpc_lb_policy_grpclb_shutdown);
@@ -128,6 +127,8 @@ void grpc_register_built_in_plugins(void) {
128
127
  grpc_register_plugin(grpc_core::FaultInjectionFilterInit,
129
128
  grpc_core::FaultInjectionFilterShutdown);
130
129
  #ifndef GRPC_NO_XDS
130
+ // rbac_filter is being guarded with GRPC_NO_XDS to avoid a dependency on the re2 library by default
131
+ grpc_register_plugin(grpc_core::RbacFilterInit, grpc_core::RbacFilterShutdown);
131
132
  grpc_register_plugin(grpc_core::XdsClientGlobalInit,
132
133
  grpc_core::XdsClientGlobalShutdown);
133
134
  grpc_register_plugin(grpc_certificate_provider_registry_init,
@@ -717,11 +717,11 @@ alts_handshaker_client* alts_grpc_handshaker_client_create(
717
717
  channel, nullptr, GRPC_PROPAGATE_DEFAULTS, interested_parties,
718
718
  grpc_slice_from_static_string(ALTS_SERVICE_METHOD), &slice,
719
719
  GRPC_MILLIS_INF_FUTURE, nullptr);
720
+ grpc_slice_unref_internal(slice);
720
721
  GRPC_CLOSURE_INIT(&client->on_handshaker_service_resp_recv, grpc_cb, client,
721
722
  grpc_schedule_on_exec_ctx);
722
723
  GRPC_CLOSURE_INIT(&client->on_status_received, on_status_received, client,
723
724
  grpc_schedule_on_exec_ctx);
724
- grpc_slice_unref_internal(slice);
725
725
  return &client->base;
726
726
  }
727
727
 
@@ -21,11 +21,9 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/slice.h>
25
-
26
- extern "C" {
27
24
  #include <openssl/ssl.h>
28
- }
25
+
26
+ #include <grpc/slice.h>
29
27
 
30
28
  #include "src/core/lib/gprpp/ref_counted.h"
31
29
 
@@ -21,14 +21,12 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/slice.h>
25
- #include <grpc/support/sync.h>
24
+ #include <map>
26
25
 
27
- extern "C" {
28
26
  #include <openssl/ssl.h>
29
- }
30
27
 
31
- #include <map>
28
+ #include <grpc/slice.h>
29
+ #include <grpc/support/sync.h>
32
30
 
33
31
  #include "src/core/lib/gprpp/memory.h"
34
32
  #include "src/core/lib/gprpp/ref_counted.h"