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
@@ -31,14 +31,18 @@
31
31
  *
32
32
  */
33
33
 
34
- #ifndef GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H
35
- #define GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H
34
+ #ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H
35
+ #define GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H
36
36
 
37
- #include "src/core/ext/client_config/resolver_factory.h"
37
+ #include "src/core/ext/client_channel/resolver_factory.h"
38
+ #include "src/core/lib/iomgr/pollset_set.h"
38
39
 
39
- void grpc_resolver_registry_init(const char *default_prefix);
40
+ void grpc_resolver_registry_init();
40
41
  void grpc_resolver_registry_shutdown(void);
41
42
 
43
+ /** Set the default URI prefix to \a default_prefix. */
44
+ void grpc_resolver_registry_set_default_prefix(const char *default_prefix);
45
+
42
46
  /** Register a resolver type.
43
47
  URI's of \a scheme will be resolved with the given resolver.
44
48
  If \a priority is greater than zero, then the resolver will be eligible
@@ -54,9 +58,14 @@ void grpc_register_resolver_type(grpc_resolver_factory *factory);
54
58
  was not NULL).
55
59
  If a resolver factory was found, use it to instantiate a resolver and
56
60
  return it.
57
- If a resolver factory was not found, return NULL. */
58
- grpc_resolver *grpc_resolver_create(
59
- const char *target, grpc_client_channel_factory *client_channel_factory);
61
+ If a resolver factory was not found, return NULL.
62
+ \a args is a set of channel arguments to be included in the result
63
+ (typically the set of arguments passed in from the client API).
64
+ \a pollset_set is used to drive IO in the name resolution process, it
65
+ should not be NULL. */
66
+ grpc_resolver *grpc_resolver_create(grpc_exec_ctx *exec_ctx, const char *target,
67
+ const grpc_channel_args *args,
68
+ grpc_pollset_set *pollset_set);
60
69
 
61
70
  /** Find a resolver factory given a name and return an (owned-by-the-caller)
62
71
  * reference to it */
@@ -66,4 +75,8 @@ grpc_resolver_factory *grpc_resolver_factory_lookup(const char *name);
66
75
  representing the default authority to pass from a client. */
67
76
  char *grpc_get_default_authority(const char *target);
68
77
 
69
- #endif /* GRPC_CORE_EXT_CLIENT_CONFIG_RESOLVER_REGISTRY_H */
78
+ /** Returns a newly allocated string containing \a target, adding the
79
+ default prefix if needed. */
80
+ char *grpc_resolver_factory_add_default_prefix_if_needed(const char *target);
81
+
82
+ #endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H */
@@ -31,21 +31,26 @@
31
31
  *
32
32
  */
33
33
 
34
- #include "src/core/ext/client_config/subchannel.h"
34
+ #include "src/core/ext/client_channel/subchannel.h"
35
35
 
36
36
  #include <limits.h>
37
37
  #include <string.h>
38
38
 
39
39
  #include <grpc/support/alloc.h>
40
40
  #include <grpc/support/avl.h>
41
+ #include <grpc/support/string_util.h>
41
42
 
42
- #include "src/core/ext/client_config/client_channel.h"
43
- #include "src/core/ext/client_config/initial_connect_string.h"
44
- #include "src/core/ext/client_config/subchannel_index.h"
43
+ #include "src/core/ext/client_channel/client_channel.h"
44
+ #include "src/core/ext/client_channel/initial_connect_string.h"
45
+ #include "src/core/ext/client_channel/parse_address.h"
46
+ #include "src/core/ext/client_channel/subchannel_index.h"
47
+ #include "src/core/ext/client_channel/uri_parser.h"
45
48
  #include "src/core/lib/channel/channel_args.h"
46
49
  #include "src/core/lib/channel/connected_channel.h"
50
+ #include "src/core/lib/iomgr/sockaddr_utils.h"
47
51
  #include "src/core/lib/iomgr/timer.h"
48
52
  #include "src/core/lib/profiling/timers.h"
53
+ #include "src/core/lib/slice/slice_internal.h"
49
54
  #include "src/core/lib/support/backoff.h"
50
55
  #include "src/core/lib/surface/channel.h"
