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
@@ -1,122 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015-2016, Google Inc.
4
- * All rights reserved.
5
- *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
9
- *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
19
- *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- *
32
- */
33
-
34
- #ifndef GRPC_IMPL_CODEGEN_BYTE_BUFFER_H
35
- #define GRPC_IMPL_CODEGEN_BYTE_BUFFER_H
36
-
37
- #include <grpc/impl/codegen/compression_types.h>
38
- #include <grpc/impl/codegen/slice_buffer.h>
39
-
40
- #ifdef __cplusplus
41
- extern "C" {
42
- #endif
43
-
44
- typedef enum {
45
- GRPC_BB_RAW
46
- /* Future types may include GRPC_BB_PROTOBUF, etc. */
47
- } grpc_byte_buffer_type;
48
-
49
- struct grpc_byte_buffer {
50
- void *reserved;
51
- grpc_byte_buffer_type type;
52
- union {
53
- struct {
54
- void *reserved[8];
55
- } reserved;
56
- struct {
57
- grpc_compression_algorithm compression;
58
- gpr_slice_buffer slice_buffer;
59
- } raw;
60
- } data;
61
- };
62
- typedef struct grpc_byte_buffer grpc_byte_buffer;
63
-
64
- /** Returns a RAW byte buffer instance over the given slices (up to \a nslices).
65
- *
66
- * Increases the reference count for all \a slices processed. The user is
67
- * responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
68
- GRPCAPI grpc_byte_buffer *grpc_raw_byte_buffer_create(gpr_slice *slices,
69
- size_t nslices);
70
-
71
- /** Returns a *compressed* RAW byte buffer instance over the given slices (up to
72
- * \a nslices). The \a compression argument defines the compression algorithm
73
- * used to generate the data in \a slices.
74
- *
75
- * Increases the reference count for all \a slices processed. The user is
76
- * responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
77
- GRPCAPI grpc_byte_buffer *grpc_raw_compressed_byte_buffer_create(
78
- gpr_slice *slices, size_t nslices, grpc_compression_algorithm compression);
79
-
80
- /** Copies input byte buffer \a bb.
81
- *
82
- * Increases the reference count of all the source slices. The user is
83
- * responsible for calling grpc_byte_buffer_destroy over the returned copy. */
84
- GRPCAPI grpc_byte_buffer *grpc_byte_buffer_copy(grpc_byte_buffer *bb);
85
-
86
- /** Returns the size of the given byte buffer, in bytes. */
87
- GRPCAPI size_t grpc_byte_buffer_length(grpc_byte_buffer *bb);
88
-
89
- /** Destroys \a byte_buffer deallocating all its memory. */
90
- GRPCAPI void grpc_byte_buffer_destroy(grpc_byte_buffer *byte_buffer);
91
-
92
- /** Reader for byte buffers. Iterates over slices in the byte buffer */
93
- struct grpc_byte_buffer_reader;
94
- typedef struct grpc_byte_buffer_reader grpc_byte_buffer_reader;
95
-
96
- /** Initialize \a reader to read over \a buffer.
97
- * Returns 1 upon success, 0 otherwise. */
98
- GRPCAPI int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader,
99
- grpc_byte_buffer *buffer);
100
-
101
- /** Cleanup and destroy \a reader */
102
- GRPCAPI void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader);
103
-
104
- /** Updates \a slice with the next piece of data from from \a reader and returns
105
- * 1. Returns 0 at the end of the stream. Caller is responsible for calling
106
- * gpr_slice_unref on the result. */
107
- GRPCAPI int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
108
- gpr_slice *slice);
109
-
110
- /** Merge all data from \a reader into single slice */
111
- GRPCAPI gpr_slice
112
- grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader *reader);
113
-
114
- /** Returns a RAW byte buffer instance from the output of \a reader. */
115
- GRPCAPI grpc_byte_buffer *grpc_raw_byte_buffer_from_reader(
116
- grpc_byte_buffer_reader *reader);
117
-
118
- #ifdef __cplusplus
119
- }
120
- #endif
121
-
122
- #endif /* GRPC_IMPL_CODEGEN_BYTE_BUFFER_H */
@@ -1,118 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015, Google Inc.
4
- * All rights reserved.
5
- *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
9
- *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
19
- *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- *
32
- */
33
-
34
- #ifndef GRPC_IMPL_CODEGEN_LOG_H
35
- #define GRPC_IMPL_CODEGEN_LOG_H
36
-
37
- #include <inttypes.h>
38
- #include <stdarg.h>
39
- #include <stdlib.h> /* for abort() */
40
-
41
- #include <grpc/impl/codegen/port_platform.h>
42
-
43
- #ifdef __cplusplus
44
- extern "C" {
45
- #endif
46
-
47
- /* GPR log API.
48
-
49
- Usage (within grpc):
50
-
51
- int argument1 = 3;
52
- char* argument2 = "hello";
53
- gpr_log(GPR_DEBUG, "format string %d", argument1);
54
- gpr_log(GPR_INFO, "hello world");
55
- gpr_log(GPR_ERROR, "%d %s!!", argument1, argument2); */
56
-
57
- /* The severity of a log message - use the #defines below when calling into
58
- gpr_log to additionally supply file and line data */
59
- typedef enum gpr_log_severity {
60
- GPR_LOG_SEVERITY_DEBUG,
61
- GPR_LOG_SEVERITY_INFO,
62
- GPR_LOG_SEVERITY_ERROR
63
- } gpr_log_severity;
64
-
65
- #define GPR_LOG_VERBOSITY_UNSET -1
66
-
67
- /* Returns a string representation of the log severity */
68
- const char *gpr_log_severity_string(gpr_log_severity severity);
69
-
70
- /* Macros to build log contexts at various severity levels */
71
- #define GPR_DEBUG __FILE__, __LINE__, GPR_LOG_SEVERITY_DEBUG
72
- #define GPR_INFO __FILE__, __LINE__, GPR_LOG_SEVERITY_INFO
73
- #define GPR_ERROR __FILE__, __LINE__, GPR_LOG_SEVERITY_ERROR
74
-
75
- /* Log a message. It's advised to use GPR_xxx above to generate the context
76
- * for each message */
77
- GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity,
78
- const char *format, ...) GPRC_PRINT_FORMAT_CHECK(4, 5);
79
-
80
- GPRAPI void gpr_log_message(const char *file, int line,
81
- gpr_log_severity severity, const char *message);
82
-
83
- /* Set global log verbosity */
84
- GPRAPI void gpr_set_log_verbosity(gpr_log_severity min_severity_to_print);
85
-
86
- GPRAPI void gpr_log_verbosity_init();
87
-
88
- /* Log overrides: applications can use this API to intercept logging calls
89
- and use their own implementations */
90
-
91
- typedef struct {
92
- const char *file;
93
- int line;
94
- gpr_log_severity severity;
95
- const char *message;
96
- } gpr_log_func_args;
97
-
98
- typedef void (*gpr_log_func)(gpr_log_func_args *args);
99
- GPRAPI void gpr_set_log_function(gpr_log_func func);
100
-
101
- /* abort() the process if x is zero, having written a line to the log.
102
-
103
- Intended for internal invariants. If the error can be recovered from,
104
- without the possibility of corruption, or might best be reflected via
105
- an exception in a higher-level language, consider returning error code. */
106
- #define GPR_ASSERT(x) \
107
- do { \
108
- if (!(x)) { \
109
- gpr_log(GPR_ERROR, "assertion failed: %s", #x); \
110
- abort(); \
111
- } \
112
- } while (0)
113
-
114
- #ifdef __cplusplus
115
- }
116
- #endif
117
-
118
- #endif /* GRPC_IMPL_CODEGEN_LOG_H */
@@ -1,130 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015, Google Inc.
4
- * All rights reserved.
5
- *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
9
- *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
19
- *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- *
32
- */
33
-
34
- #ifndef GRPC_IMPL_CODEGEN_TIME_H
35
- #define GRPC_IMPL_CODEGEN_TIME_H
36
- /* Time support.
37
- We use gpr_timespec, which is analogous to struct timespec. On some
38
- machines, absolute times may be in local time. */
39
-
40
- #include <grpc/impl/codegen/port_platform.h>
41
- #include <stddef.h>
42
- #include <time.h>
43
-
44
- #ifdef __cplusplus
45
- extern "C" {
46
- #endif
47
-
48
- /* The clocks we support. */
49
- typedef enum {
50
- /* Monotonic clock. Epoch undefined. Always moves forwards. */
51
- GPR_CLOCK_MONOTONIC = 0,
52
- /* Realtime clock. May jump forwards or backwards. Settable by
53
- the system administrator. Has its epoch at 0:00:00 UTC 1 Jan 1970. */
54
- GPR_CLOCK_REALTIME,
55
- /* CPU cycle time obtained by rdtsc instruction on x86 platforms. Epoch
56
- undefined. Degrades to GPR_CLOCK_REALTIME on other platforms. */
57
- GPR_CLOCK_PRECISE,
58
- /* Unmeasurable clock type: no base, created by taking the difference
59
- between two times */
60
- GPR_TIMESPAN
61
- } gpr_clock_type;
62
-
63
- typedef struct gpr_timespec {
64
- int64_t tv_sec;
65
- int32_t tv_nsec;
66
- /** Against which clock was this time measured? (or GPR_TIMESPAN if
67
- this is a relative time meaure) */
68
- gpr_clock_type clock_type;
69
- } gpr_timespec;
70
-
71
- /* Time constants. */
72
- GPRAPI gpr_timespec
73
- gpr_time_0(gpr_clock_type type); /* The zero time interval. */
74
- GPRAPI gpr_timespec gpr_inf_future(gpr_clock_type type); /* The far future */
75
- GPRAPI gpr_timespec gpr_inf_past(gpr_clock_type type); /* The far past. */
76
-
77
- #define GPR_MS_PER_SEC 1000
78
- #define GPR_US_PER_SEC 1000000
79
- #define GPR_NS_PER_SEC 1000000000
80
- #define GPR_NS_PER_MS 1000000
81
- #define GPR_NS_PER_US 1000
82
- #define GPR_US_PER_MS 1000
83
-
84
- /* initialize time subsystem */
85
- GPRAPI void gpr_time_init(void);
86
-
87
- /* Return the current time measured from the given clocks epoch. */
88
- GPRAPI gpr_timespec gpr_now(gpr_clock_type clock);
89
-
90
- /* Convert a timespec from one clock to another */
91
- GPRAPI gpr_timespec gpr_convert_clock_type(gpr_timespec t,
92
- gpr_clock_type target_clock);
93
-
94
- /* Return -ve, 0, or +ve according to whether a < b, a == b, or a > b
95
- respectively. */
96
- GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b);
97
-
98
- GPRAPI gpr_timespec gpr_time_max(gpr_timespec a, gpr_timespec b);
99
- GPRAPI gpr_timespec gpr_time_min(gpr_timespec a, gpr_timespec b);
100
-
101
- /* Add and subtract times. Calculations saturate at infinities. */
102
- GPRAPI gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b);
103
- GPRAPI gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b);
104
-
105
- /* Return a timespec representing a given number of time units. INT64_MIN is
106
- interpreted as gpr_inf_past, and INT64_MAX as gpr_inf_future. */
107
- GPRAPI gpr_timespec gpr_time_from_micros(int64_t x, gpr_clock_type clock_type);
108
- GPRAPI gpr_timespec gpr_time_from_nanos(int64_t x, gpr_clock_type clock_type);
109
- GPRAPI gpr_timespec gpr_time_from_millis(int64_t x, gpr_clock_type clock_type);
110
- GPRAPI gpr_timespec gpr_time_from_seconds(int64_t x, gpr_clock_type clock_type);
111
- GPRAPI gpr_timespec gpr_time_from_minutes(int64_t x, gpr_clock_type clock_type);
112
- GPRAPI gpr_timespec gpr_time_from_hours(int64_t x, gpr_clock_type clock_type);
113
-
114
- GPRAPI int32_t gpr_time_to_millis(gpr_timespec timespec);
115
-
116
- /* Return 1 if two times are equal or within threshold of each other,
117
- 0 otherwise */
118
- GPRAPI int gpr_time_similar(gpr_timespec a, gpr_timespec b,
119
- gpr_timespec threshold);
120
-
121
- /* Sleep until at least 'until' - an absolute timeout */
122
- GPRAPI void gpr_sleep_until(gpr_timespec until);
123
-
124
- GPRAPI double gpr_timespec_to_micros(gpr_timespec t);
125
-
126
- #ifdef __cplusplus
127
- }
128
- #endif
129
-
130
- #endif /* GRPC_IMPL_CODEGEN_TIME_H */
@@ -1,593 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015, Google Inc.
4
- * All rights reserved.
5
- *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
9
- *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
19
- *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- *
32
- */
33
-
34
- #include "src/core/ext/client_config/client_channel.h"
35
-
36
- #include <stdio.h>
37
- #include <string.h>
38
-
39
- #include <grpc/support/alloc.h>
40
- #include <grpc/support/log.h>
41
- #include <grpc/support/sync.h>
42
- #include <grpc/support/useful.h>
43
-
44
- #include "src/core/ext/client_config/subchannel_call_holder.h"
45
- #include "src/core/lib/channel/channel_args.h"
46
- #include "src/core/lib/channel/connected_channel.h"
47
- #include "src/core/lib/iomgr/iomgr.h"
48
- #include "src/core/lib/profiling/timers.h"
49
- #include "src/core/lib/support/string.h"
50
- #include "src/core/lib/surface/channel.h"
51
- #include "src/core/lib/transport/connectivity_state.h"
52
-
53
- /* Client channel implementation */
54
-
55
- typedef grpc_subchannel_call_holder call_data;
56
-
57
- typedef struct client_channel_channel_data {
58
- /** resolver for this channel */
59
- grpc_resolver *resolver;
60
- /** have we started resolving this channel */
61
- int started_resolving;
62
-
63
- /** mutex protecting client configuration, including all
64
- variables below in this data structure */
65
- gpr_mu mu_config;
66
- /** currently active load balancer - guarded by mu_config */
67
- grpc_lb_policy *lb_policy;
68
- /** incoming configuration - set by resolver.next
69
- guarded by mu_config */
70
- grpc_client_config *incoming_configuration;
71
- /** a list of closures that are all waiting for config to come in */
72
- grpc_closure_list waiting_for_config_closures;
73
- /** resolver callback */
74
- grpc_closure on_config_changed;
75
- /** connectivity state being tracked */
76
- grpc_connectivity_state_tracker state_tracker;
77
- /** when an lb_policy arrives, should we try to exit idle */
78
- int exit_idle_when_lb_policy_arrives;
79
- /** owning stack */
80
- grpc_channel_stack *owning_stack;
81
- /** interested parties (owned) */
82
- grpc_pollset_set *interested_parties;
83
- } channel_data;
84
-
85
- /** We create one watcher for each new lb_policy that is returned from a
86
- resolver,
87
- to watch for state changes from the lb_policy. When a state change is seen,
88
- we
89
- update the channel, and create a new watcher */
90
- typedef struct {
91
- channel_data *chand;
92
- grpc_closure on_changed;
93
- grpc_connectivity_state state;
94
- grpc_lb_policy *lb_policy;
95
- } lb_policy_connectivity_watcher;
96
-
97
- typedef struct {
98
- grpc_closure closure;
99
- grpc_call_element *elem;
100
- } waiting_call;
101
-
102
- static char *cc_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
103
- return grpc_subchannel_call_holder_get_peer(exec_ctx, elem->call_data);
104
- }
105
-
106
- static void cc_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
107
- grpc_call_element *elem,
108
- grpc_transport_stream_op *op) {
109
- GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
110
- grpc_subchannel_call_holder_perform_op(exec_ctx, elem->call_data, op);
111
- }
112
-
113
- static void watch_lb_policy(grpc_exec_ctx *exec_ctx, channel_data *chand,
114
- grpc_lb_policy *lb_policy,
115
- grpc_connectivity_state current_state);
116
-
117
- static void set_channel_connectivity_state_locked(grpc_exec_ctx *exec_ctx,
118
- channel_data *chand,
119
- grpc_connectivity_state state,
120
- grpc_error *error,
121
- const char *reason) {
122
- if ((state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
123
- state == GRPC_CHANNEL_SHUTDOWN) &&
124
- chand->lb_policy != NULL) {
125
- /* cancel fail-fast picks */
126
- grpc_lb_policy_cancel_picks(
127
- exec_ctx, chand->lb_policy,
128
- /* mask= */ GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY,
129
- /* check= */ 0);
130
- }
131
- grpc_connectivity_state_set(exec_ctx, &chand->state_tracker, state, error,
132
- reason);
133
- }
134
-
135
- static void on_lb_policy_state_changed_locked(grpc_exec_ctx *exec_ctx,
136
- lb_policy_connectivity_watcher *w,
137
- grpc_error *error) {
138
- grpc_connectivity_state publish_state = w->state;
139
- /* check if the notification is for a stale policy */
140
- if (w->lb_policy != w->chand->lb_policy) return;
141
-
142
- if (publish_state == GRPC_CHANNEL_SHUTDOWN && w->chand->resolver != NULL) {
143
- publish_state = GRPC_CHANNEL_TRANSIENT_FAILURE;
144
- grpc_resolver_channel_saw_error(exec_ctx, w->chand->resolver);
145
- GRPC_LB_POLICY_UNREF(exec_ctx, w->chand->lb_policy, "channel");
146
- w->chand->lb_policy = NULL;
147
- }
148
- set_channel_connectivity_state_locked(exec_ctx, w->chand, publish_state,
149
- GRPC_ERROR_REF(error), "lb_changed");
150
- if (w->state != GRPC_CHANNEL_SHUTDOWN) {
151
- watch_lb_policy(exec_ctx, w->chand, w->lb_policy, w->state);
152
- }
153
- }
154
-
155
- static void on_lb_policy_state_changed(grpc_exec_ctx *exec_ctx, void *arg,
156
- grpc_error *error) {
157
- lb_policy_connectivity_watcher *w = arg;
158
-
159
- gpr_mu_lock(&w->chand->mu_config);
160
- on_lb_policy_state_changed_locked(exec_ctx, w, error);
161
- gpr_mu_unlock(&w->chand->mu_config);
162
-
163
- GRPC_CHANNEL_STACK_UNREF(exec_ctx, w->chand->owning_stack, "watch_lb_policy");
164
- gpr_free(w);
165
- }
166
-
167
- static void watch_lb_policy(grpc_exec_ctx *exec_ctx, channel_data *chand,
168
- grpc_lb_policy *lb_policy,
169
- grpc_connectivity_state current_state) {
170
- lb_policy_connectivity_watcher *w = gpr_malloc(sizeof(*w));
171
- GRPC_CHANNEL_STACK_REF(chand->owning_stack, "watch_lb_policy");
172
-
173
- w->chand = chand;
174
- grpc_closure_init(&w->on_changed, on_lb_policy_state_changed, w);
175
- w->state = current_state;
176
- w->lb_policy = lb_policy;
177
- grpc_lb_policy_notify_on_state_change(exec_ctx, lb_policy, &w->state,
178
- &w->on_changed);
179
- }
180
-
181
- static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg,
182
- grpc_error *error) {
183
- channel_data *chand = arg;
184
- grpc_lb_policy *lb_policy = NULL;
185
- grpc_lb_policy *old_lb_policy;
186
- grpc_connectivity_state state = GRPC_CHANNEL_TRANSIENT_FAILURE;
187
- int exit_idle = 0;
188
- grpc_error *state_error = GRPC_ERROR_CREATE("No load balancing policy");
189
-
190
- if (chand->incoming_configuration != NULL) {
191
- lb_policy = grpc_client_config_get_lb_policy(chand->incoming_configuration);
192
- if (lb_policy != NULL) {
193
- GRPC_LB_POLICY_REF(lb_policy, "channel");
194
- GRPC_LB_POLICY_REF(lb_policy, "config_change");
195
- GRPC_ERROR_UNREF(state_error);
196
- state =
197
- grpc_lb_policy_check_connectivity(exec_ctx, lb_policy, &state_error);
198
- }
199
-
200
- grpc_client_config_unref(exec_ctx, chand->incoming_configuration);
201
- }
202
-
203
- chand->incoming_configuration = NULL;
204
-
205
- if (lb_policy != NULL) {
206
- grpc_pollset_set_add_pollset_set(exec_ctx, lb_policy->interested_parties,
207
- chand->interested_parties);
208
- }
209
-
210
- gpr_mu_lock(&chand->mu_config);
211
- old_lb_policy = chand->lb_policy;
212
- chand->lb_policy = lb_policy;
213
- if (lb_policy != NULL) {
214
- grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures,
215
- NULL);
216
- } else if (chand->resolver == NULL /* disconnected */) {
217
- grpc_closure_list_fail_all(
218
- &chand->waiting_for_config_closures,
219
- GRPC_ERROR_CREATE_REFERENCING("Channel disconnected", &error, 1));
220
- grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures,
221
- NULL);
222
- }
223
- if (lb_policy != NULL && chand->exit_idle_when_lb_policy_arrives) {
224
- GRPC_LB_POLICY_REF(lb_policy, "exit_idle");
225
- exit_idle = 1;
226
- chand->exit_idle_when_lb_policy_arrives = 0;
227
- }
228
-
229
- if (error == GRPC_ERROR_NONE && chand->resolver) {
230
- set_channel_connectivity_state_locked(
231
- exec_ctx, chand, state, GRPC_ERROR_REF(state_error), "new_lb+resolver");
232
- if (lb_policy != NULL) {
233
- watch_lb_policy(exec_ctx, chand, lb_policy, state);
234
- }
235
- GRPC_CHANNEL_STACK_REF(chand->owning_stack, "resolver");
236
- grpc_resolver_next(exec_ctx, chand->resolver,
237
- &chand->incoming_configuration,
238
- &chand->on_config_changed);
239
- gpr_mu_unlock(&chand->mu_config);
240
- } else {
241
- if (chand->resolver != NULL) {
242
- grpc_resolver_shutdown(exec_ctx, chand->resolver);
243
- GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel");
244
- chand->resolver = NULL;
245
- }
246
- grpc_error *refs[] = {error, state_error};
247
- set_channel_connectivity_state_locked(
248
- exec_ctx, chand, GRPC_CHANNEL_SHUTDOWN,
249
- GRPC_ERROR_CREATE_REFERENCING("Got config after disconnection", refs,
250
- GPR_ARRAY_SIZE(refs)),
251
- "resolver_gone");
252
- gpr_mu_unlock(&chand->mu_config);
253
- }
254
-
255
- if (exit_idle) {
256
- grpc_lb_policy_exit_idle(exec_ctx, lb_policy);
257
- GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "exit_idle");
258
- }
259
-
260
- if (old_lb_policy != NULL) {
261
- grpc_pollset_set_del_pollset_set(
262
- exec_ctx, old_lb_policy->interested_parties, chand->interested_parties);
263
- GRPC_LB_POLICY_UNREF(exec_ctx, old_lb_policy, "channel");
264
- }
265
-
266
- if (lb_policy != NULL) {
267
- GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "config_change");
268
- }
269
-
270
- GRPC_CHANNEL_STACK_UNREF(exec_ctx, chand->owning_stack, "resolver");
271
- GRPC_ERROR_UNREF(state_error);
272
- }
273
-
274
- static void cc_start_transport_op(grpc_exec_ctx *exec_ctx,
275
- grpc_channel_element *elem,
276
- grpc_transport_op *op) {
277
- channel_data *chand = elem->channel_data;
278
-
279
- grpc_exec_ctx_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE, NULL);
280
-
281
- GPR_ASSERT(op->set_accept_stream == false);
282
- if (op->bind_pollset != NULL) {
283
- grpc_pollset_set_add_pollset(exec_ctx, chand->interested_parties,
284
- op->bind_pollset);
285
- }
286
-
287
- gpr_mu_lock(&chand->mu_config);
288
- if (op->on_connectivity_state_change != NULL) {
289
- grpc_connectivity_state_notify_on_state_change(
290
- exec_ctx, &chand->state_tracker, op->connectivity_state,
291
- op->on_connectivity_state_change);
292
- op->on_connectivity_state_change = NULL;
293
- op->connectivity_state = NULL;
294
- }
295
-
296
- if (op->send_ping != NULL) {
297
- if (chand->lb_policy == NULL) {
298
- grpc_exec_ctx_sched(exec_ctx, op->send_ping,
299
- GRPC_ERROR_CREATE("Ping with no load balancing"),
300
- NULL);
301
- } else {
302
- grpc_lb_policy_ping_one(exec_ctx, chand->lb_policy, op->send_ping);
303
- op->bind_pollset = NULL;
304
- }
305
- op->send_ping = NULL;
306
- }
307
-
308
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
309
- if (chand->resolver != NULL) {
310
- set_channel_connectivity_state_locked(
311
- exec_ctx, chand, GRPC_CHANNEL_SHUTDOWN,
312
- GRPC_ERROR_REF(op->disconnect_with_error), "disconnect");
313
- grpc_resolver_shutdown(exec_ctx, chand->resolver);
314
- GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel");
315
- chand->resolver = NULL;
316
- if (!chand->started_resolving) {
317
- grpc_closure_list_fail_all(&chand->waiting_for_config_closures,
318
- GRPC_ERROR_REF(op->disconnect_with_error));
319
- grpc_exec_ctx_enqueue_list(exec_ctx,
320
- &chand->waiting_for_config_closures, NULL);
321
- }
322
- if (chand->lb_policy != NULL) {
323
- grpc_pollset_set_del_pollset_set(exec_ctx,
324
- chand->lb_policy->interested_parties,
325
- chand->interested_parties);
326
- GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel");
327
- chand->lb_policy = NULL;
328
- }
329
- }
330
- GRPC_ERROR_UNREF(op->disconnect_with_error);
331
- }
332
- gpr_mu_unlock(&chand->mu_config);
333
- }
334
-
335
- typedef struct {
336
- grpc_metadata_batch *initial_metadata;
337
- uint32_t initial_metadata_flags;
338
- grpc_connected_subchannel **connected_subchannel;
339
- grpc_closure *on_ready;
340
- grpc_call_element *elem;
341
- grpc_closure closure;
342
- } continue_picking_args;
343
-
344
- static int cc_pick_subchannel(grpc_exec_ctx *exec_ctx, void *arg,
345
- grpc_metadata_batch *initial_metadata,
346
- uint32_t initial_metadata_flags,
347
- grpc_connected_subchannel **connected_subchannel,
348
- grpc_closure *on_ready);
349
-
350
- static void continue_picking(grpc_exec_ctx *exec_ctx, void *arg,
351
- grpc_error *error) {
352
- continue_picking_args *cpa = arg;
353
- if (cpa->connected_subchannel == NULL) {
354
- /* cancelled, do nothing */
355
- } else if (error != GRPC_ERROR_NONE) {
356
- grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_REF(error), NULL);
357
- } else if (cc_pick_subchannel(exec_ctx, cpa->elem, cpa->initial_metadata,
358
- cpa->initial_metadata_flags,
359
- cpa->connected_subchannel, cpa->on_ready)) {
360
- grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_NONE, NULL);
361
- }
362
- gpr_free(cpa);
363
- }
364
-
365
- static int cc_pick_subchannel(grpc_exec_ctx *exec_ctx, void *elemp,
366
- grpc_metadata_batch *initial_metadata,
367
- uint32_t initial_metadata_flags,
368
- grpc_connected_subchannel **connected_subchannel,
369
- grpc_closure *on_ready) {
370
- GPR_TIMER_BEGIN("cc_pick_subchannel", 0);
371
-
372
- grpc_call_element *elem = elemp;
373
- channel_data *chand = elem->channel_data;
374
- call_data *calld = elem->call_data;
375
- continue_picking_args *cpa;
376
- grpc_closure *closure;
377
-
378
- GPR_ASSERT(connected_subchannel);
379
-
380
- gpr_mu_lock(&chand->mu_config);
381
- if (initial_metadata == NULL) {
382
- if (chand->lb_policy != NULL) {
383
- grpc_lb_policy_cancel_pick(exec_ctx, chand->lb_policy,
384
- connected_subchannel);
385
- }
386
- for (closure = chand->waiting_for_config_closures.head; closure != NULL;
387
- closure = closure->next_data.next) {
388
- cpa = closure->cb_arg;
389
- if (cpa->connected_subchannel == connected_subchannel) {
390
- cpa->connected_subchannel = NULL;
391
- grpc_exec_ctx_sched(exec_ctx, cpa->on_ready,
392
- GRPC_ERROR_CREATE("Pick cancelled"), NULL);
393
- }
394
- }
395
- gpr_mu_unlock(&chand->mu_config);
396
- GPR_TIMER_END("cc_pick_subchannel", 0);
397
- return 1;
398
- }
399
- if (chand->lb_policy != NULL) {
400
- grpc_lb_policy *lb_policy = chand->lb_policy;
401
- int r;
402
- GRPC_LB_POLICY_REF(lb_policy, "cc_pick_subchannel");
403
- gpr_mu_unlock(&chand->mu_config);
404
- r = grpc_lb_policy_pick(exec_ctx, lb_policy, calld->pollent,
405
- initial_metadata, initial_metadata_flags,
406
- connected_subchannel, on_ready);
407
- GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "cc_pick_subchannel");
408
- GPR_TIMER_END("cc_pick_subchannel", 0);
409
- return r;
410
- }
411
- if (chand->resolver != NULL && !chand->started_resolving) {
412
- chand->started_resolving = 1;
413
- GRPC_CHANNEL_STACK_REF(chand->owning_stack, "resolver");
414
- grpc_resolver_next(exec_ctx, chand->resolver,
415
- &chand->incoming_configuration,
416
- &chand->on_config_changed);
417
- }
418
- if (chand->resolver != NULL) {
419
- cpa = gpr_malloc(sizeof(*cpa));
420
- cpa->initial_metadata = initial_metadata;
421
- cpa->initial_metadata_flags = initial_metadata_flags;
422
- cpa->connected_subchannel = connected_subchannel;
423
- cpa->on_ready = on_ready;
424
- cpa->elem = elem;
425
- grpc_closure_init(&cpa->closure, continue_picking, cpa);
426
- grpc_closure_list_append(&chand->waiting_for_config_closures, &cpa->closure,
427
- GRPC_ERROR_NONE);
428
- } else {
429
- grpc_exec_ctx_sched(exec_ctx, on_ready, GRPC_ERROR_CREATE("Disconnected"),
430
- NULL);
431
- }
432
- gpr_mu_unlock(&chand->mu_config);
433
-
434
- GPR_TIMER_END("cc_pick_subchannel", 0);
435
- return 0;
436
- }
437
-
438
- /* Constructor for call_data */
439
- static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
440
- grpc_call_element_args *args) {
441
- grpc_subchannel_call_holder_init(elem->call_data, cc_pick_subchannel, elem,
442
- args->call_stack);
443
- }
444
-
445
- /* Destructor for call_data */
446
- static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
447
- const grpc_call_stats *stats,
448
- void *and_free_memory) {
449
- grpc_subchannel_call_holder_destroy(exec_ctx, elem->call_data);
450
- gpr_free(and_free_memory);
451
- }
452
-
453
- /* Constructor for channel_data */
454
- static void init_channel_elem(grpc_exec_ctx *exec_ctx,
455
- grpc_channel_element *elem,
456
- grpc_channel_element_args *args) {
457
- channel_data *chand = elem->channel_data;
458
-
459
- memset(chand, 0, sizeof(*chand));
460
-
461
- GPR_ASSERT(args->is_last);
462
- GPR_ASSERT(elem->filter == &grpc_client_channel_filter);
463
-
464
- gpr_mu_init(&chand->mu_config);
465
- grpc_closure_init(&chand->on_config_changed, cc_on_config_changed, chand);
466
- chand->owning_stack = args->channel_stack;
467
-
468
- grpc_connectivity_state_init(&chand->state_tracker, GRPC_CHANNEL_IDLE,
469
- "client_channel");
470
- chand->interested_parties = grpc_pollset_set_create();
471
- }
472
-
473
- /* Destructor for channel_data */
474
- static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
475
- grpc_channel_element *elem) {
476
- channel_data *chand = elem->channel_data;
477
-
478
- if (chand->resolver != NULL) {
479
- grpc_resolver_shutdown(exec_ctx, chand->resolver);
480
- GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel");
481
- }
482
- if (chand->lb_policy != NULL) {
483
- grpc_pollset_set_del_pollset_set(exec_ctx,
484
- chand->lb_policy->interested_parties,
485
- chand->interested_parties);
486
- GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel");
487
- }
488
- grpc_connectivity_state_destroy(exec_ctx, &chand->state_tracker);
489
- grpc_pollset_set_destroy(chand->interested_parties);
490
- gpr_mu_destroy(&chand->mu_config);
491
- }
492
-
493
- static void cc_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
494
- grpc_call_element *elem,
495
- grpc_polling_entity *pollent) {
496
- call_data *calld = elem->call_data;
497
- calld->pollent = pollent;
498
- }
499
-
500
- const grpc_channel_filter grpc_client_channel_filter = {
501
- cc_start_transport_stream_op,
502
- cc_start_transport_op,
503
- sizeof(call_data),
504
- init_call_elem,
505
- cc_set_pollset_or_pollset_set,
506
- destroy_call_elem,
507
- sizeof(channel_data),
508
- init_channel_elem,
509
- destroy_channel_elem,
510
- cc_get_peer,
511
- "client-channel",
512
- };
513
-
514
- void grpc_client_channel_set_resolver(grpc_exec_ctx *exec_ctx,
515
- grpc_channel_stack *channel_stack,
516
- grpc_resolver *resolver) {
517
- /* post construction initialization: set the transport setup pointer */
518
- grpc_channel_element *elem = grpc_channel_stack_last_element(channel_stack);
519
- channel_data *chand = elem->channel_data;
520
- gpr_mu_lock(&chand->mu_config);
521
- GPR_ASSERT(!chand->resolver);
522
- chand->resolver = resolver;
523
- GRPC_RESOLVER_REF(resolver, "channel");
524
- if (!grpc_closure_list_empty(chand->waiting_for_config_closures) ||
525
- chand->exit_idle_when_lb_policy_arrives) {
526
- chand->started_resolving = 1;
527
- GRPC_CHANNEL_STACK_REF(chand->owning_stack, "resolver");
528
- grpc_resolver_next(exec_ctx, resolver, &chand->incoming_configuration,
529
- &chand->on_config_changed);
530
- }
531
- gpr_mu_unlock(&chand->mu_config);
532
- }
533
-
534
- grpc_connectivity_state grpc_client_channel_check_connectivity_state(
535
- grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, int try_to_connect) {
536
- channel_data *chand = elem->channel_data;
537
- grpc_connectivity_state out;
538
- gpr_mu_lock(&chand->mu_config);
539
- out = grpc_connectivity_state_check(&chand->state_tracker, NULL);
540
- if (out == GRPC_CHANNEL_IDLE && try_to_connect) {
541
- if (chand->lb_policy != NULL) {
542
- grpc_lb_policy_exit_idle(exec_ctx, chand->lb_policy);
543
- } else {
544
- chand->exit_idle_when_lb_policy_arrives = 1;
545
- if (!chand->started_resolving && chand->resolver != NULL) {
546
- GRPC_CHANNEL_STACK_REF(chand->owning_stack, "resolver");
547
- chand->started_resolving = 1;
548
- grpc_resolver_next(exec_ctx, chand->resolver,
549
- &chand->incoming_configuration,
550
- &chand->on_config_changed);
551
- }
552
- }
553
- }
554
- gpr_mu_unlock(&chand->mu_config);
555
- return out;
556
- }
557
-
558
- typedef struct {
559
- channel_data *chand;
560
- grpc_pollset *pollset;
561
- grpc_closure *on_complete;
562
- grpc_closure my_closure;
563
- } external_connectivity_watcher;
564
-
565
- static void on_external_watch_complete(grpc_exec_ctx *exec_ctx, void *arg,
566
- grpc_error *error) {
567
- external_connectivity_watcher *w = arg;
568
- grpc_closure *follow_up = w->on_complete;
569
- grpc_pollset_set_del_pollset(exec_ctx, w->chand->interested_parties,
570
- w->pollset);
571
- GRPC_CHANNEL_STACK_UNREF(exec_ctx, w->chand->owning_stack,
572
- "external_connectivity_watcher");
573
- gpr_free(w);
574
- follow_up->cb(exec_ctx, follow_up->cb_arg, error);
575
- }
576
-
577
- void grpc_client_channel_watch_connectivity_state(
578
- grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, grpc_pollset *pollset,
579
- grpc_connectivity_state *state, grpc_closure *on_complete) {
580
- channel_data *chand = elem->channel_data;
581
- external_connectivity_watcher *w = gpr_malloc(sizeof(*w));
582
- w->chand = chand;
583
- w->pollset = pollset;
584
- w->on_complete = on_complete;
585
- grpc_pollset_set_add_pollset(exec_ctx, chand->interested_parties, pollset);
586
- grpc_closure_init(&w->my_closure, on_external_watch_complete, w);
587
- GRPC_CHANNEL_STACK_REF(w->chand->owning_stack,
588
- "external_connectivity_watcher");
589
- gpr_mu_lock(&chand->mu_config);
590
- grpc_connectivity_state_notify_on_state_change(
591
- exec_ctx, &chand->state_tracker, state, &w->my_closure);
592
- gpr_mu_unlock(&chand->mu_config);
593
- }