grpc 1.24.0 → 1.25.0.pre1

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 (504) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -0,0 +1,171 @@
1
+ /*
2
+ *
3
+ * Copyright 2018 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_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_API_H
20
+ #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_API_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <stdint.h>
25
+
26
+ #include <grpc/slice_buffer.h>
27
+
28
+ #include "src/core/ext/filters/client_channel/server_address.h"
29
+ #include "src/core/ext/filters/client_channel/xds/xds_bootstrap.h"
30
+ #include "src/core/ext/filters/client_channel/xds/xds_client_stats.h"
31
+
32
+ namespace grpc_core {
33
+
34
+ class XdsPriorityListUpdate {
35
+ public:
36
+ struct LocalityMap {
37
+ struct Locality {
38
+ bool operator==(const Locality& other) const {
39
+ return *name == *other.name && serverlist == other.serverlist &&
40
+ lb_weight == other.lb_weight && priority == other.priority;
41
+ }
42
+
43
+ // This comparator only compares the locality names.
44
+ struct Less {
45
+ bool operator()(const Locality& lhs, const Locality& rhs) const {
46
+ return XdsLocalityName::Less()(lhs.name, rhs.name);
47
+ }
48
+ };
49
+
50
+ RefCountedPtr<XdsLocalityName> name;
51
+ ServerAddressList serverlist;
52
+ uint32_t lb_weight;
53
+ uint32_t priority;
54
+ };
55
+
56
+ bool Contains(const RefCountedPtr<XdsLocalityName>& name) const {
57
+ return localities.find(name) != localities.end();
58
+ }
59
+
60
+ size_t size() const { return localities.size(); }
61
+
62
+ Map<RefCountedPtr<XdsLocalityName>, Locality, XdsLocalityName::Less>
63
+ localities;
64
+ };
65
+
66
+ bool operator==(const XdsPriorityListUpdate& other) const;
67
+ bool operator!=(const XdsPriorityListUpdate& other) const {
68
+ return !(*this == other);
69
+ }
70
+
71
+ void Add(LocalityMap::Locality locality);
72
+
73
+ const LocalityMap* Find(uint32_t priority) const;
74
+
75
+ bool Contains(uint32_t priority) const {
76
+ return priority < priorities_.size();
77
+ }
78
+ bool Contains(const RefCountedPtr<XdsLocalityName>& name);
79
+
80
+ bool empty() const { return priorities_.empty(); }
81
+ size_t size() const { return priorities_.size(); }
82
+
83
+ // Callers should make sure the priority list is non-empty.
84
+ uint32_t LowestPriority() const {
85
+ return static_cast<uint32_t>(priorities_.size()) - 1;
86
+ }
87
+
88
+ private:
89
+ InlinedVector<LocalityMap, 2> priorities_;
90
+ };
91
+
92
+ // There are two phases of accessing this class's content:
93
+ // 1. to initialize in the control plane combiner;
94
+ // 2. to use in the data plane combiner.
95
+ // So no additional synchronization is needed.
96
+ class XdsDropConfig : public RefCounted<XdsDropConfig> {
97
+ public:
98
+ struct DropCategory {
99
+ bool operator==(const DropCategory& other) const {
100
+ return strcmp(name.get(), other.name.get()) == 0 &&
101
+ parts_per_million == other.parts_per_million;
102
+ }
103
+
104
+ UniquePtr<char> name;
105
+ const uint32_t parts_per_million;
106
+ };
107
+
108
+ using DropCategoryList = InlinedVector<DropCategory, 2>;
109
+
110
+ void AddCategory(UniquePtr<char> name, uint32_t parts_per_million) {
111
+ drop_category_list_.emplace_back(
112
+ DropCategory{std::move(name), parts_per_million});
113
+ }
114
+
115
+ // The only method invoked from the data plane combiner.
116
+ bool ShouldDrop(const UniquePtr<char>** category_name) const;
117
+
118
+ const DropCategoryList& drop_category_list() const {
119
+ return drop_category_list_;
120
+ }
121
+
122
+ bool operator==(const XdsDropConfig& other) const {
123
+ return drop_category_list_ == other.drop_category_list_;
124
+ }
125
+ bool operator!=(const XdsDropConfig& other) const {
126
+ return !(*this == other);
127
+ }
128
+
129
+ private:
130
+ DropCategoryList drop_category_list_;
131
+ };
132
+
133
+ struct EdsUpdate {
134
+ XdsPriorityListUpdate priority_list_update;
135
+ RefCountedPtr<XdsDropConfig> drop_config;
136
+ bool drop_all = false;
137
+ };
138
+
139
+ // TODO(juanlishen): Add fields as part of implementing CDS support.
140
+ struct CdsUpdate {};
141
+
142
+ // Creates an EDS request querying \a service_name.
143
+ grpc_slice XdsEdsRequestCreateAndEncode(const char* server_name,
144
+ const XdsBootstrap::Node* node,
145
+ const char* build_version);
146
+
147
+ // Parses the EDS response and returns the args to update locality map. If there
148
+ // is any error, the output update is invalid.
149
+ grpc_error* XdsEdsResponseDecodeAndParse(const grpc_slice& encoded_response,
150
+ EdsUpdate* update);
151
+
152
+ // Creates an LRS request querying \a server_name.
153
+ grpc_slice XdsLrsRequestCreateAndEncode(const char* server_name,
154
+ const XdsBootstrap::Node* node,
155
+ const char* build_version);
156
+
157
+ // Creates an LRS request sending client-side load reports. If all the counters
158
+ // in \a client_stats are zero, returns empty slice.
159
+ grpc_slice XdsLrsRequestCreateAndEncode(const char* server_name,
160
+ XdsClientStats* client_stats);
161
+
162
+ // Parses the LRS response and returns \a cluster_name and \a
163
+ // load_reporting_interval for client-side load reporting. If there is any
164
+ // error, the output config is invalid.
165
+ grpc_error* XdsLrsResponseDecodeAndParse(const grpc_slice& encoded_response,
166
+ UniquePtr<char>* cluster_name,
167
+ grpc_millis* load_reporting_interval);
168
+
169
+ } // namespace grpc_core
170
+
171
+ #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_XDS_XDS_API_H */
@@ -0,0 +1,450 @@
1
+ //
2
+ // Copyright 2019 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
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include "src/core/ext/filters/client_channel/xds/xds_bootstrap.h"
20
+
21
+ #include <errno.h>
22
+ #include <stdlib.h>
23
+
24
+ #include <grpc/support/string_util.h>
25
+
26
+ #include "src/core/lib/gpr/env.h"
27
+ #include "src/core/lib/iomgr/load_file.h"
28
+ #include "src/core/lib/slice/slice_internal.h"
29
+
30
+ namespace grpc_core {
31
+
32
+ UniquePtr<XdsBootstrap> XdsBootstrap::ReadFromFile(grpc_error** error) {
33
+ UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
34
+ if (path == nullptr) {
35
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
36
+ "GRPC_XDS_BOOTSTRAP env var not set");
37
+ return nullptr;
38
+ }
39
+ grpc_slice contents;
40
+ *error = grpc_load_file(path.get(), /*add_null_terminator=*/true, &contents);
41
+ if (*error != GRPC_ERROR_NONE) return nullptr;
42
+ return MakeUnique<XdsBootstrap>(contents, error);
43
+ }
44
+
45
+ XdsBootstrap::XdsBootstrap(grpc_slice contents, grpc_error** error)
46
+ : contents_(contents) {
47
+ tree_ = grpc_json_parse_string_with_len(
48
+ reinterpret_cast<char*>(GPR_SLICE_START_PTR(contents_)),
49
+ GPR_SLICE_LENGTH(contents_));
50
+ if (tree_ == nullptr) {
51
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
52
+ "failed to parse bootstrap file JSON");
53
+ return;
54
+ }
55
+ if (tree_->type != GRPC_JSON_OBJECT || tree_->key != nullptr) {
56
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
57
+ "malformed JSON in bootstrap file");
58
+ return;
59
+ }
60
+ InlinedVector<grpc_error*, 1> error_list;
61
+ bool seen_xds_server = false;
62
+ bool seen_node = false;
63
+ for (grpc_json* child = tree_->child; child != nullptr; child = child->next) {
64
+ if (child->key == nullptr) {
65
+ error_list.push_back(
66
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON key is null"));
67
+ } else if (strcmp(child->key, "xds_server") == 0) {
68
+ if (child->type != GRPC_JSON_OBJECT) {
69
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
70
+ "\"xds_server\" field is not an object"));
71
+ }
72
+ if (seen_xds_server) {
73
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
74
+ "duplicate \"xds_server\" field"));
75
+ }
76
+ seen_xds_server = true;
77
+ grpc_error* parse_error = ParseXdsServer(child);
78
+ if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
79
+ } else if (strcmp(child->key, "node") == 0) {
80
+ if (child->type != GRPC_JSON_OBJECT) {
81
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
82
+ "\"node\" field is not an object"));
83
+ }
84
+ if (seen_node) {
85
+ error_list.push_back(
86
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("duplicate \"node\" field"));
87
+ }
88
+ seen_node = true;
89
+ grpc_error* parse_error = ParseNode(child);
90
+ if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
91
+ }
92
+ }
93
+ if (!seen_xds_server) {
94
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
95
+ "\"xds_server\" field not present"));
96
+ }
97
+ *error = GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing xds bootstrap file",
98
+ &error_list);
99
+ }
100
+
101
+ XdsBootstrap::~XdsBootstrap() {
102
+ grpc_json_destroy(tree_);
103
+ grpc_slice_unref_internal(contents_);
104
+ }
105
+
106
+ grpc_error* XdsBootstrap::ParseXdsServer(grpc_json* json) {
107
+ InlinedVector<grpc_error*, 1> error_list;
108
+ server_uri_ = nullptr;
109
+ bool seen_channel_creds = false;
110
+ for (grpc_json* child = json->child; child != nullptr; child = child->next) {
111
+ if (child->key == nullptr) {
112
+ error_list.push_back(
113
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON key is null"));
114
+ } else if (strcmp(child->key, "server_uri") == 0) {
115
+ if (child->type != GRPC_JSON_STRING) {
116
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
117
+ "\"server_uri\" field is not a string"));
118
+ }
119
+ if (server_uri_ != nullptr) {
120
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
121
+ "duplicate \"server_uri\" field"));
122
+ }
123
+ server_uri_ = child->value;
124
+ } else if (strcmp(child->key, "channel_creds") == 0) {
125
+ if (child->type != GRPC_JSON_ARRAY) {
126
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
127
+ "\"channel_creds\" field is not an array"));
128
+ }
129
+ if (seen_channel_creds) {
130
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
131
+ "duplicate \"channel_creds\" field"));
132
+ }
133
+ seen_channel_creds = true;
134
+ grpc_error* parse_error = ParseChannelCredsArray(child);
135
+ if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
136
+ }
137
+ }
138
+ if (server_uri_ == nullptr) {
139
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
140
+ "\"server_uri\" field not present"));
141
+ }
142
+ return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"xds_server\" object",
143
+ &error_list);
144
+ }
145
+
146
+ grpc_error* XdsBootstrap::ParseChannelCredsArray(grpc_json* json) {
147
+ InlinedVector<grpc_error*, 1> error_list;
148
+ size_t idx = 0;
149
+ for (grpc_json *child = json->child; child != nullptr;
150
+ child = child->next, ++idx) {
151
+ if (child->key != nullptr) {
152
+ char* msg;
153
+ gpr_asprintf(&msg, "array element %" PRIuPTR " key is not null", idx);
154
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg));
155
+ }
156
+ if (child->type != GRPC_JSON_OBJECT) {
157
+ char* msg;
158
+ gpr_asprintf(&msg, "array element %" PRIuPTR " is not an object", idx);
159
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg));
160
+ } else {
161
+ grpc_error* parse_error = ParseChannelCreds(child, idx);
162
+ if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
163
+ }
164
+ }
165
+ return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"channel_creds\" array",
166
+ &error_list);
167
+ }
168
+
169
+ grpc_error* XdsBootstrap::ParseChannelCreds(grpc_json* json, size_t idx) {
170
+ InlinedVector<grpc_error*, 1> error_list;
171
+ ChannelCreds channel_creds;
172
+ for (grpc_json* child = json->child; child != nullptr; child = child->next) {
173
+ if (child->key == nullptr) {
174
+ error_list.push_back(
175
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON key is null"));
176
+ } else if (strcmp(child->key, "type") == 0) {
177
+ if (child->type != GRPC_JSON_STRING) {
178
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
179
+ "\"type\" field is not a string"));
180
+ }
181
+ if (channel_creds.type != nullptr) {
182
+ error_list.push_back(
183
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("duplicate \"type\" field"));
184
+ }
185
+ channel_creds.type = child->value;
186
+ } else if (strcmp(child->key, "config") == 0) {
187
+ if (child->type != GRPC_JSON_OBJECT) {
188
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
189
+ "\"config\" field is not an object"));
190
+ }
191
+ if (channel_creds.config != nullptr) {
192
+ error_list.push_back(
193
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("duplicate \"config\" field"));
194
+ }
195
+ channel_creds.config = child;
196
+ }
197
+ }
198
+ if (channel_creds.type != nullptr) channel_creds_.push_back(channel_creds);
199
+ // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
200
+ // string is not static in this case.
201
+ if (error_list.empty()) return GRPC_ERROR_NONE;
202
+ char* msg;
203
+ gpr_asprintf(&msg, "errors parsing index %" PRIuPTR, idx);
204
+ grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
205
+ gpr_free(msg);
206
+ for (size_t i = 0; i < error_list.size(); ++i) {
207
+ error = grpc_error_add_child(error, error_list[i]);
208
+ }
209
+ return error;
210
+ }
211
+
212
+ grpc_error* XdsBootstrap::ParseNode(grpc_json* json) {
213
+ InlinedVector<grpc_error*, 1> error_list;
214
+ node_ = MakeUnique<Node>();
215
+ bool seen_metadata = false;
216
+ bool seen_locality = false;
217
+ for (grpc_json* child = json->child; child != nullptr; child = child->next) {
218
+ if (child->key == nullptr) {
219
+ error_list.push_back(
220
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON key is null"));
221
+ } else if (strcmp(child->key, "id") == 0) {
222
+ if (child->type != GRPC_JSON_STRING) {
223
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
224
+ "\"id\" field is not a string"));
225
+ }
226
+ if (node_->id != nullptr) {
227
+ error_list.push_back(
228
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("duplicate \"id\" field"));
229
+ }
230
+ node_->id = child->value;
231
+ } else if (strcmp(child->key, "cluster") == 0) {
232
+ if (child->type != GRPC_JSON_STRING) {
233
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
234
+ "\"cluster\" field is not a string"));
235
+ }
236
+ if (node_->cluster != nullptr) {
237
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
238
+ "duplicate \"cluster\" field"));
239
+ }
240
+ node_->cluster = child->value;
241
+ } else if (strcmp(child->key, "locality") == 0) {
242
+ if (child->type != GRPC_JSON_OBJECT) {
243
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
244
+ "\"locality\" field is not an object"));
245
+ }
246
+ if (seen_locality) {
247
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
248
+ "duplicate \"locality\" field"));
249
+ }
250
+ seen_locality = true;
251
+ grpc_error* parse_error = ParseLocality(child);
252
+ if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
253
+ } else if (strcmp(child->key, "metadata") == 0) {
254
+ if (child->type != GRPC_JSON_OBJECT) {
255
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
256
+ "\"metadata\" field is not an object"));
257
+ }
258
+ if (seen_metadata) {
259
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
260
+ "duplicate \"metadata\" field"));
261
+ }
262
+ seen_metadata = true;
263
+ InlinedVector<grpc_error*, 1> parse_errors =
264
+ ParseMetadataStruct(child, &node_->metadata);
265
+ if (!parse_errors.empty()) {
266
+ grpc_error* parse_error = GRPC_ERROR_CREATE_FROM_VECTOR(
267
+ "errors parsing \"metadata\" object", &parse_errors);
268
+ error_list.push_back(parse_error);
269
+ }
270
+ }
271
+ }
272
+ return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"node\" object",
273
+ &error_list);
274
+ }
275
+
276
+ grpc_error* XdsBootstrap::ParseLocality(grpc_json* json) {
277
+ InlinedVector<grpc_error*, 1> error_list;
278
+ node_->locality_region = nullptr;
279
+ node_->locality_zone = nullptr;
280
+ node_->locality_subzone = nullptr;
281
+ for (grpc_json* child = json->child; child != nullptr; child = child->next) {
282
+ if (child->key == nullptr) {
283
+ error_list.push_back(
284
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON key is null"));
285
+ } else if (strcmp(child->key, "region") == 0) {
286
+ if (child->type != GRPC_JSON_STRING) {
287
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
288
+ "\"region\" field is not a string"));
289
+ }
290
+ if (node_->locality_region != nullptr) {
291
+ error_list.push_back(
292
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("duplicate \"region\" field"));
293
+ }
294
+ node_->locality_region = child->value;
295
+ } else if (strcmp(child->key, "zone") == 0) {
296
+ if (child->type != GRPC_JSON_STRING) {
297
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
298
+ "\"zone\" field is not a string"));
299
+ }
300
+ if (node_->locality_zone != nullptr) {
301
+ error_list.push_back(
302
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("duplicate \"zone\" field"));
303
+ }
304
+ node_->locality_zone = child->value;
305
+ } else if (strcmp(child->key, "subzone") == 0) {
306
+ if (child->type != GRPC_JSON_STRING) {
307
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
308
+ "\"subzone\" field is not a string"));
309
+ }
310
+ if (node_->locality_subzone != nullptr) {
311
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
312
+ "duplicate \"subzone\" field"));
313
+ }
314
+ node_->locality_subzone = child->value;
315
+ }
316
+ }
317
+ return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"locality\" object",
318
+ &error_list);
319
+ }
320
+
321
+ InlinedVector<grpc_error*, 1> XdsBootstrap::ParseMetadataStruct(
322
+ grpc_json* json,
323
+ Map<const char*, XdsBootstrap::MetadataValue, StringLess>* result) {
324
+ InlinedVector<grpc_error*, 1> error_list;
325
+ for (grpc_json* child = json->child; child != nullptr; child = child->next) {
326
+ if (child->key == nullptr) {
327
+ error_list.push_back(
328
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("JSON key is null"));
329
+ continue;
330
+ }
331
+ if (result->find(child->key) != result->end()) {
332
+ char* msg;
333
+ gpr_asprintf(&msg, "duplicate metadata key \"%s\"", child->key);
334
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg));
335
+ gpr_free(msg);
336
+ }
337
+ MetadataValue& value = (*result)[child->key];
338
+ grpc_error* parse_error = ParseMetadataValue(child, 0, &value);
339
+ if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
340
+ }
341
+ return error_list;
342
+ }
343
+
344
+ InlinedVector<grpc_error*, 1> XdsBootstrap::ParseMetadataList(
345
+ grpc_json* json, std::vector<MetadataValue>* result) {
346
+ InlinedVector<grpc_error*, 1> error_list;
347
+ size_t idx = 0;
348
+ for (grpc_json *child = json->child; child != nullptr;
349
+ child = child->next, ++idx) {
350
+ if (child->key != nullptr) {
351
+ char* msg;
352
+ gpr_asprintf(&msg, "JSON key is non-null for index %" PRIuPTR, idx);
353
+ error_list.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg));
354
+ gpr_free(msg);
355
+ }
356
+ result->emplace_back();
357
+ grpc_error* parse_error = ParseMetadataValue(child, idx, &result->back());
358
+ if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
359
+ }
360
+ return error_list;
361
+ }
362
+
363
+ grpc_error* XdsBootstrap::ParseMetadataValue(grpc_json* json, size_t idx,
364
+ MetadataValue* result) {
365
+ grpc_error* error = GRPC_ERROR_NONE;
366
+ auto context_func = [json, idx]() {
367
+ char* context;
368
+ if (json->key != nullptr) {
369
+ gpr_asprintf(&context, "key \"%s\"", json->key);
370
+ } else {
371
+ gpr_asprintf(&context, "index %" PRIuPTR, idx);
372
+ }
373
+ return context;
374
+ };
375
+ switch (json->type) {
376
+ case GRPC_JSON_STRING:
377
+ result->type = MetadataValue::Type::STRING;
378
+ result->string_value = json->value;
379
+ break;
380
+ case GRPC_JSON_NUMBER:
381
+ result->type = MetadataValue::Type::DOUBLE;
382
+ errno = 0; // To distinguish error.
383
+ result->double_value = strtod(json->value, nullptr);
384
+ if (errno != 0) {
385
+ char* context = context_func();
386
+ char* msg;
387
+ gpr_asprintf(&msg, "error parsing numeric value for %s: \"%s\"",
388
+ context, json->value);
389
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
390
+ gpr_free(context);
391
+ gpr_free(msg);
392
+ }
393
+ break;
394
+ case GRPC_JSON_TRUE:
395
+ result->type = MetadataValue::Type::BOOL;
396
+ result->bool_value = true;
397
+ break;
398
+ case GRPC_JSON_FALSE:
399
+ result->type = MetadataValue::Type::BOOL;
400
+ result->bool_value = false;
401
+ break;
402
+ case GRPC_JSON_NULL:
403
+ result->type = MetadataValue::Type::MD_NULL;
404
+ break;
405
+ case GRPC_JSON_ARRAY: {
406
+ result->type = MetadataValue::Type::LIST;
407
+ InlinedVector<grpc_error*, 1> error_list =
408
+ ParseMetadataList(json, &result->list_value);
409
+ if (!error_list.empty()) {
410
+ // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
411
+ // string is not static in this case.
412
+ char* context = context_func();
413
+ char* msg;
414
+ gpr_asprintf(&msg, "errors parsing struct for %s", context);
415
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
416
+ gpr_free(context);
417
+ gpr_free(msg);
418
+ for (size_t i = 0; i < error_list.size(); ++i) {
419
+ error = grpc_error_add_child(error, error_list[i]);
420
+ }
421
+ }
422
+ break;
423
+ }
424
+ case GRPC_JSON_OBJECT: {
425
+ result->type = MetadataValue::Type::STRUCT;
426
+ InlinedVector<grpc_error*, 1> error_list =
427
+ ParseMetadataStruct(json, &result->struct_value);
428
+ if (!error_list.empty()) {
429
+ // Can't use GRPC_ERROR_CREATE_FROM_VECTOR() here, because the error
430
+ // string is not static in this case.
431
+ char* context = context_func();
432
+ char* msg;
433
+ gpr_asprintf(&msg, "errors parsing struct for %s", context);
434
+ error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
435
+ gpr_free(context);
436
+ gpr_free(msg);
437
+ for (size_t i = 0; i < error_list.size(); ++i) {
438
+ error = grpc_error_add_child(error, error_list[i]);
439
+ GRPC_ERROR_UNREF(error_list[i]);
440
+ }
441
+ }
442
+ break;
443
+ }
444
+ default:
445
+ break;
446
+ }
447
+ return error;
448
+ }
449
+
450
+ } // namespace grpc_core