51
56
  #include "src/core/lib/surface/channel_init.h"
@@ -94,14 +99,11 @@ struct grpc_subchannel {
94
99
  size_t num_filters;
95
100
  /** channel arguments */
96
101
  grpc_channel_args *args;
97
- /** address to connect to */
98
- struct sockaddr *addr;
99
- size_t addr_len;
100
102
 
101
103
  grpc_subchannel_key *key;
102
104
 
103
105
  /** initial string to send to peer */
104
- gpr_slice initial_connect_string;
106
+ grpc_slice initial_connect_string;
105
107
 
106
108
  /** set during connection */
107
109
  grpc_connect_out_args connecting_result;
@@ -109,6 +111,9 @@ struct grpc_subchannel {
109
111
  /** callback for connection finishing */
110
112
  grpc_closure connected;
111
113
 
114
+ /** callback for our alarm */
115
+ grpc_closure on_alarm;
116
+
112
117
  /** pollset_set tracking who's interested in a connection
113
118
  being setup */
114
119
  grpc_pollset_set *pollset_set;
@@ -120,9 +125,9 @@ struct grpc_subchannel {
120
125
  gpr_mu mu;
121
126
 
122
127
  /** have we seen a disconnection? */
123
- int disconnected;
128
+ bool disconnected;
124
129
  /** are we connecting */
125
- int connecting;
130
+ bool connecting;
126
131
  /** connectivity state tracking */
127
132
  grpc_connectivity_state_tracker state_tracker;
128
133
 
@@ -133,7 +138,9 @@ struct grpc_subchannel {
133
138
  /** backoff state */
134
139
  gpr_backoff backoff_state;
135
140
  /** do we have an active alarm? */
136
- int have_alarm;
141
+ bool have_alarm;
142
+ /** have we started the backoff loop */
143
+ bool backoff_begun;
137
144
  /** our alarm */
138
145
  grpc_timer alarm;
139
146
  };
@@ -184,9 +191,10 @@ static void connection_destroy(grpc_exec_ctx *exec_ctx, void *arg,
184
191
  gpr_free(c);
185
192
  }
186
193
 
187
- void grpc_connected_subchannel_ref(
194
+ grpc_connected_subchannel *grpc_connected_subchannel_ref(
188
195
  grpc_connected_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
189
196
  GRPC_CHANNEL_STACK_REF(CHANNEL_STACK_FROM_CONNECTION(c), REF_REASON);
197
+ return c;
190
198
  }
191
199
 
192
200
  void grpc_connected_subchannel_unref(grpc_exec_ctx *exec_ctx,
@@ -204,9 +212,8 @@ static void subchannel_destroy(grpc_exec_ctx *exec_ctx, void *arg,
204
212
  grpc_error *error) {
205
213
  grpc_subchannel *c = arg;
206
214
  gpr_free((void *)c->filters);
207
- grpc_channel_args_destroy(c->args);
208
- gpr_free(c->addr);
209
- gpr_slice_unref(c->initial_connect_string);
215
+ grpc_channel_args_destroy(exec_ctx, c->args);
216
+ grpc_slice_unref_internal(exec_ctx, c->initial_connect_string);
210
217
  grpc_connectivity_state_destroy(exec_ctx, &c->state_tracker);
211
218
  grpc_connector_unref(exec_ctx, c->connector);
212
219
  grpc_pollset_set_destroy(c->pollset_set);
@@ -220,8 +227,8 @@ static gpr_atm ref_mutate(grpc_subchannel *c, gpr_atm delta,
220
227
  : gpr_atm_no_barrier_fetch_add(&c->ref_pair, delta);
221
228
  #ifdef GRPC_STREAM_REFCOUNT_DEBUG
222
229
  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
223
- "SUBCHANNEL: %p % 12s 0x%08x -> 0x%08x [%s]", c, purpose, old_val,
224
- old_val + delta, reason);
230
+ "SUBCHANNEL: %p %s 0x%08" PRIxPTR " -> 0x%08" PRIxPTR " [%s]", c,
231
+ purpose, old_val, old_val + delta, reason);
225
232
  #endif
226
233
  return old_val;
227
234
  }
@@ -264,7 +271,7 @@ static void disconnect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
264
271
  grpc_subchannel_index_unregister(exec_ctx, c->key, c);
265
272
  gpr_mu_lock(&c->mu);
266
273
  GPR_ASSERT(!c->disconnected);
267
- c->disconnected = 1;
274
+ c->disconnected = true;
268
275
  grpc_connector_shutdown(exec_ctx, c->connector);
269
276
  con = GET_CONNECTED_SUBCHANNEL(c, no_barrier);
270
277
  if (con != NULL) {
@@ -291,14 +298,15 @@ void grpc_subchannel_weak_unref(grpc_exec_ctx *exec_ctx,
291
298
  gpr_atm old_refs;
292
299
  old_refs = ref_mutate(c, -(gpr_atm)1, 1 REF_MUTATE_PURPOSE("WEAK_UNREF"));
293
300
  if (old_refs == 1) {
294
- grpc_exec_ctx_sched(exec_ctx, grpc_closure_create(subchannel_destroy, c),
295
- GRPC_ERROR_NONE, NULL);
301
+ grpc_closure_sched(exec_ctx, grpc_closure_create(subchannel_destroy, c,
302
+ grpc_schedule_on_exec_ctx),
303
+ GRPC_ERROR_NONE);
296
304
  }
297
305
  }
298
306
 
299
307
  grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
300
308
  grpc_connector *connector,
301
- grpc_subchannel_args *args) {
309
+ const grpc_subchannel_args *args) {
302
310
  grpc_subchannel_key *key = grpc_subchannel_key_create(connector, args);
303
311
  grpc_subchannel *c = grpc_subchannel_index_find(exec_ctx, key);
304
312
  if (c) {
@@ -320,31 +328,38 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
320
328
  } else {
321
329
  c->filters = NULL;
322
330
  }
323
- c->addr = gpr_malloc(args->addr_len);
324
- if (args->addr_len) memcpy(c->addr, args->addr, args->addr_len);
325
331
  c->pollset_set = grpc_pollset_set_create();
326
- c->addr_len = args->addr_len;
327
- grpc_set_initial_connect_string(&c->addr, &c->addr_len,
328
- &c->initial_connect_string);
329
- c->args = grpc_channel_args_copy(args->args);
332
+ grpc_resolved_address *addr = gpr_malloc(sizeof(*addr));
333
+ grpc_get_subchannel_address_arg(args->args, addr);
334
+ grpc_set_initial_connect_string(&addr, &c->initial_connect_string);
335
+ static const char *keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS};
336
+ grpc_arg new_arg = grpc_create_subchannel_address_arg(addr);
337
+ gpr_free(addr);
338
+ c->args = grpc_channel_args_copy_and_add_and_remove(
339
+ args->args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), &new_arg, 1);
340
+ gpr_free(new_arg.value.string);
341
+
330
342
  c->root_external_state_watcher.next = c->root_external_state_watcher.prev =
331
343
  &c->root_external_state_watcher;
332
- grpc_closure_init(&c->connected, subchannel_connected, c);
344
+ grpc_closure_init(&c->connected, subchannel_connected, c,
345
+ grpc_schedule_on_exec_ctx);
333
346
  grpc_connectivity_state_init(&c->state_tracker, GRPC_CHANNEL_IDLE,
334
347
  "subchannel");
335
348
  int initial_backoff_ms =
336
349
  GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS * 1000;
337
350
  int max_backoff_ms = GRPC_SUBCHANNEL_RECONNECT_MAX_BACKOFF_SECONDS * 1000;
351
+ int min_backoff_ms = GRPC_SUBCHANNEL_MIN_CONNECT_TIMEOUT_SECONDS * 1000;
338
352
  bool fixed_reconnect_backoff = false;
339
353
  if (c->args) {
340
354
  for (size_t i = 0; i < c->args->num_args; i++) {
341
355
  if (0 == strcmp(c->args->args[i].key,
342
- "grpc.testing.fixed_reconnect_backoff")) {
356
+ "grpc.testing.fixed_reconnect_backoff_ms")) {
343
357
  GPR_ASSERT(c->args->args[i].type == GRPC_ARG_INTEGER);
344
358
  fixed_reconnect_backoff = true;
345
- initial_backoff_ms = max_backoff_ms = grpc_channel_arg_get_integer(
346
- &c->args->args[i],
347
- (grpc_integer_options){initial_backoff_ms, 100, INT_MAX});
359
+ initial_backoff_ms = min_backoff_ms = max_backoff_ms =
360
+ grpc_channel_arg_get_integer(
361
+ &c->args->args[i],
362
+ (grpc_integer_options){initial_backoff_ms, 100, INT_MAX});
348
363
  } else if (0 == strcmp(c->args->args[i].key,
349
364
  GRPC_ARG_MAX_RECONNECT_BACKOFF_MS)) {
350
365
  fixed_reconnect_backoff = false;
@@ -361,22 +376,21 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
361
376
  }
362
377
  }
363
378
  gpr_backoff_init(
364
- &c->backoff_state,
379
+ &c->backoff_state, initial_backoff_ms,
365
380
  fixed_reconnect_backoff ? 1.0
366
381
  : GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER,
367
382
  fixed_reconnect_backoff ? 0.0 : GRPC_SUBCHANNEL_RECONNECT_JITTER,
368
- initial_backoff_ms, max_backoff_ms);
383
+ min_backoff_ms, max_backoff_ms);
369
384
  gpr_mu_init(&c->mu);
370
385
 
371
386
  return grpc_subchannel_index_register(exec_ctx, key, c);
372
387
  }
373
388
 
374
- static void continue_connect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
389
+ static void continue_connect_locked(grpc_exec_ctx *exec_ctx,
390
+ grpc_subchannel *c) {
375
391
  grpc_connect_in_args args;
376
392
 
377
393
  args.interested_parties = c->pollset_set;
378
- args.addr = c->addr;
379
- args.addr_len = c->addr_len;
380
394
  args.deadline = c->next_attempt;
381
395
  args.channel_args = c->args;
382
396
  args.initial_connect_string = c->initial_connect_string;
@@ -388,12 +402,6 @@ static void continue_connect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
388
402
  &c->connected);
389
403
  }
