grpc 1.0.1 → 1.1.2

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 (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -42,48 +42,19 @@
42
42
  #include "src/core/lib/channel/channel_stack_builder.h"
43
43
  #include "src/core/lib/surface/channel_init.h"
44
44
 
45
- struct grpc_load_reporting_config {
46
- grpc_load_reporting_fn fn;
47
- void *user_data;
48
- };
49
-
50
- grpc_load_reporting_config *grpc_load_reporting_config_create(
51
- grpc_load_reporting_fn fn, void *user_data) {
52
- GPR_ASSERT(fn != NULL);
53
- grpc_load_reporting_config *lrc =
54
- gpr_malloc(sizeof(grpc_load_reporting_config));
55
- lrc->fn = fn;
56
- lrc->user_data = user_data;
57
- return lrc;
58
- }
59
-
60
- grpc_load_reporting_config *grpc_load_reporting_config_copy(
61
- grpc_load_reporting_config *src) {
62
- return grpc_load_reporting_config_create(src->fn, src->user_data);
63
- }
64
-
65
- void grpc_load_reporting_config_destroy(grpc_load_reporting_config *lrc) {
66
- gpr_free(lrc);
67
- }
68
-
69
- void grpc_load_reporting_config_call(
70
- grpc_load_reporting_config *lrc,
71
- const grpc_load_reporting_call_data *call_data) {
72
- lrc->fn(call_data, lrc->user_data);
73
- }
74
-
75
45
  static bool is_load_reporting_enabled(const grpc_channel_args *a) {
76
46
  if (a == NULL) return false;
77
47
  for (size_t i = 0; i < a->num_args; i++) {
78
48
  if (0 == strcmp(a->args[i].key, GRPC_ARG_ENABLE_LOAD_REPORTING)) {
79
- return a->args[i].type == GRPC_ARG_POINTER &&
80
- a->args[i].value.pointer.p != NULL;
49
+ return a->args[i].type == GRPC_ARG_INTEGER &&
50
+ a->args[i].value.integer != 0;
81
51
  }
82
52
  }
83
53
  return false;
84
54
  }
85
55
 
86
- static bool maybe_add_load_reporting_filter(grpc_channel_stack_builder *builder,
56
+ static bool maybe_add_load_reporting_filter(grpc_exec_ctx *exec_ctx,
57
+ grpc_channel_stack_builder *builder,
87
58
  void *arg) {
88
59
  const grpc_channel_args *args =
89
60
  grpc_channel_stack_builder_get_channel_arguments(builder);
@@ -94,37 +65,17 @@ static bool maybe_add_load_reporting_filter(grpc_channel_stack_builder *builder,
94
65
  return true;
95
66
  }
96
67
 
97
- static void lrd_arg_destroy(void *p) { grpc_load_reporting_config_destroy(p); }
98
-
99
- static void *lrd_arg_copy(void *p) {
100
- return grpc_load_reporting_config_copy(p);
101
- }
102
-
103
- static int lrd_arg_cmp(void *a, void *b) {
104
- grpc_load_reporting_config *lhs = a;
105
- grpc_load_reporting_config *rhs = b;
106
- return !(lhs->fn == rhs->fn && lhs->user_data == rhs->user_data);
107
- }
108
-
109
- static const grpc_arg_pointer_vtable lrd_ptr_vtable = {
110
- lrd_arg_copy, lrd_arg_destroy, lrd_arg_cmp};
111
-
112
- grpc_arg grpc_load_reporting_config_create_arg(
113
- grpc_load_reporting_config *lrc) {
68
+ grpc_arg grpc_load_reporting_enable_arg() {
114
69
  grpc_arg arg;
115
- arg.type = GRPC_ARG_POINTER;
70
+ arg.type = GRPC_ARG_INTEGER;
116
71
  arg.key = GRPC_ARG_ENABLE_LOAD_REPORTING;
117
- arg.value.pointer.p = lrc;
118
- arg.value.pointer.vtable = &lrd_ptr_vtable;
72
+ arg.value.integer = 1;
119
73
  return arg;
120
74
  }
121
75
 
122
76
  /* Plugin registration */
123
77
 
124
78
  void grpc_load_reporting_plugin_init(void) {
125
- grpc_channel_init_register_stage(GRPC_CLIENT_CHANNEL, INT_MAX,
126
- maybe_add_load_reporting_filter,
127
- (void *)&grpc_load_reporting_filter);
128
79
  grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX,
129
80
  maybe_add_load_reporting_filter,
130
81
  (void *)&grpc_load_reporting_filter);
@@ -34,42 +34,55 @@
34
34
  #ifndef GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_H
35
35
  #define GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_H
36
36
 
37
- #include "src/core/lib/iomgr/closure.h"
38
- #include "src/core/lib/surface/call.h"
37
+ #include <grpc/impl/codegen/grpc_types.h>
38
+ #include "src/core/lib/channel/channel_stack.h"
39
39
 
40
- typedef struct grpc_load_reporting_config grpc_load_reporting_config;
40
+ /** Metadata key for the gRPC LB load balancer token.
41
+ *
42
+ * The value corresponding to this key is an opaque token that is given to the
43
+ * frontend as part of each pick; the frontend sends this token to the backend
44
+ * in each request it sends when using that pick. The token is used by the
45
+ * backend to verify the request and to allow the backend to report load to the
46
+ * gRPC LB system. */
47
+ #define GRPC_LB_TOKEN_MD_KEY "lb-token"
41
48
 
42
- /** Call information to be passed to the provided load reporting function upon
43
- * completion of the call */
44
- typedef struct grpc_load_reporting_call_data {
45
- const grpc_call_stats *stats; /**< Stats for the call */
46
- const char *trailing_md_string; /**< LR trailing metadata info */
47
- } grpc_load_reporting_call_data;
49
+ /** Metadata key for gRPC LB cost reporting.
50
+ *
51
+ * The value corresponding to this key is an opaque binary blob reported by the
52
+ * backend as part of its trailing metadata containing cost information for the
53
+ * call. */
54
+ #define GRPC_LB_COST_MD_KEY "lb-cost-bin"
48
55
 
49
- /** Custom function to be called by the load reporting filter. */
50
- typedef void (*grpc_load_reporting_fn)(
51
- const grpc_load_reporting_call_data *call_data, void *user_data);
56
+ /** Identifiers for the invocation point of the users LR callback */
57
+ typedef enum grpc_load_reporting_source {
58
+ GRPC_LR_POINT_UNKNOWN = 0,
59
+ GRPC_LR_POINT_CHANNEL_CREATION,
60
+ GRPC_LR_POINT_CHANNEL_DESTRUCTION,
61
+ GRPC_LR_POINT_CALL_CREATION,
62
+ GRPC_LR_POINT_CALL_DESTRUCTION
63
+ } grpc_load_reporting_source;
52
64
 
53
- /** Register \a fn as the function to be invoked by the load reporting filter.
54
- * \a fn will be invoked at the beginning and at the end of the call.
55
- *
56
- * For the first invocation, \a fn's first argument
57
- * (grpc_load_reporting_call_data*) will be NULL. \a user_data is always passed
58
- * as-is. */
59
- grpc_load_reporting_config *grpc_load_reporting_config_create(
60
- grpc_load_reporting_fn fn, void *user_data);
65
+ /** Call information to be passed to the provided LR callback. */
66
+ typedef struct grpc_load_reporting_call_data {
67
+ const grpc_load_reporting_source source; /**< point of last data update. */
61
68
 
62
- grpc_load_reporting_config *grpc_load_reporting_config_copy(
63
- grpc_load_reporting_config *src);
69
+ /** Unique identifier for the channel associated with the data */
70
+ intptr_t channel_id;
64
71
 
65
- void grpc_load_reporting_config_destroy(grpc_load_reporting_config *lrc);
72
+ /** Unique identifier for the call associated with the data. If the call
73
+ * hasn't been created yet, it'll have a value of zero. */
74
+ intptr_t call_id;
66
75
 
67
- /** Invoke the function registered by \a grpc_load_reporting_init. */
68
- void grpc_load_reporting_config_call(
69
- grpc_load_reporting_config *lrc,
70
- const grpc_load_reporting_call_data *call_data);
76
+ /** Only valid when \a source is \a GRPC_LR_POINT_CALL_DESTRUCTION, that is,
77
+ * once the call has completed */
78
+ const grpc_call_final_info *final_info;
79
+
80
+ const char *initial_md_string; /**< value string for LR's initial md key */
81
+ const char *trailing_md_string; /**< value string for LR's trailing md key */
82
+ const char *method_name; /**< Corresponds to :path header */
83
+ } grpc_load_reporting_call_data;
71
84
 
72
85
  /** Return a \a grpc_arg enabling load reporting */
73
- grpc_arg grpc_load_reporting_config_create_arg(grpc_load_reporting_config *lrc);
86
+ grpc_arg grpc_load_reporting_enable_arg();
74
87
 
75
88
  #endif /* GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_H */
@@ -31,6 +31,7 @@
31
31
  *
32
32
  */
33
33
 
34
+ #include <grpc/support/alloc.h>
34
35
  #include <grpc/support/log.h>
35
36
  #include <grpc/support/string_util.h>
36
37
  #include <grpc/support/sync.h>
@@ -42,80 +43,162 @@
42
43
  #include "src/core/lib/profiling/timers.h"
43
44
  #include "src/core/lib/transport/static_metadata.h"
44
45
 
45
- typedef struct call_data { const char *trailing_md_string; } call_data;
46
+ typedef struct call_data {
47
+ intptr_t id; /**< an id unique to the call */
48
+ char *trailing_md_string;
49
+ char *initial_md_string;
50
+ const char *service_method;
51
+
52
+ /* stores the recv_initial_metadata op's ready closure, which we wrap with our
53
+ * own (on_initial_md_ready) in order to capture the incoming initial metadata
54
+ * */
55
+ grpc_closure *ops_recv_initial_metadata_ready;
56
+
57
+ /* to get notified of the availability of the incoming initial metadata. */
58
+ grpc_closure on_initial_md_ready;
59
+ grpc_metadata_batch *recv_initial_metadata;
60
+ } call_data;
61
+
46
62
  typedef struct channel_data {
47
- gpr_mu mu;
48
- grpc_load_reporting_config *lrc;
63
+ intptr_t id; /**< an id unique to the channel */
49
64
  } channel_data;
50
65
 
51
- static void invoke_lr_fn_locked(grpc_load_reporting_config *lrc,
52
- grpc_load_reporting_call_data *lr_call_data) {
53
- GPR_TIMER_BEGIN("load_reporting_config_fn", 0);
54
- grpc_load_reporting_config_call(lrc, lr_call_data);
55
- GPR_TIMER_END("load_reporting_config_fn", 0);
66
+ typedef struct {
67
+ grpc_call_element *elem;
68
+ grpc_exec_ctx *exec_ctx;
69
+ } recv_md_filter_args;
70
+
71
+ static grpc_mdelem *recv_md_filter(grpc_exec_ctx *exec_ctx, void *user_data,
72
+ grpc_mdelem *md) {
73
+ recv_md_filter_args *a = user_data;
74
+ grpc_call_element *elem = a->elem;
75
+ call_data *calld = elem->call_data;
76
+
77
+ if (md->key == GRPC_MDSTR_PATH) {
78
+ calld->service_method = grpc_mdstr_as_c_string(md->value);
79
+ } else if (md->key == GRPC_MDSTR_LB_TOKEN) {
80
+ calld->initial_md_string = gpr_strdup(grpc_mdstr_as_c_string(md->value));
81
+ return NULL;
82
+ }
83
+
84
+ return md;
85
+ }
86
+
87
+ static void on_initial_md_ready(grpc_exec_ctx *exec_ctx, void *user_data,
88
+ grpc_error *err) {
89
+ grpc_call_element *elem = user_data;
90
+ call_data *calld = elem->call_data;
91
+
92
+ if (err == GRPC_ERROR_NONE) {
93
+ recv_md_filter_args a;
94
+ a.elem = elem;
95
+ a.exec_ctx = exec_ctx;
96
+ grpc_metadata_batch_filter(exec_ctx, calld->recv_initial_metadata,
97
+ recv_md_filter, &a);
98
+ if (calld->service_method == NULL) {
99
+ err =
100
+ grpc_error_add_child(err, GRPC_ERROR_CREATE("Missing :path header"));
101
+ }
102
+ } else {
103
+ GRPC_ERROR_REF(err);
104
+ }
105
+ calld->ops_recv_initial_metadata_ready->cb(
106
+ exec_ctx, calld->ops_recv_initial_metadata_ready->cb_arg, err);
107
+ GRPC_ERROR_UNREF(err);
56
108
  }
57
109
 
58
110
  /* Constructor for call_data */
59
- static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
60
- grpc_call_element_args *args) {
111
+ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
112
+ grpc_call_element *elem,
113
+ grpc_call_element_args *args) {
61
114
  call_data *calld = elem->call_data;
62
115
  memset(calld, 0, sizeof(call_data));
116
+
117
+ calld->id = (intptr_t)args->call_stack;
118
+ grpc_closure_init(&calld->on_initial_md_ready, on_initial_md_ready, elem,
119
+ grpc_schedule_on_exec_ctx);
120
+
121
+ /* TODO(dgq): do something with the data
122
+ channel_data *chand = elem->channel_data;
123
+ grpc_load_reporting_call_data lr_call_data = {GRPC_LR_POINT_CALL_CREATION,
124
+ (intptr_t)chand->id,
125
+ (intptr_t)calld->id,
126
+ NULL,
127
+ NULL,
128
+ NULL,
129
+ NULL};
130
+ */
131
+
132
+ return GRPC_ERROR_NONE;
63
133
  }
64
134
 
65
135
  /* Destructor for call_data */
66
136
  static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
67
- const grpc_call_stats *stats, void *ignored) {
68
- channel_data *chand = elem->channel_data;
137
+ const grpc_call_final_info *final_info,
138
+ void *ignored) {
69
139
  call_data *calld = elem->call_data;
70
140
 
71
- grpc_load_reporting_call_data lr_call_data = {stats,
72
- calld->trailing_md_string};
73
-
74
- gpr_mu_lock(&chand->mu);
75
- invoke_lr_fn_locked(chand->lrc, &lr_call_data);
76
- gpr_mu_unlock(&chand->mu);
141
+ /* TODO(dgq): do something with the data
142
+ channel_data *chand = elem->channel_data;
143
+ grpc_load_reporting_call_data lr_call_data = {GRPC_LR_POINT_CALL_DESTRUCTION,
144
+ (intptr_t)chand->id,
145
+ (intptr_t)calld->id,
146
+ final_info,
147
+ calld->initial_md_string,
148
+ calld->trailing_md_string,
149
+ calld->service_method};
150
+ */
151
+
152
+ gpr_free(calld->initial_md_string);
153
+ gpr_free(calld->trailing_md_string);
77
154
  }
78
155
 
79
156
  /* Constructor for channel_data */
80
- static void init_channel_elem(grpc_exec_ctx *exec_ctx,
81
- grpc_channel_element *elem,
82
- grpc_channel_element_args *args) {
157
+ static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
158
+ grpc_channel_element *elem,
159
+ grpc_channel_element_args *args) {
83
160
  GPR_ASSERT(!args->is_last);
84
161
 
85
162
  channel_data *chand = elem->channel_data;
86
163
  memset(chand, 0, sizeof(channel_data));
87
164
 
88
- gpr_mu_init(&chand->mu);
89
- for (size_t i = 0; i < args->channel_args->num_args; i++) {
90
- if (0 == strcmp(args->channel_args->args[i].key,
91
- GRPC_ARG_ENABLE_LOAD_REPORTING)) {
92
- grpc_load_reporting_config *arg_lrc =
93
- args->channel_args->args[i].value.pointer.p;
94
- chand->lrc = grpc_load_reporting_config_copy(arg_lrc);
95
- GPR_ASSERT(chand->lrc != NULL);
96
- break;
97
- }
98
- }
99
- GPR_ASSERT(chand->lrc != NULL); /* arg actually found */
165
+ chand->id = (intptr_t)args->channel_stack;
166
+
167
+ /* TODO(dgq): do something with the data
168
+ grpc_load_reporting_call_data lr_call_data = {GRPC_LR_POINT_CHANNEL_CREATION,
169
+ (intptr_t)chand,
170
+ 0,
171
+ NULL,
172
+ NULL,
173
+ NULL,
174
+ NULL};
175
+ */
100
176
 
101
- gpr_mu_lock(&chand->mu);
102
- invoke_lr_fn_locked(chand->lrc, NULL);
103
- gpr_mu_unlock(&chand->mu);
177
+ return GRPC_ERROR_NONE;
104
178
  }
105
179
 
106
180
  /* Destructor for channel data */
107
181
  static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
108
182
  grpc_channel_element *elem) {
183
+ /* TODO(dgq): do something with the data
109
184
  channel_data *chand = elem->channel_data;
110
- gpr_mu_destroy(&chand->mu);
111
- grpc_load_reporting_config_destroy(chand->lrc);
185
+ grpc_load_reporting_call_data lr_call_data = {
186
+ GRPC_LR_POINT_CHANNEL_DESTRUCTION,
187
+ (intptr_t)chand->id,
188
+ 0,
189
+ NULL,
190
+ NULL,
191
+ NULL,
192
+ NULL};
193
+ */
112
194
  }
113
195
 
114
- static grpc_mdelem *lr_trailing_md_filter(void *user_data, grpc_mdelem *md) {
196
+ static grpc_mdelem *lr_trailing_md_filter(grpc_exec_ctx *exec_ctx,
197
+ void *user_data, grpc_mdelem *md) {
115
198
  grpc_call_element *elem = user_data;
116
199
  call_data *calld = elem->call_data;
117
200
 
118
- if (md->key == GRPC_MDSTR_LOAD_REPORTING) {
201
+ if (md->key == GRPC_MDSTR_LB_COST_BIN) {
119
202
  calld->trailing_md_string = gpr_strdup(grpc_mdstr_as_c_string(md->value));
120
203
  return NULL;
121
204
  }
@@ -127,9 +210,15 @@ static void lr_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
127
210
  grpc_call_element *elem,
128
211
  grpc_transport_stream_op *op) {
129
212
  GPR_TIMER_BEGIN("lr_start_transport_stream_op", 0);
213
+ call_data *calld = elem->call_data;
130
214
 
131
- if (op->send_trailing_metadata) {
132
- grpc_metadata_batch_filter(op->send_trailing_metadata,
215
+ if (op->recv_initial_metadata) {
216
+ calld->recv_initial_metadata = op->recv_initial_metadata;
217
+ /* substitute our callback for the higher callback */
218
+ calld->ops_recv_initial_metadata_ready = op->recv_initial_metadata_ready;
219
+ op->recv_initial_metadata_ready = &calld->on_initial_md_ready;
220
+ } else if (op->send_trailing_metadata) {
221
+ grpc_metadata_batch_filter(exec_ctx, op->send_trailing_metadata,
133
222
  lr_trailing_md_filter, elem);
134
223
  }
135
224
  grpc_call_next_op(exec_ctx, elem, op);
@@ -148,4 +237,5 @@ const grpc_channel_filter grpc_load_reporting_filter = {
148
237
  init_channel_elem,
149
238
  destroy_channel_elem,
150
239
  grpc_call_next_get_peer,
240
+ grpc_channel_next_get_info,
151
241
  "load_reporting"};
@@ -34,6 +34,7 @@
34
34
  #ifndef GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_FILTER_H
35
35
  #define GRPC_CORE_EXT_LOAD_REPORTING_LOAD_REPORTING_FILTER_H
36
36
 
37
+ #include "src/core/ext/load_reporting/load_reporting.h"
37
38
  #include "src/core/lib/channel/channel_stack.h"
38
39
 
39
40
  extern const grpc_channel_filter grpc_load_reporting_filter;
@@ -37,49 +37,51 @@
37
37
  #include <grpc/support/host_port.h>
38
38
  #include <grpc/support/string_util.h>
39
39
 
40
- #include "src/core/ext/client_config/lb_policy_registry.h"
41
- #include "src/core/ext/client_config/resolver_registry.h"
40
+ #include "src/core/ext/client_channel/http_connect_handshaker.h"
41
+ #include "src/core/ext/client_channel/lb_policy_registry.h"
42
+ #include "src/core/ext/client_channel/resolver_registry.h"
43
+ #include "src/core/lib/channel/channel_args.h"
42
44
  #include "src/core/lib/iomgr/resolve_address.h"
43
45
  #include "src/core/lib/iomgr/timer.h"
44
46
  #include "src/core/lib/support/backoff.h"
45
47
  #include "src/core/lib/support/string.h"
46
48
 
47
- #define BACKOFF_MULTIPLIER 1.6
48
- #define BACKOFF_JITTER 0.2
49
- #define BACKOFF_MIN_SECONDS 1
50
- #define BACKOFF_MAX_SECONDS 120
49
+ #define GRPC_DNS_MIN_CONNECT_TIMEOUT_SECONDS 1
50
+ #define GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS 1
51
+ #define GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER 1.6
52
+ #define GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS 120
53
+ #define GRPC_DNS_RECONNECT_JITTER 0.2
51
54
 
52
55
  typedef struct {
53
56
  /** base class: must be first */
54
57
  grpc_resolver base;
55
- /** refcount */
56
- gpr_refcount refs;
57
58
  /** name to resolve */
58
- char *name;
59
+ char *name_to_resolve;
59
60
  /** default port to use */
60
61
  char *default_port;
61
- /** subchannel factory */
62
- grpc_client_channel_factory *client_channel_factory;
63
- /** load balancing policy name */
64
- char *lb_policy_name;
62
+ /** channel args. */
63
+ grpc_channel_args *channel_args;
64
+ /** pollset_set to drive the name resolution process */
65
+ grpc_pollset_set *interested_parties;
65
66
 
66
67
  /** mutex guarding the rest of the state */
67
68
  gpr_mu mu;
68
69
  /** are we currently resolving? */
69
- int resolving;
70
- /** which version of resolved_config have we published? */
70
+ bool resolving;
71
+ /** which version of the result have we published? */
71
72
  int published_version;
72
- /** which version of resolved_config is current? */
73
+ /** which version of the result is current? */
73
74
  int resolved_version;
74
75
  /** pending next completion, or NULL */
75
76
  grpc_closure *next_completion;
76
- /** target config address for next completion */
77
- grpc_client_config **target_config;
78
- /** current (fully resolved) config */
79
- grpc_client_config *resolved_config;
77
+ /** target result address for next completion */
78
+ grpc_channel_args **target_result;
79
+ /** current (fully resolved) result */
80
+ grpc_channel_args *resolved_result;
80
81
  /** retry timer */
81
82
  bool have_retry_timer;
82
83
  grpc_timer retry_timer;
84
+ grpc_closure on_retry;
83
85
  /** retry backoff state */
84
86
  gpr_backoff backoff_state;
85
87
 
@@ -97,7 +99,7 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx,
97
99
  static void dns_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *r);
98
100
  static void dns_channel_saw_error(grpc_exec_ctx *exec_ctx, grpc_resolver *r);
99
101
  static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *r,
100
- grpc_client_config **target_config,
102
+ grpc_channel_args **target_result,
101
103
  grpc_closure *on_complete);
102
104
 
103
105
  static const grpc_resolver_vtable dns_resolver_vtable = {
@@ -110,9 +112,9 @@ static void dns_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver) {
110
112
  grpc_timer_cancel(exec_ctx, &r->retry_timer);
111
113
  }
112
114
  if (r->next_completion != NULL) {
113
- *r->target_config = NULL;
114
- grpc_exec_ctx_sched(exec_ctx, r->next_completion,
115
- GRPC_ERROR_CREATE("Resolver Shutdown"), NULL);
115
+ *r->target_result = NULL;
116
+ grpc_closure_sched(exec_ctx, r->next_completion,
117
+ GRPC_ERROR_CREATE("Resolver Shutdown"));
116
118
  r->next_completion = NULL;
117
119
  }
118
120
  gpr_mu_unlock(&r->mu);
@@ -130,13 +132,13 @@ static void dns_channel_saw_error(grpc_exec_ctx *exec_ctx,
130
132
  }
131
133
 
132
134
  static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver,
133
- grpc_client_config **target_config,
135
+ grpc_channel_args **target_result,
134
136
  grpc_closure *on_complete) {
135
137
  dns_resolver *r = (dns_resolver *)resolver;
136
138
  gpr_mu_lock(&r->mu);
137
139
  GPR_ASSERT(!r->next_completion);
138
140
  r->next_completion = on_complete;
139
- r->target_config = target_config;
141
+ r->target_result = target_result;
140
142
  if (r->resolved_version == 0 && !r->resolving) {
141
143
  gpr_backoff_reset(&r->backoff_state);
142
144
  dns_start_resolving_locked(exec_ctx, r);
@@ -165,48 +167,47 @@ static void dns_on_retry_timer(grpc_exec_ctx *exec_ctx, void *arg,
165
167
  static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg,
166
168
  grpc_error *error) {
167
169
  dns_resolver *r = arg;
168
- grpc_client_config *config = NULL;
169
- grpc_lb_policy *lb_policy;
170
+ grpc_channel_args *result = NULL;
170
171
  gpr_mu_lock(&r->mu);
171
172
  GPR_ASSERT(r->resolving);
172
- r->resolving = 0;
173
- grpc_resolved_addresses *addresses = r->addresses;
174
- if (addresses != NULL) {
175
- grpc_lb_policy_args lb_policy_args;
176
- config = grpc_client_config_create();
177
- memset(&lb_policy_args, 0, sizeof(lb_policy_args));
178
- lb_policy_args.addresses = addresses;
179
- lb_policy_args.client_channel_factory = r->client_channel_factory;
180
- lb_policy =
181
- grpc_lb_policy_create(exec_ctx, r->lb_policy_name, &lb_policy_args);
182
- if (lb_policy != NULL) {
183
- grpc_client_config_set_lb_policy(config, lb_policy);
184
- GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "construction");
173
+ r->resolving = false;
174
+ if (r->addresses != NULL) {
175
+ grpc_lb_addresses *addresses = grpc_lb_addresses_create(
176
+ r->addresses->naddrs, NULL /* user_data_vtable */);
177
+ for (size_t i = 0; i < r->addresses->naddrs; ++i) {
178
+ grpc_lb_addresses_set_address(
179
+ addresses, i, &r->addresses->addrs[i].addr,
180
+ r->addresses->addrs[i].len, false /* is_balancer */,
181
+ NULL /* balancer_name */, NULL /* user_data */);
185
182
  }
186
- grpc_resolved_addresses_destroy(addresses);
183
+ grpc_arg new_arg = grpc_lb_addresses_create_channel_arg(addresses);
184
+ result = grpc_channel_args_copy_and_add(r->channel_args, &new_arg, 1);
185
+ grpc_resolved_addresses_destroy(r->addresses);
186
+ grpc_lb_addresses_destroy(exec_ctx, addresses);
187
187
  } else {
188
188
  gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
189
189
  gpr_timespec next_try = gpr_backoff_step(&r->backoff_state, now);
190
190
  gpr_timespec timeout = gpr_time_sub(next_try, now);
191
191
  const char *msg = grpc_error_string(error);
192
- gpr_log(GPR_DEBUG, "dns resolution failed: %s", msg);
192
+ gpr_log(GPR_INFO, "dns resolution failed (will retry): %s", msg);
193
193
  grpc_error_free_string(msg);
194
194
  GPR_ASSERT(!r->have_retry_timer);
195
195
  r->have_retry_timer = true;
196
196
  GRPC_RESOLVER_REF(&r->base, "retry-timer");
197
- if (gpr_time_cmp(timeout, gpr_time_0(timeout.clock_type)) <= 0) {
197
+ if (gpr_time_cmp(timeout, gpr_time_0(timeout.clock_type)) > 0) {
198
198
  gpr_log(GPR_DEBUG, "retrying in %" PRId64 ".%09d seconds", timeout.tv_sec,
199
199
  timeout.tv_nsec);
200
200
  } else {
201
201
  gpr_log(GPR_DEBUG, "retrying immediately");
202
202
  }
203
- grpc_timer_init(exec_ctx, &r->retry_timer, next_try, dns_on_retry_timer, r,
204
- now);
203
+ grpc_closure_init(&r->on_retry, dns_on_retry_timer, r,
204
+ grpc_schedule_on_exec_ctx);
205
+ grpc_timer_init(exec_ctx, &r->retry_timer, next_try, &r->on_retry, now);
205
206
  }
206
- if (r->resolved_config) {
207
- grpc_client_config_unref(exec_ctx, r->resolved_config);
207
+ if (r->resolved_result != NULL) {
208
+ grpc_channel_args_destroy(exec_ctx, r->resolved_result);
208
209
  }
209
- r->resolved_config = config;
210
+ r->resolved_result = result;
210
211
  r->resolved_version++;
211
212
  dns_maybe_finish_next_locked(exec_ctx, r);
212
213
  gpr_mu_unlock(&r->mu);
@@ -218,21 +219,22 @@ static void dns_start_resolving_locked(grpc_exec_ctx *exec_ctx,
218
219
  dns_resolver *r) {
219
220
  GRPC_RESOLVER_REF(&r->base, "dns-resolving");
220
221
  GPR_ASSERT(!r->resolving);
221
- r->resolving = 1;
222
+ r->resolving = true;
222
223
  r->addresses = NULL;
223
- grpc_resolve_address(exec_ctx, r->name, r->default_port,
224
- grpc_closure_create(dns_on_resolved, r), &r->addresses);
224
+ grpc_resolve_address(
225
+ exec_ctx, r->name_to_resolve, r->default_port, r->interested_parties,
226
+ grpc_closure_create(dns_on_resolved, r, grpc_schedule_on_exec_ctx),
227
+ &r->addresses);
225
228
  }
226
229
 
227
230
  static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx,
228
231
  dns_resolver *r) {
229
232
  if (r->next_completion != NULL &&
230
233
  r->resolved_version != r->published_version) {
231
- *r->target_config = r->resolved_config;
232
- if (r->resolved_config) {
233
- grpc_client_config_ref(r->resolved_config);
234
- }
235
- grpc_exec_ctx_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE, NULL);
234
+ *r->target_result = r->resolved_result == NULL
235
+ ? NULL
236
+ : grpc_channel_args_copy(r->resolved_result);
237
+ grpc_closure_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE);
236
238
  r->next_completion = NULL;
237
239
  r->published_version = r->resolved_version;
238
240
  }
@@ -241,41 +243,46 @@ static void dns_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx,
241
243
  static void dns_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) {
242
244
  dns_resolver *r = (dns_resolver *)gr;
243
245
  gpr_mu_destroy(&r->mu);
244
- if (r->resolved_config) {
245
- grpc_client_config_unref(exec_ctx, r->resolved_config);
246
+ if (r->resolved_result != NULL) {
247
+ grpc_channel_args_destroy(exec_ctx, r->resolved_result);
246
248
  }
247
- grpc_client_channel_factory_unref(exec_ctx, r->client_channel_factory);
248
- gpr_free(r->name);
249
+ grpc_pollset_set_destroy(r->interested_parties);
250
+ gpr_free(r->name_to_resolve);
249
251
  gpr_free(r->default_port);
250
- gpr_free(r->lb_policy_name);
252
+ grpc_channel_args_destroy(exec_ctx, r->channel_args);
251
253
  gpr_free(r);
252
254
  }
253
255
 
254
- static grpc_resolver *dns_create(grpc_resolver_args *args,
255
- const char *default_port,
256
- const char *lb_policy_name) {
257
- dns_resolver *r;
258
- const char *path = args->uri->path;
259
-
256
+ static grpc_resolver *dns_create(grpc_exec_ctx *exec_ctx,
257
+ grpc_resolver_args *args,
258
+ const char *default_port) {
260
259
  if (0 != strcmp(args->uri->authority, "")) {
261
260
  gpr_log(GPR_ERROR, "authority based dns uri's not supported");
262
261
  return NULL;
263
262
  }
264
-
263
+ // Get name from args.
264
+ const char *path = args->uri->path;
265
265
  if (path[0] == '/') ++path;
266
-
267
- r = gpr_malloc(sizeof(dns_resolver));
266
+ // Get proxy name, if any.
267
+ char *proxy_name = grpc_get_http_proxy_server();
268
+ // Create resolver.
269
+ dns_resolver *r = gpr_malloc(sizeof(dns_resolver));
268
270
  memset(r, 0, sizeof(*r));
269
- gpr_ref_init(&r->refs, 1);
270
271
  gpr_mu_init(&r->mu);
271
272
  grpc_resolver_init(&r->base, &dns_resolver_vtable);
272
- r->name = gpr_strdup(path);
273
+ r->name_to_resolve = proxy_name == NULL ? gpr_strdup(path) : proxy_name;
273
274
  r->default_port = gpr_strdup(default_port);
274
- r->client_channel_factory = args->client_channel_factory;
275
- gpr_backoff_init(&r->backoff_state, BACKOFF_MULTIPLIER, BACKOFF_JITTER,
276
- BACKOFF_MIN_SECONDS * 1000, BACKOFF_MAX_SECONDS * 1000);
277
- grpc_client_channel_factory_ref(r->client_channel_factory);
278
- r->lb_policy_name = gpr_strdup(lb_policy_name);
275
+ r->channel_args = grpc_channel_args_copy(args->args);
276
+ r->interested_parties = grpc_pollset_set_create();
277
+ if (args->pollset_set != NULL) {
278
+ grpc_pollset_set_add_pollset_set(exec_ctx, r->interested_parties,
279
+ args->pollset_set);
280
+ }
281
+ gpr_backoff_init(&r->backoff_state, GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS,
282
+ GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER,
283
+ GRPC_DNS_RECONNECT_JITTER,
284
+ GRPC_DNS_MIN_CONNECT_TIMEOUT_SECONDS * 1000,
285
+ GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000);
279
286
  return &r->base;
280
287
  }
281
288
 
@@ -288,8 +295,9 @@ static void dns_factory_ref(grpc_resolver_factory *factory) {}
288
295
  static void dns_factory_unref(grpc_resolver_factory *factory) {}
289
296
 
290
297
  static grpc_resolver *dns_factory_create_resolver(
291
- grpc_resolver_factory *factory, grpc_resolver_args *args) {
292
- return dns_create(args, "https", "pick_first");
298
+ grpc_exec_ctx *exec_ctx, grpc_resolver_factory *factory,
299
+ grpc_resolver_args *args) {
300
+ return dns_create(exec_ctx, args, "https");
293
301
  }
294
302
 
295
303
  static char *dns_factory_get_default_host_name(grpc_resolver_factory *factory,