390
404
 
391
- static void start_connect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
392
- c->next_attempt =
393
- gpr_backoff_begin(&c->backoff_state, gpr_now(GPR_CLOCK_MONOTONIC));
394
- continue_connect(exec_ctx, c);
395
- }
396
-
397
405
  grpc_connectivity_state grpc_subchannel_check_connectivity(grpc_subchannel *c,
398
406
  grpc_error **error) {
399
407
  grpc_connectivity_state state;
@@ -420,6 +428,74 @@ static void on_external_state_watcher_done(grpc_exec_ctx *exec_ctx, void *arg,
420
428
  follow_up->cb(exec_ctx, follow_up->cb_arg, error);
421
429
  }
422
430
 
431
+ static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
432
+ grpc_subchannel *c = arg;
433
+ gpr_mu_lock(&c->mu);
434
+ c->have_alarm = false;
435
+ if (c->disconnected) {
436
+ error = GRPC_ERROR_CREATE_REFERENCING("Disconnected", &error, 1);
437
+ } else {
438
+ GRPC_ERROR_REF(error);
439
+ }
440
+ if (error == GRPC_ERROR_NONE) {
441
+ gpr_log(GPR_INFO, "Failed to connect to channel, retrying");
442
+ c->next_attempt =
443
+ gpr_backoff_step(&c->backoff_state, gpr_now(GPR_CLOCK_MONOTONIC));
444
+ continue_connect_locked(exec_ctx, c);
445
+ gpr_mu_unlock(&c->mu);
446
+ } else {
447
+ gpr_mu_unlock(&c->mu);
448
+ GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
449
+ }
450
+ GRPC_ERROR_UNREF(error);
451
+ }
452
+
453
+ static void maybe_start_connecting_locked(grpc_exec_ctx *exec_ctx,
454
+ grpc_subchannel *c) {
455
+ if (c->disconnected) {
456
+ /* Don't try to connect if we're already disconnected */
457
+ return;
458
+ }
459
+
460
+ if (c->connecting) {
461
+ /* Already connecting: don't restart */
462
+ return;
463
+ }
464
+
465
+ if (GET_CONNECTED_SUBCHANNEL(c, no_barrier) != NULL) {
466
+ /* Already connected: don't restart */
467
+ return;
468
+ }
469
+
470
+ if (!grpc_connectivity_state_has_watchers(&c->state_tracker)) {
471
+ /* Nobody is interested in connecting: so don't just yet */
472
+ return;
473
+ }
474
+
475
+ c->connecting = true;
476
+ GRPC_SUBCHANNEL_WEAK_REF(c, "connecting");
477
+
478
+ gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
479
+ if (!c->backoff_begun) {
480
+ c->backoff_begun = true;
481
+ c->next_attempt = gpr_backoff_begin(&c->backoff_state, now);
482
+ continue_connect_locked(exec_ctx, c);
483
+ } else {
484
+ GPR_ASSERT(!c->have_alarm);
485
+ c->have_alarm = true;
486
+ gpr_timespec time_til_next = gpr_time_sub(c->next_attempt, now);
487
+ if (gpr_time_cmp(time_til_next, gpr_time_0(time_til_next.clock_type)) <=
488
+ 0) {
489
+ gpr_log(GPR_INFO, "Retry immediately");
490
+ } else {
491
+ gpr_log(GPR_INFO, "Retry in %" PRId64 ".%09d seconds",
492
+ time_til_next.tv_sec, time_til_next.tv_nsec);
493
+ }
494
+ grpc_closure_init(&c->on_alarm, on_alarm, c, grpc_schedule_on_exec_ctx);
495
+ grpc_timer_init(exec_ctx, &c->alarm, c->next_attempt, &c->on_alarm, now);
496
+ }
497
+ }
498
+
423
499
  void grpc_subchannel_notify_on_state_change(
424
500
  grpc_exec_ctx *exec_ctx, grpc_subchannel *c,
425
501
  grpc_pollset_set *interested_parties, grpc_connectivity_state *state,
@@ -441,7 +517,8 @@ void grpc_subchannel_notify_on_state_change(
441
517
  w->subchannel = c;
442
518
  w->pollset_set = interested_parties;
443
519
  w->notify = notify;
444
- grpc_closure_init(&w->closure, on_external_state_watcher_done, w);
520
+ grpc_closure_init(&w->closure, on_external_state_watcher_done, w,
521
+ grpc_schedule_on_exec_ctx);
445
522
  if (interested_parties != NULL) {
446
523
  grpc_pollset_set_add_pollset_set(exec_ctx, c->pollset_set,
447
524
  interested_parties);
@@ -451,13 +528,9 @@ void grpc_subchannel_notify_on_state_change(
451
528
  w->next = &c->root_external_state_watcher;
452
529
  w->prev = w->next->prev;
453
530
  w->next->prev = w->prev->next = w;
454
- if (grpc_connectivity_state_notify_on_state_change(
455
- exec_ctx, &c->state_tracker, state, &w->closure)) {
456
- c->connecting = 1;
457
- /* released by connection */
458
- GRPC_SUBCHANNEL_WEAK_REF(c, "connecting");
459
- start_connect(exec_ctx, c);
460
- }
531
+ grpc_connectivity_state_notify_on_state_change(exec_ctx, &c->state_tracker,
532
+ state, &w->closure);
533
+ maybe_start_connecting_locked(exec_ctx, c);
461
534
  gpr_mu_unlock(&c->mu);
462
535
  }
463
536
  }
@@ -504,14 +577,13 @@ static void connected_subchannel_state_op(grpc_exec_ctx *exec_ctx,
504
577
  grpc_pollset_set *interested_parties,
505
578
  grpc_connectivity_state *state,
506
579
  grpc_closure *closure) {
507
- grpc_transport_op op;
580
+ grpc_transport_op *op = grpc_make_transport_op(NULL);
508
581
  grpc_channel_element *elem;
509
- memset(&op, 0, sizeof(op));
510
- op.connectivity_state = state;
511
- op.on_connectivity_state_change = closure;
512
- op.bind_pollset_set = interested_parties;
582
+ op->connectivity_state = state;
583
+ op->on_connectivity_state_change = closure;
584
+ op->bind_pollset_set = interested_parties;
513
585
  elem = grpc_channel_stack_element(CHANNEL_STACK_FROM_CONNECTION(con), 0);
514
- elem->filter->start_transport_op(exec_ctx, elem, &op);
586
+ elem->filter->start_transport_op(exec_ctx, elem, op);
515
587
  }
516
588
 
517
589
  void grpc_connected_subchannel_notify_on_state_change(
@@ -525,12 +597,11 @@ void grpc_connected_subchannel_notify_on_state_change(
525
597
  void grpc_connected_subchannel_ping(grpc_exec_ctx *exec_ctx,
526
598
  grpc_connected_subchannel *con,
527
599
  grpc_closure *closure) {
528
- grpc_transport_op op;
600
+ grpc_transport_op *op = grpc_make_transport_op(NULL);
529
601
  grpc_channel_element *elem;
530
- memset(&op, 0, sizeof(op));
531
- op.send_ping = closure;
602
+ op->send_ping = closure;
532
603
  elem = grpc_channel_stack_element(CHANNEL_STACK_FROM_CONNECTION(con), 0);
533
- elem->filter->start_transport_op(exec_ctx, elem, &op);
604
+ elem->filter->start_transport_op(exec_ctx, elem, op);
534
605
  }
535
606
 
536
607
  static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
@@ -542,18 +613,24 @@ static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
542
613
  /* construct channel stack */
543
614
  grpc_channel_stack_builder *builder = grpc_channel_stack_builder_create();
544
615
  grpc_channel_stack_builder_set_channel_arguments(
545
- builder, c->connecting_result.channel_args);
616
+ exec_ctx, builder, c->connecting_result.channel_args);
546
617
  grpc_channel_stack_builder_set_transport(builder,
547
618
  c->connecting_result.transport);
548
619
 
549
- if (grpc_channel_init_create_stack(exec_ctx, builder,
550
- GRPC_CLIENT_SUBCHANNEL)) {
551
- con = grpc_channel_stack_builder_finish(exec_ctx, builder, 0, 1,
552
- connection_destroy, NULL);
553
- } else {
554
- grpc_channel_stack_builder_destroy(builder);
620
+ if (!grpc_channel_init_create_stack(exec_ctx, builder,
621
+ GRPC_CLIENT_SUBCHANNEL)) {
622
+ grpc_channel_stack_builder_destroy(exec_ctx, builder);
555
623
  abort(); /* TODO(ctiller): what to do here (previously we just crashed) */
556
624
  }
625
+ grpc_error *error = grpc_channel_stack_builder_finish(
626
+ exec_ctx, builder, 0, 1, connection_destroy, NULL, (void **)&con);
627
+ if (error != GRPC_ERROR_NONE) {
628
+ const char *msg = grpc_error_string(error);
629
+ gpr_log(GPR_ERROR, "error initializing subchannel stack: %s", msg);
630
+ grpc_error_free_string(msg);
631
+ GRPC_ERROR_UNREF(error);
632
+ abort(); /* TODO(ctiller): what to do here? */
633
+ }
557
634
  stk = CHANNEL_STACK_FROM_CONNECTION(con);
558
635
  memset(&c->connecting_result, 0, sizeof(c->connecting_result));
559
636
 
@@ -562,7 +639,7 @@ static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
562
639
  sw_subchannel->subchannel = c;
563
640
  sw_subchannel->connectivity_state = GRPC_CHANNEL_READY;
564
641
  grpc_closure_init(&sw_subchannel->closure, subchannel_on_child_state_changed,
565
- sw_subchannel);
642
+ sw_subchannel, grpc_schedule_on_exec_ctx);
566
643
 
567
644
  if (c->disconnected) {
568
645
  gpr_free(sw_subchannel);
@@ -579,12 +656,9 @@ static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
579
656
  Re-evaluate if we really need this. */
580
657
  gpr_atm_full_barrier();
581
658
  GPR_ASSERT(gpr_atm_rel_cas(&c->connected_subchannel, 0, (gpr_atm)con));
582
- c->connecting = 0;
583
659
 
584
660
  /* setup subchannel watching connected subchannel for changes; subchannel
585
- ref
586
- for connecting is donated
587
- to the state watcher */
661
+ ref for connecting is donated to the state watcher */
588
662
  GRPC_SUBCHANNEL_WEAK_REF(c, "state_watcher");
589
663
  GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
590
664
  grpc_connected_subchannel_notify_on_state_change(
@@ -596,28 +670,6 @@ static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
596
670
  GRPC_ERROR_NONE, "connected");
597
671
  }
598
672
 
599
- static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
600
- grpc_subchannel *c = arg;
601
- gpr_mu_lock(&c->mu);
602
- c->have_alarm = 0;
603
- if (c->disconnected) {
604
- error = GRPC_ERROR_CREATE_REFERENCING("Disconnected", &error, 1);
605
- } else {
606
- GRPC_ERROR_REF(error);
607
- }
608
- if (error == GRPC_ERROR_NONE) {
609
- gpr_log(GPR_INFO, "Failed to connect to channel, retrying");
610
- c->next_attempt =
611
- gpr_backoff_step(&c->backoff_state, gpr_now(GPR_CLOCK_MONOTONIC));
612
- continue_connect(exec_ctx, c);
613
- gpr_mu_unlock(&c->mu);
614
- } else {
615
- gpr_mu_unlock(&c->mu);
616
- GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
617
- }
618
- GRPC_ERROR_UNREF(error);
619
- }
620
-
621
673
  static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg,
622
674
  grpc_error *error) {
623
675
  grpc_subchannel *c = arg;
@@ -625,34 +677,29 @@ static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg,
625
677
 
626
678
  GRPC_SUBCHANNEL_WEAK_REF(c, "connected");
627
679
  gpr_mu_lock(&c->mu);
680
+ c->connecting = false;
628
681
  if (c->connecting_result.transport != NULL) {
629
682
  publish_transport_locked(exec_ctx, c);
630
683
  } else if (c->disconnected) {
631
684
  GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
632
685
  } else {
633
- gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
634
- GPR_ASSERT(!c->have_alarm);
635
- c->have_alarm = 1;
636
686
  grpc_connectivity_state_set(
637
687
  exec_ctx, &c->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
638
- GRPC_ERROR_CREATE_REFERENCING("Connect Failed", &error, 1),
688
+ grpc_error_set_int(
689
+ GRPC_ERROR_CREATE_REFERENCING("Connect Failed", &error, 1),
690
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
639
691
  "connect_failed");
640
- gpr_timespec time_til_next = gpr_time_sub(c->next_attempt, now);
692
+
641
693
  const char *errmsg = grpc_error_string(error);
642
694
  gpr_log(GPR_INFO, "Connect failed: %s", errmsg);
643
- if (gpr_time_cmp(time_til_next, gpr_time_0(time_til_next.clock_type)) <=
644
- 0) {
645
- gpr_log(GPR_INFO, "Retry immediately");
646
- } else {
647
- gpr_log(GPR_INFO, "Retry in %" PRId64 ".%09d seconds",
648
- time_til_next.tv_sec, time_til_next.tv_nsec);
649
- }
650
- grpc_timer_init(exec_ctx, &c->alarm, c->next_attempt, on_alarm, c, now);
651
695
  grpc_error_free_string(errmsg);
696
+
697
+ maybe_start_connecting_locked(exec_ctx, c);
698
+ GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
652
699
  }
653
700
  gpr_mu_unlock(&c->mu);
654
- GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
655
- grpc_channel_args_destroy(delete_channel_args);
701
+ GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connected");
702
+ grpc_channel_args_destroy(exec_ctx, delete_channel_args);
656
703
  }
657
704
 
658
705
  /*
@@ -702,22 +749,64 @@ grpc_connected_subchannel *grpc_subchannel_get_connected_subchannel(
702
749
  return GET_CONNECTED_SUBCHANNEL(c, acq);
703
750
  }
704
751
 
705
- grpc_subchannel_call *grpc_connected_subchannel_create_call(
752
+ grpc_error *grpc_connected_subchannel_create_call(
706
753
  grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *con,
707
- grpc_polling_entity *pollent) {
754
+ grpc_polling_entity *pollent, grpc_mdstr *path, gpr_timespec start_time,
755
+ gpr_timespec deadline, grpc_subchannel_call **call) {
708
756
  grpc_channel_stack *chanstk = CHANNEL_STACK_FROM_CONNECTION(con);
709
- grpc_subchannel_call *call =
710
- gpr_malloc(sizeof(grpc_subchannel_call) + chanstk->call_stack_size);
711
- grpc_call_stack *callstk = SUBCHANNEL_CALL_TO_CALL_STACK(call);
712
- call->connection = con;
757
+ *call = gpr_malloc(sizeof(grpc_subchannel_call) + chanstk->call_stack_size);
758
+ grpc_call_stack *callstk = SUBCHANNEL_CALL_TO_CALL_STACK(*call);
759
+ (*call)->connection = con; // Ref is added below.
760
+ grpc_error *error =
761
+ grpc_call_stack_init(exec_ctx, chanstk, 1, subchannel_call_destroy, *call,
762
+ NULL, NULL, path, start_time, deadline, callstk);
763
+ if (error != GRPC_ERROR_NONE) {
764
+ const char *error_string = grpc_error_string(error);
765
+ gpr_log(GPR_ERROR, "error: %s", error_string);
766
+ grpc_error_free_string(error_string);
767
+ gpr_free(*call);
768
+ return error;
769
+ }
713
770
  GRPC_CONNECTED_SUBCHANNEL_REF(con, "subchannel_call");
714
- grpc_call_stack_init(exec_ctx, chanstk, 1, subchannel_call_destroy, call,
715
- NULL, NULL, callstk);
716
771
  grpc_call_stack_set_pollset_or_pollset_set(exec_ctx, callstk, pollent);
717
- return call;
772
+ return GRPC_ERROR_NONE;
718
773
  }
719
774
 
720
775
  grpc_call_stack *grpc_subchannel_call_get_call_stack(
721
776
  grpc_subchannel_call *subchannel_call) {
722
777
  return SUBCHANNEL_CALL_TO_CALL_STACK(subchannel_call);
723
778
  }
779
+
780
+ static void grpc_uri_to_sockaddr(char *uri_str, grpc_resolved_address *addr) {
781
+ grpc_uri *uri = grpc_uri_parse(uri_str, 0 /* suppress_errors */);
782
+ GPR_ASSERT(uri != NULL);
783
+ if (strcmp(uri->scheme, "ipv4") == 0) {
784
+ GPR_ASSERT(parse_ipv4(uri, addr));
785
+ } else if (strcmp(uri->scheme, "ipv6") == 0) {
786
+ GPR_ASSERT(parse_ipv6(uri, addr));
787
+ } else {
788
+ GPR_ASSERT(parse_unix(uri, addr));
789
+ }
790
+ grpc_uri_destroy(uri);
791
+ }
792
+
793
+ void grpc_get_subchannel_address_arg(const grpc_channel_args *args,
794
+ grpc_resolved_address *addr) {
795
+ const grpc_arg *addr_arg =
796
+ grpc_channel_args_find(args, GRPC_ARG_SUBCHANNEL_ADDRESS);
797
+ GPR_ASSERT(addr_arg != NULL); // Should have been set by LB policy.
798
+ GPR_ASSERT(addr_arg->type == GRPC_ARG_STRING);
799
+ memset(addr, 0, sizeof(*addr));
800
+ if (*addr_arg->value.string != '\0') {
801
+ grpc_uri_to_sockaddr(addr_arg->value.string, addr);
802
+ }
803
+ }
804
+
805
+ grpc_arg grpc_create_subchannel_address_arg(const grpc_resolved_address *addr) {
806
+ grpc_arg new_arg;
807
+ new_arg.key = GRPC_ARG_SUBCHANNEL_ADDRESS;
808
+ new_arg.type = GRPC_ARG_STRING;
809
+ new_arg.value.string =
810
+ addr->len > 0 ? grpc_sockaddr_to_uri(addr) : gpr_strdup("");
811
+ return new_arg;
812
+ }