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,23 @@
31
31
  *
32
32
  */
33
33
 
34
- #include "src/core/lib/security/transport/secure_endpoint.h"
34
+ /* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when
35
+ using that endpoint. Because of various transitive includes in uv.h,
36
+ including windows.h on Windows, uv.h must be included before other system
37
+ headers. Therefore, sockaddr.h must always be included first */
38
+ #include "src/core/lib/iomgr/sockaddr.h"
39
+
40
+ #include <grpc/slice.h>
41
+ #include <grpc/slice_buffer.h>
35
42
  #include <grpc/support/alloc.h>
36
43
  #include <grpc/support/log.h>
37
- #include <grpc/support/slice.h>
38
- #include <grpc/support/slice_buffer.h>
39
44
  #include <grpc/support/sync.h>
40
45
  #include "src/core/lib/debug/trace.h"
46
+ #include "src/core/lib/profiling/timers.h"
47
+ #include "src/core/lib/security/transport/secure_endpoint.h"
41
48
  #include "src/core/lib/security/transport/tsi_error.h"
49
+ #include "src/core/lib/slice/slice_internal.h"
50
+ #include "src/core/lib/slice/slice_string_helpers.h"
42
51
  #include "src/core/lib/support/string.h"
43
52
  #include "src/core/lib/tsi/transport_security_interface.h"
44
53
 
@@ -53,15 +62,15 @@ typedef struct {
53
62
  grpc_closure *read_cb;
54
63
  grpc_closure *write_cb;
55
64
  grpc_closure on_read;
56
- gpr_slice_buffer *read_buffer;
57
- gpr_slice_buffer source_buffer;
65
+ grpc_slice_buffer *read_buffer;
66
+ grpc_slice_buffer source_buffer;
58
67
  /* saved handshaker leftover data to unprotect. */
59
- gpr_slice_buffer leftover_bytes;
68
+ grpc_slice_buffer leftover_bytes;
60
69
  /* buffers for read and write */
61
- gpr_slice read_staging_buffer;
70
+ grpc_slice read_staging_buffer;
62
71
 
63
- gpr_slice write_staging_buffer;
64
- gpr_slice_buffer output_buffer;
72
+ grpc_slice write_staging_buffer;
73
+ grpc_slice_buffer output_buffer;
65
74
 
66
75
  gpr_refcount ref;
67
76
  } secure_endpoint;
@@ -72,11 +81,11 @@ static void destroy(grpc_exec_ctx *exec_ctx, secure_endpoint *secure_ep) {
72
81
  secure_endpoint *ep = secure_ep;
73
82
  grpc_endpoint_destroy(exec_ctx, ep->wrapped_ep);
74
83
  tsi_frame_protector_destroy(ep->protector);
75
- gpr_slice_buffer_destroy(&ep->leftover_bytes);
76
- gpr_slice_unref(ep->read_staging_buffer);
77
- gpr_slice_unref(ep->write_staging_buffer);
78
- gpr_slice_buffer_destroy(&ep->output_buffer);
79
- gpr_slice_buffer_destroy(&ep->source_buffer);
84
+ grpc_slice_buffer_destroy_internal(exec_ctx, &ep->leftover_bytes);
85
+ grpc_slice_unref_internal(exec_ctx, ep->read_staging_buffer);
86
+ grpc_slice_unref_internal(exec_ctx, ep->write_staging_buffer);
87
+ grpc_slice_buffer_destroy_internal(exec_ctx, &ep->output_buffer);
88
+ grpc_slice_buffer_destroy_internal(exec_ctx, &ep->source_buffer);
80
89
  gpr_mu_destroy(&ep->protector_mu);
81
90
  gpr_free(ep);
82
91
  }
@@ -120,25 +129,25 @@ static void secure_endpoint_ref(secure_endpoint *ep) { gpr_ref(&ep->ref); }
120
129
 
121
130
  static void flush_read_staging_buffer(secure_endpoint *ep, uint8_t **cur,
122
131
  uint8_t **end) {
123
- gpr_slice_buffer_add(ep->read_buffer, ep->read_staging_buffer);
124
- ep->read_staging_buffer = gpr_slice_malloc(STAGING_BUFFER_SIZE);
125
- *cur = GPR_SLICE_START_PTR(ep->read_staging_buffer);
126
- *end = GPR_SLICE_END_PTR(ep->read_staging_buffer);
132
+ grpc_slice_buffer_add(ep->read_buffer, ep->read_staging_buffer);
133
+ ep->read_staging_buffer = grpc_slice_malloc(STAGING_BUFFER_SIZE);
134
+ *cur = GRPC_SLICE_START_PTR(ep->read_staging_buffer);
135
+ *end = GRPC_SLICE_END_PTR(ep->read_staging_buffer);
127
136
  }
128
137
 
129
138
  static void call_read_cb(grpc_exec_ctx *exec_ctx, secure_endpoint *ep,
130
139
  grpc_error *error) {
131
- if (false && grpc_trace_secure_endpoint) {
140
+ if (grpc_trace_secure_endpoint) {
132
141
  size_t i;
133
142
  for (i = 0; i < ep->read_buffer->count; i++) {
134
- char *data = gpr_dump_slice(ep->read_buffer->slices[i],
135
- GPR_DUMP_HEX | GPR_DUMP_ASCII);
143
+ char *data = grpc_dump_slice(ep->read_buffer->slices[i],
144
+ GPR_DUMP_HEX | GPR_DUMP_ASCII);
136
145
  gpr_log(GPR_DEBUG, "READ %p: %s", ep, data);
137
146
  gpr_free(data);
138
147
  }
139
148
  }
140
149
  ep->read_buffer = NULL;
141
- grpc_exec_ctx_sched(exec_ctx, ep->read_cb, error, NULL);
150
+ grpc_closure_sched(exec_ctx, ep->read_cb, error);
142
151
  SECURE_ENDPOINT_UNREF(exec_ctx, ep, "read");
143
152
  }
144
153
 
@@ -148,11 +157,11 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data,
148
157
  uint8_t keep_looping = 0;
149
158
  tsi_result result = TSI_OK;
150
159
  secure_endpoint *ep = (secure_endpoint *)user_data;
151
- uint8_t *cur = GPR_SLICE_START_PTR(ep->read_staging_buffer);
152
- uint8_t *end = GPR_SLICE_END_PTR(ep->read_staging_buffer);
160
+ uint8_t *cur = GRPC_SLICE_START_PTR(ep->read_staging_buffer);
161
+ uint8_t *end = GRPC_SLICE_END_PTR(ep->read_staging_buffer);
153
162
 
154
163
  if (error != GRPC_ERROR_NONE) {
155
- gpr_slice_buffer_reset_and_unref(ep->read_buffer);
164
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, ep->read_buffer);
156
165
  call_read_cb(exec_ctx, ep, GRPC_ERROR_CREATE_REFERENCING(
157
166
  "Secure read failed", &error, 1));
158
167
  return;
@@ -160,9 +169,9 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data,
160
169
 
161
170
  /* TODO(yangg) check error, maybe bail out early */
162
171
  for (i = 0; i < ep->source_buffer.count; i++) {
163
- gpr_slice encrypted = ep->source_buffer.slices[i];
164
- uint8_t *message_bytes = GPR_SLICE_START_PTR(encrypted);
165
- size_t message_size = GPR_SLICE_LENGTH(encrypted);
172
+ grpc_slice encrypted = ep->source_buffer.slices[i];
173
+ uint8_t *message_bytes = GRPC_SLICE_START_PTR(encrypted);
174
+ size_t message_size = GRPC_SLICE_LENGTH(encrypted);
166
175
 
167
176
  while (message_size > 0 || keep_looping) {
168
177
  size_t unprotected_buffer_size_written = (size_t)(end - cur);
@@ -197,20 +206,20 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data,
197
206
  if (result != TSI_OK) break;
198
207
  }
199
208
 
200
- if (cur != GPR_SLICE_START_PTR(ep->read_staging_buffer)) {
201
- gpr_slice_buffer_add(
209
+ if (cur != GRPC_SLICE_START_PTR(ep->read_staging_buffer)) {
210
+ grpc_slice_buffer_add(
202
211
  ep->read_buffer,
203
- gpr_slice_split_head(
212
+ grpc_slice_split_head(
204
213
  &ep->read_staging_buffer,
205
- (size_t)(cur - GPR_SLICE_START_PTR(ep->read_staging_buffer))));
214
+ (size_t)(cur - GRPC_SLICE_START_PTR(ep->read_staging_buffer))));
206
215
  }
207
216
 
208
217
  /* TODO(yangg) experiment with moving this block after read_cb to see if it
209
218
  helps latency */
210
- gpr_slice_buffer_reset_and_unref(&ep->source_buffer);
219
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, &ep->source_buffer);
211
220
 
212
221
  if (result != TSI_OK) {
213
- gpr_slice_buffer_reset_and_unref(ep->read_buffer);
222
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, ep->read_buffer);
214
223
  call_read_cb(exec_ctx, ep, grpc_set_tsi_error_result(
215
224
  GRPC_ERROR_CREATE("Unwrap failed"), result));
216
225
  return;
@@ -220,15 +229,15 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data,
220
229
  }
221
230
 
222
231
  static void endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep,
223
- gpr_slice_buffer *slices, grpc_closure *cb) {
232
+ grpc_slice_buffer *slices, grpc_closure *cb) {
224
233
  secure_endpoint *ep = (secure_endpoint *)secure_ep;
225
234
  ep->read_cb = cb;
226
235
  ep->read_buffer = slices;
227
- gpr_slice_buffer_reset_and_unref(ep->read_buffer);
236
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, ep->read_buffer);
228
237
 
229
238
  SECURE_ENDPOINT_REF(ep, "read");
230
239
  if (ep->leftover_bytes.count) {
231
- gpr_slice_buffer_swap(&ep->leftover_bytes, &ep->source_buffer);
240
+ grpc_slice_buffer_swap(&ep->leftover_bytes, &ep->source_buffer);
232
241
  GPR_ASSERT(ep->leftover_bytes.count == 0);
233
242
  on_read(exec_ctx, ep, GRPC_ERROR_NONE);
234
243
  return;
@@ -240,35 +249,37 @@ static void endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep,
240
249
 
241
250
  static void flush_write_staging_buffer(secure_endpoint *ep, uint8_t **cur,
242
251
  uint8_t **end) {
243
- gpr_slice_buffer_add(&ep->output_buffer, ep->write_staging_buffer);
244
- ep->write_staging_buffer = gpr_slice_malloc(STAGING_BUFFER_SIZE);
245
- *cur = GPR_SLICE_START_PTR(ep->write_staging_buffer);
246
- *end = GPR_SLICE_END_PTR(ep->write_staging_buffer);
252
+ grpc_slice_buffer_add(&ep->output_buffer, ep->write_staging_buffer);
253
+ ep->write_staging_buffer = grpc_slice_malloc(STAGING_BUFFER_SIZE);
254
+ *cur = GRPC_SLICE_START_PTR(ep->write_staging_buffer);
255
+ *end = GRPC_SLICE_END_PTR(ep->write_staging_buffer);
247
256
  }
248
257
 
249
258
  static void endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep,
250
- gpr_slice_buffer *slices, grpc_closure *cb) {
259
+ grpc_slice_buffer *slices, grpc_closure *cb) {
260
+ GPR_TIMER_BEGIN("secure_endpoint.endpoint_write", 0);
261
+
251
262
  unsigned i;
252
263
  tsi_result result = TSI_OK;
253
264
  secure_endpoint *ep = (secure_endpoint *)secure_ep;
254
- uint8_t *cur = GPR_SLICE_START_PTR(ep->write_staging_buffer);
255
- uint8_t *end = GPR_SLICE_END_PTR(ep->write_staging_buffer);
265
+ uint8_t *cur = GRPC_SLICE_START_PTR(ep->write_staging_buffer);
266
+ uint8_t *end = GRPC_SLICE_END_PTR(ep->write_staging_buffer);
256
267
 
257
- gpr_slice_buffer_reset_and_unref(&ep->output_buffer);
268
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, &ep->output_buffer);
258
269
 
259
- if (false && grpc_trace_secure_endpoint) {
270
+ if (grpc_trace_secure_endpoint) {
260
271
  for (i = 0; i < slices->count; i++) {
261
272
  char *data =
262
- gpr_dump_slice(slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
273
+ grpc_dump_slice(slices->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
263
274
  gpr_log(GPR_DEBUG, "WRITE %p: %s", ep, data);
264
275
  gpr_free(data);
265
276
  }
266
277
  }
267
278
 
268
279
  for (i = 0; i < slices->count; i++) {
269
- gpr_slice plain = slices->slices[i];
270
- uint8_t *message_bytes = GPR_SLICE_START_PTR(plain);
271
- size_t message_size = GPR_SLICE_LENGTH(plain);
280
+ grpc_slice plain = slices->slices[i];
281
+ uint8_t *message_bytes = GRPC_SLICE_START_PTR(plain);
282
+ size_t message_size = GRPC_SLICE_LENGTH(plain);
272
283
  while (message_size > 0) {
273
284
  size_t protected_buffer_size_to_send = (size_t)(end - cur);
274
285
  size_t processed_message_size = message_size;
@@ -307,26 +318,27 @@ static void endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep,
307
318
  flush_write_staging_buffer(ep, &cur, &end);
308
319
  }
309
320
  } while (still_pending_size > 0);
310
- if (cur != GPR_SLICE_START_PTR(ep->write_staging_buffer)) {
311
- gpr_slice_buffer_add(
321
+ if (cur != GRPC_SLICE_START_PTR(ep->write_staging_buffer)) {
322
+ grpc_slice_buffer_add(
312
323
  &ep->output_buffer,
313
- gpr_slice_split_head(
324
+ grpc_slice_split_head(
314
325
  &ep->write_staging_buffer,
315
- (size_t)(cur - GPR_SLICE_START_PTR(ep->write_staging_buffer))));
326
+ (size_t)(cur - GRPC_SLICE_START_PTR(ep->write_staging_buffer))));
316
327
  }
317
328
  }
318
329
 
319
330
  if (result != TSI_OK) {
320
331
  /* TODO(yangg) do different things according to the error type? */
321
- gpr_slice_buffer_reset_and_unref(&ep->output_buffer);
322
- grpc_exec_ctx_sched(
332
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, &ep->output_buffer);
333
+ grpc_closure_sched(
323
334
  exec_ctx, cb,
324
- grpc_set_tsi_error_result(GRPC_ERROR_CREATE("Wrap failed"), result),
325
- NULL);
335
+ grpc_set_tsi_error_result(GRPC_ERROR_CREATE("Wrap failed"), result));
336
+ GPR_TIMER_END("secure_endpoint.endpoint_write", 0);
326
337
  return;
327
338
  }
328
339
 
329
340
  grpc_endpoint_write(exec_ctx, ep->wrapped_ep, &ep->output_buffer, cb);
341
+ GPR_TIMER_END("secure_endpoint.endpoint_write", 0);
330
342
  }
331
343
 
332
344
  static void endpoint_shutdown(grpc_exec_ctx *exec_ctx,
@@ -360,11 +372,22 @@ static char *endpoint_get_peer(grpc_endpoint *secure_ep) {
360
372
  return grpc_endpoint_get_peer(ep->wrapped_ep);
361
373
  }
362
374
 
375
+ static int endpoint_get_fd(grpc_endpoint *secure_ep) {
376
+ secure_endpoint *ep = (secure_endpoint *)secure_ep;
377
+ return grpc_endpoint_get_fd(ep->wrapped_ep);
378
+ }
379
+
363
380
  static grpc_workqueue *endpoint_get_workqueue(grpc_endpoint *secure_ep) {
364
381
  secure_endpoint *ep = (secure_endpoint *)secure_ep;
365
382
  return grpc_endpoint_get_workqueue(ep->wrapped_ep);
366
383
  }
367
384
 
385
+ static grpc_resource_user *endpoint_get_resource_user(
386
+ grpc_endpoint *secure_ep) {
387
+ secure_endpoint *ep = (secure_endpoint *)secure_ep;
388
+ return grpc_endpoint_get_resource_user(ep->wrapped_ep);
389
+ }
390
+
368
391
  static const grpc_endpoint_vtable vtable = {endpoint_read,
369
392
  endpoint_write,
370
393
  endpoint_get_workqueue,
@@ -372,27 +395,29 @@ static const grpc_endpoint_vtable vtable = {endpoint_read,
372
395
  endpoint_add_to_pollset_set,
373
396
  endpoint_shutdown,
374
397
  endpoint_destroy,
375
- endpoint_get_peer};
398
+ endpoint_get_resource_user,
399
+ endpoint_get_peer,
400
+ endpoint_get_fd};
376
401
 
377
402
  grpc_endpoint *grpc_secure_endpoint_create(
378
403
  struct tsi_frame_protector *protector, grpc_endpoint *transport,
379
- gpr_slice *leftover_slices, size_t leftover_nslices) {
404
+ grpc_slice *leftover_slices, size_t leftover_nslices) {
380
405
  size_t i;
381
406
  secure_endpoint *ep = (secure_endpoint *)gpr_malloc(sizeof(secure_endpoint));
382
407
  ep->base.vtable = &vtable;
383
408
  ep->wrapped_ep = transport;
384
409
  ep->protector = protector;
385
- gpr_slice_buffer_init(&ep->leftover_bytes);
410
+ grpc_slice_buffer_init(&ep->leftover_bytes);
386
411
  for (i = 0; i < leftover_nslices; i++) {
387
- gpr_slice_buffer_add(&ep->leftover_bytes,
388
- gpr_slice_ref(leftover_slices[i]));
412
+ grpc_slice_buffer_add(&ep->leftover_bytes,
413
+ grpc_slice_ref_internal(leftover_slices[i]));
389
414
  }
390
- ep->write_staging_buffer = gpr_slice_malloc(STAGING_BUFFER_SIZE);
391
- ep->read_staging_buffer = gpr_slice_malloc(STAGING_BUFFER_SIZE);
392
- gpr_slice_buffer_init(&ep->output_buffer);
393
- gpr_slice_buffer_init(&ep->source_buffer);
415
+ ep->write_staging_buffer = grpc_slice_malloc(STAGING_BUFFER_SIZE);
416
+ ep->read_staging_buffer = grpc_slice_malloc(STAGING_BUFFER_SIZE);
417
+ grpc_slice_buffer_init(&ep->output_buffer);
418
+ grpc_slice_buffer_init(&ep->source_buffer);
394
419
  ep->read_buffer = NULL;
395
- grpc_closure_init(&ep->on_read, on_read, ep);
420
+ grpc_closure_init(&ep->on_read, on_read, ep, grpc_schedule_on_exec_ctx);
396
421
  gpr_mu_init(&ep->protector_mu);
397
422
  gpr_ref_init(&ep->ref, 1);
398
423
  return &ep->base;
@@ -34,7 +34,7 @@
34
34
  #ifndef GRPC_CORE_LIB_SECURITY_TRANSPORT_SECURE_ENDPOINT_H
35
35
  #define GRPC_CORE_LIB_SECURITY_TRANSPORT_SECURE_ENDPOINT_H
36
36
 
37
- #include <grpc/support/slice.h>
37
+ #include <grpc/slice.h>
38
38
  #include "src/core/lib/iomgr/endpoint.h"
39
39
 
40
40
  struct tsi_frame_protector;
@@ -44,6 +44,6 @@ extern int grpc_trace_secure_endpoint;
44
44
  /* Takes ownership of protector and to_wrap, and refs leftover_slices. */
45
45
  grpc_endpoint *grpc_secure_endpoint_create(
46
46
  struct tsi_frame_protector *protector, grpc_endpoint *to_wrap,
47
- gpr_slice *leftover_slices, size_t leftover_nslices);
47
+ grpc_slice *leftover_slices, size_t leftover_nslices);
48
48
 
49
49
  #endif /* GRPC_CORE_LIB_SECURITY_TRANSPORT_SECURE_ENDPOINT_H */
@@ -36,18 +36,19 @@
36
36
  #include <stdbool.h>
37
37
  #include <string.h>
38
38
 
39
+ #include <grpc/slice_buffer.h>
39
40
  #include <grpc/support/alloc.h>
40
41
  #include <grpc/support/host_port.h>
41
42
  #include <grpc/support/log.h>
42
- #include <grpc/support/slice_buffer.h>
43
43
  #include <grpc/support/string_util.h>
44
44
 
45
45
  #include "src/core/ext/transport/chttp2/alpn/alpn.h"
46
+ #include "src/core/lib/channel/handshaker.h"
46
47
  #include "src/core/lib/iomgr/load_file.h"
47
48
  #include "src/core/lib/security/context/security_context.h"
48
49
  #include "src/core/lib/security/credentials/credentials.h"
49
- #include "src/core/lib/security/transport/handshake.h"
50
50
  #include "src/core/lib/security/transport/secure_endpoint.h"
51
+ #include "src/core/lib/security/transport/security_handshaker.h"
51
52
  #include "src/core/lib/support/env.h"
52
53
  #include "src/core/lib/support/string.h"
53
54
  #include "src/core/lib/tsi/fake_transport_security.h"
@@ -111,54 +112,34 @@ const tsi_peer_property *tsi_peer_get_property_by_name(const tsi_peer *peer,
111
112
  return NULL;
112
113
  }
113
114
 
114
- void grpc_server_security_connector_shutdown(
115
- grpc_exec_ctx *exec_ctx, grpc_server_security_connector *connector) {
116
- grpc_security_connector_handshake_list *tmp;
117
- gpr_mu_lock(&connector->mu);
118
- while (connector->handshaking_handshakes) {
119
- tmp = connector->handshaking_handshakes;
120
- grpc_security_handshake_shutdown(
121
- exec_ctx, connector->handshaking_handshakes->handshake);
122
- connector->handshaking_handshakes = tmp->next;
123
- gpr_free(tmp);
115
+ void grpc_channel_security_connector_add_handshakers(
116
+ grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *connector,
117
+ grpc_handshake_manager *handshake_mgr) {
118
+ if (connector != NULL) {
119
+ connector->add_handshakers(exec_ctx, connector, handshake_mgr);
124
120
  }
125
- gpr_mu_unlock(&connector->mu);
126
121
  }
127
122
 
128
- void grpc_channel_security_connector_do_handshake(
129
- grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc,
130
- grpc_endpoint *nonsecure_endpoint, gpr_timespec deadline,
131
- grpc_security_handshake_done_cb cb, void *user_data) {
132
- if (sc == NULL || nonsecure_endpoint == NULL) {
133
- cb(exec_ctx, user_data, GRPC_SECURITY_ERROR, NULL, NULL);
134
- } else {
135
- sc->do_handshake(exec_ctx, sc, nonsecure_endpoint, deadline, cb, user_data);
136
- }
137
- }
138
-
139
- void grpc_server_security_connector_do_handshake(
140
- grpc_exec_ctx *exec_ctx, grpc_server_security_connector *sc,
141
- grpc_tcp_server_acceptor *acceptor, grpc_endpoint *nonsecure_endpoint,
142
- gpr_timespec deadline, grpc_security_handshake_done_cb cb,
143
- void *user_data) {
144
- if (sc == NULL || nonsecure_endpoint == NULL) {
145
- cb(exec_ctx, user_data, GRPC_SECURITY_ERROR, NULL, NULL);
146
- } else {
147
- sc->do_handshake(exec_ctx, sc, acceptor, nonsecure_endpoint, deadline, cb,
148
- user_data);
123
+ void grpc_server_security_connector_add_handshakers(
124
+ grpc_exec_ctx *exec_ctx, grpc_server_security_connector *connector,
125
+ grpc_handshake_manager *handshake_mgr) {
126
+ if (connector != NULL) {
127
+ connector->add_handshakers(exec_ctx, connector, handshake_mgr);
149
128
  }
150
129
  }
151
130
 
152
131
  void grpc_security_connector_check_peer(grpc_exec_ctx *exec_ctx,
153
132
  grpc_security_connector *sc,
154
133
  tsi_peer peer,
155
- grpc_security_peer_check_cb cb,
156
- void *user_data) {
134
+ grpc_auth_context **auth_context,
135
+ grpc_closure *on_peer_checked) {
157
136
  if (sc == NULL) {
158
- cb(exec_ctx, user_data, GRPC_SECURITY_ERROR, NULL);
137
+ grpc_closure_sched(
138
+ exec_ctx, on_peer_checked,
139
+ GRPC_ERROR_CREATE("cannot check peer -- no security connector"));
159
140
  tsi_peer_destruct(&peer);
160
141
  } else {
161
- sc->vtable->check_peer(exec_ctx, sc, peer, cb, user_data);
142
+ sc->vtable->check_peer(exec_ctx, sc, peer, auth_context, on_peer_checked);
162
143
  }
163
144
  }
164
145
 
@@ -191,7 +172,8 @@ grpc_security_connector *grpc_security_connector_ref(
191
172
  }
192
173
 
193
174
  #ifdef GRPC_SECURITY_CONNECTOR_REFCOUNT_DEBUG
194
- void grpc_security_connector_unref(grpc_security_connector *sc,
175
+ void grpc_security_connector_unref(grpc_exec_ctx *exec_ctx,
176
+ grpc_security_connector *sc,
195
177
  const char *file, int line,
196
178
  const char *reason) {
197
179
  if (sc == NULL) return;
@@ -199,18 +181,19 @@ void grpc_security_connector_unref(grpc_security_connector *sc,
199
181
  "SECURITY_CONNECTOR:%p unref %d -> %d %s", sc,
200
182
  (int)sc->refcount.count, (int)sc->refcount.count - 1, reason);
201
183
  #else
202
- void grpc_security_connector_unref(grpc_security_connector *sc) {
184
+ void grpc_security_connector_unref(grpc_exec_ctx *exec_ctx,
185
+ grpc_security_connector *sc) {
203
186
  if (sc == NULL) return;
204
187
  #endif
205
- if (gpr_unref(&sc->refcount)) sc->vtable->destroy(sc);
188
+ if (gpr_unref(&sc->refcount)) sc->vtable->destroy(exec_ctx, sc);
206
189
  }
207
190
 
208
- static void connector_pointer_arg_destroy(void *p) {
209
- GRPC_SECURITY_CONNECTOR_UNREF(p, "connector_pointer_arg");
191
+ static void connector_pointer_arg_destroy(grpc_exec_ctx *exec_ctx, void *p) {
192
+ GRPC_SECURITY_CONNECTOR_UNREF(exec_ctx, p, "connector_pointer_arg_destroy");
210
193
  }
211
194
 
212
195
  static void *connector_pointer_arg_copy(void *p) {
213
- return GRPC_SECURITY_CONNECTOR_REF(p, "connector_pointer_arg");
196
+ return GRPC_SECURITY_CONNECTOR_REF(p, "connector_pointer_arg_copy");
214
197
  }
215
198
 
216
199
  static int connector_pointer_cmp(void *a, void *b) { return GPR_ICMP(a, b); }
@@ -252,51 +235,51 @@ grpc_security_connector *grpc_find_security_connector_in_args(
252
235
 
253
236
  /* -- Fake implementation. -- */
254
237
 
255
- static void fake_channel_destroy(grpc_security_connector *sc) {
238
+ static void fake_channel_destroy(grpc_exec_ctx *exec_ctx,
239
+ grpc_security_connector *sc) {
256
240
  grpc_channel_security_connector *c = (grpc_channel_security_connector *)sc;
257
- grpc_call_credentials_unref(c->request_metadata_creds);
241
+ grpc_call_credentials_unref(exec_ctx, c->request_metadata_creds);
258
242
  gpr_free(sc);
259
243
  }
260
244
 
261
- static void fake_server_destroy(grpc_security_connector *sc) {
262
- grpc_server_security_connector *c = (grpc_server_security_connector *)sc;
263
- gpr_mu_destroy(&c->mu);
245
+ static void fake_server_destroy(grpc_exec_ctx *exec_ctx,
246
+ grpc_security_connector *sc) {
264
247
  gpr_free(sc);
265
248
  }
266
249
 
267
250
  static void fake_check_peer(grpc_exec_ctx *exec_ctx,
268
251
  grpc_security_connector *sc, tsi_peer peer,
269
- grpc_security_peer_check_cb cb, void *user_data) {
252
+ grpc_auth_context **auth_context,
253
+ grpc_closure *on_peer_checked) {
270
254
  const char *prop_name;
271
- grpc_security_status status = GRPC_SECURITY_OK;
272
- grpc_auth_context *auth_context = NULL;
255
+ grpc_error *error = GRPC_ERROR_NONE;
256
+ *auth_context = NULL;
273
257
  if (peer.property_count != 1) {
274
- gpr_log(GPR_ERROR, "Fake peers should only have 1 property.");
275
- status = GRPC_SECURITY_ERROR;
258
+ error = GRPC_ERROR_CREATE("Fake peers should only have 1 property.");
276
259
  goto end;
277
260
  }
278
261
  prop_name = peer.properties[0].name;
279
262
  if (prop_name == NULL ||
280
263
  strcmp(prop_name, TSI_CERTIFICATE_TYPE_PEER_PROPERTY)) {
281
- gpr_log(GPR_ERROR, "Unexpected property in fake peer: %s.",
282
- prop_name == NULL ? "<EMPTY>" : prop_name);
283
- status = GRPC_SECURITY_ERROR;
264
+ char *msg;
265
+ gpr_asprintf(&msg, "Unexpected property in fake peer: %s.",
266
+ prop_name == NULL ? "<EMPTY>" : prop_name);
267
+ error = GRPC_ERROR_CREATE(msg);
268
+ gpr_free(msg);
284
269
  goto end;
285
270
  }
286
271
  if (strncmp(peer.properties[0].value.data, TSI_FAKE_CERTIFICATE_TYPE,
287
272
  peer.properties[0].value.length)) {
288
- gpr_log(GPR_ERROR, "Invalid value for cert type property.");
289
- status = GRPC_SECURITY_ERROR;
273
+ error = GRPC_ERROR_CREATE("Invalid value for cert type property.");
290
274
  goto end;
291
275
  }
292
- auth_context = grpc_auth_context_create(NULL);
276
+ *auth_context = grpc_auth_context_create(NULL);
293
277
  grpc_auth_context_add_cstring_property(
294
- auth_context, GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
278
+ *auth_context, GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
295
279
  GRPC_FAKE_TRANSPORT_SECURITY_TYPE);
296
280
 
297
281
  end:
298
- cb(exec_ctx, user_data, status, auth_context);
299
- grpc_auth_context_unref(auth_context);
282
+ grpc_closure_sched(exec_ctx, on_peer_checked, error);
300
283
  tsi_peer_destruct(&peer);
301
284
  }
302
285
 
@@ -309,26 +292,24 @@ static void fake_channel_check_call_host(grpc_exec_ctx *exec_ctx,
309
292
  cb(exec_ctx, user_data, GRPC_SECURITY_OK);
310
293
  }
311
294
 
312
- static void fake_channel_do_handshake(grpc_exec_ctx *exec_ctx,
313
- grpc_channel_security_connector *sc,
314
- grpc_endpoint *nonsecure_endpoint,
315
- gpr_timespec deadline,
316
- grpc_security_handshake_done_cb cb,
317
- void *user_data) {
318
- grpc_do_security_handshake(exec_ctx, tsi_create_fake_handshaker(1), &sc->base,
319
- true, nonsecure_endpoint, deadline, cb, user_data);
295
+ static void fake_channel_add_handshakers(
296
+ grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc,
297
+ grpc_handshake_manager *handshake_mgr) {
298
+ grpc_handshake_manager_add(
299
+ handshake_mgr,
300
+ grpc_security_handshaker_create(
301
+ exec_ctx, tsi_create_fake_handshaker(true /* is_client */),
302
+ &sc->base));
320
303
  }
321
304
 
322
- static void fake_server_do_handshake(grpc_exec_ctx *exec_ctx,
323
- grpc_server_security_connector *sc,
324
- grpc_tcp_server_acceptor *acceptor,
325
- grpc_endpoint *nonsecure_endpoint,
326
- gpr_timespec deadline,
327
- grpc_security_handshake_done_cb cb,
328
- void *user_data) {
329
- grpc_do_security_handshake(exec_ctx, tsi_create_fake_handshaker(0), &sc->base,
330
- false, nonsecure_endpoint, deadline, cb,
331
- user_data);
305
+ static void fake_server_add_handshakers(grpc_exec_ctx *exec_ctx,
306
+ grpc_server_security_connector *sc,
307
+ grpc_handshake_manager *handshake_mgr) {
308
+ grpc_handshake_manager_add(
309
+ handshake_mgr,
310
+ grpc_security_handshaker_create(
311
+ exec_ctx, tsi_create_fake_handshaker(false /* is_client */),
312
+ &sc->base));
332
313
  }
333
314
 
334
315
  static grpc_security_connector_vtable fake_channel_vtable = {
@@ -346,7 +327,7 @@ grpc_channel_security_connector *grpc_fake_channel_security_connector_create(
346
327
  c->base.vtable = &fake_channel_vtable;
347
328
  c->request_metadata_creds = grpc_call_credentials_ref(request_metadata_creds);
348
329
  c->check_call_host = fake_channel_check_call_host;
349
- c->do_handshake = fake_channel_do_handshake;
330
+ c->add_handshakers = fake_channel_add_handshakers;
350
331
  return c;
351
332
  }
352
333
 
@@ -358,8 +339,7 @@ grpc_server_security_connector *grpc_fake_server_security_connector_create(
358
339
  gpr_ref_init(&c->base.refcount, 1);
359
340
  c->base.vtable = &fake_server_vtable;
360
341
  c->base.url_scheme = GRPC_FAKE_SECURITY_URL_SCHEME;
361
- c->do_handshake = fake_server_do_handshake;
362
- gpr_mu_init(&c->mu);
342
+ c->add_handshakers = fake_server_add_handshakers;
363
343
  return c;
364
344
  }
365
345
 
@@ -377,10 +357,11 @@ typedef struct {
377
357
  tsi_ssl_handshaker_factory *handshaker_factory;
378
358
  } grpc_ssl_server_security_connector;
379
359
 
380
- static void ssl_channel_destroy(grpc_security_connector *sc) {
360
+ static void ssl_channel_destroy(grpc_exec_ctx *exec_ctx,
361
+ grpc_security_connector *sc) {
381
362
  grpc_ssl_channel_security_connector *c =
382
363
  (grpc_ssl_channel_security_connector *)sc;
383
- grpc_call_credentials_unref(c->base.request_metadata_creds);
364
+ grpc_call_credentials_unref(exec_ctx, c->base.request_metadata_creds);
384
365
  if (c->handshaker_factory != NULL) {
385
366
  tsi_ssl_handshaker_factory_destroy(c->handshaker_factory);
386
367
  }
@@ -389,14 +370,13 @@ static void ssl_channel_destroy(grpc_security_connector *sc) {
389
370
  gpr_free(sc);
390
371
  }
391
372
 
392
- static void ssl_server_destroy(grpc_security_connector *sc) {
373
+ static void ssl_server_destroy(grpc_exec_ctx *exec_ctx,
374
+ grpc_security_connector *sc) {
393
375
  grpc_ssl_server_security_connector *c =
394
376
  (grpc_ssl_server_security_connector *)sc;
395
-
396
377
  if (c->handshaker_factory != NULL) {
397
378
  tsi_ssl_handshaker_factory_destroy(c->handshaker_factory);
398
379
  }
399
- gpr_mu_destroy(&c->base.mu);
400
380
  gpr_free(sc);
401
381
  }
402
382
 
@@ -415,46 +395,35 @@ static grpc_security_status ssl_create_handshaker(
415
395
  return GRPC_SECURITY_OK;
416
396
  }
417
397
 
418
- static void ssl_channel_do_handshake(grpc_exec_ctx *exec_ctx,
419
- grpc_channel_security_connector *sc,
420
- grpc_endpoint *nonsecure_endpoint,
421
- gpr_timespec deadline,
422
- grpc_security_handshake_done_cb cb,
423
- void *user_data) {
398
+ static void ssl_channel_add_handshakers(grpc_exec_ctx *exec_ctx,
399
+ grpc_channel_security_connector *sc,
400
+ grpc_handshake_manager *handshake_mgr) {
424
401
  grpc_ssl_channel_security_connector *c =
425
402
  (grpc_ssl_channel_security_connector *)sc;
426
- tsi_handshaker *handshaker;
427
- grpc_security_status status = ssl_create_handshaker(
428
- c->handshaker_factory, true,
429
- c->overridden_target_name != NULL ? c->overridden_target_name
430
- : c->target_name,
431
- &handshaker);
432
- if (status != GRPC_SECURITY_OK) {
433
- cb(exec_ctx, user_data, status, NULL, NULL);
434
- } else {
435
- grpc_do_security_handshake(exec_ctx, handshaker, &sc->base, true,
436
- nonsecure_endpoint, deadline, cb, user_data);
437
- }
438
- }
439
-
440
- static void ssl_server_do_handshake(grpc_exec_ctx *exec_ctx,
441
- grpc_server_security_connector *sc,
442
- grpc_tcp_server_acceptor *acceptor,
443
- grpc_endpoint *nonsecure_endpoint,
444
- gpr_timespec deadline,
445
- grpc_security_handshake_done_cb cb,
446
- void *user_data) {
403
+ // Instantiate TSI handshaker.
404
+ tsi_handshaker *tsi_hs = NULL;
405
+ ssl_create_handshaker(c->handshaker_factory, true /* is_client */,
406
+ c->overridden_target_name != NULL
407
+ ? c->overridden_target_name
408
+ : c->target_name,
409
+ &tsi_hs);
410
+ // Create handshakers.
411
+ grpc_handshake_manager_add(handshake_mgr, grpc_security_handshaker_create(
412
+ exec_ctx, tsi_hs, &sc->base));
413
+ }
414
+
415
+ static void ssl_server_add_handshakers(grpc_exec_ctx *exec_ctx,
416
+ grpc_server_security_connector *sc,
417
+ grpc_handshake_manager *handshake_mgr) {
447
418
  grpc_ssl_server_security_connector *c =
448
419
  (grpc_ssl_server_security_connector *)sc;
449
- tsi_handshaker *handshaker;
450
- grpc_security_status status =
451
- ssl_create_handshaker(c->handshaker_factory, false, NULL, &handshaker);
452
- if (status != GRPC_SECURITY_OK) {
453
- cb(exec_ctx, user_data, status, NULL, NULL);
454
- } else {
455
- grpc_do_security_handshake(exec_ctx, handshaker, &sc->base, false,
456
- nonsecure_endpoint, deadline, cb, user_data);
457
- }
420
+ // Instantiate TSI handshaker.
421
+ tsi_handshaker *tsi_hs = NULL;
422
+ ssl_create_handshaker(c->handshaker_factory, false /* is_client */,
423
+ NULL /* peer_name */, &tsi_hs);
424
+ // Create handshakers.
425
+ grpc_handshake_manager_add(handshake_mgr, grpc_security_handshaker_create(
426
+ exec_ctx, tsi_hs, &sc->base));
458
427
  }
459
428
 
460
429
  static int ssl_host_matches_name(const tsi_peer *peer, const char *peer_name) {
@@ -511,57 +480,53 @@ grpc_auth_context *tsi_ssl_peer_to_auth_context(const tsi_peer *peer) {
511
480
  return ctx;
512
481
  }
513
482
 
514
- static grpc_security_status ssl_check_peer(grpc_security_connector *sc,
515
- const char *peer_name,
516
- const tsi_peer *peer,
517
- grpc_auth_context **auth_context) {
483
+ static grpc_error *ssl_check_peer(grpc_security_connector *sc,
484
+ const char *peer_name, const tsi_peer *peer,
485
+ grpc_auth_context **auth_context) {
518
486
  /* Check the ALPN. */
519
487
  const tsi_peer_property *p =
520
488
  tsi_peer_get_property_by_name(peer, TSI_SSL_ALPN_SELECTED_PROTOCOL);
521
489
  if (p == NULL) {
522
- gpr_log(GPR_ERROR, "Missing selected ALPN property.");
523
- return GRPC_SECURITY_ERROR;
490
+ return GRPC_ERROR_CREATE(
491
+ "Cannot check peer: missing selected ALPN property.");
524
492
  }
525
493
  if (!grpc_chttp2_is_alpn_version_supported(p->value.data, p->value.length)) {
526
- gpr_log(GPR_ERROR, "Invalid ALPN value.");
527
- return GRPC_SECURITY_ERROR;
494
+ return GRPC_ERROR_CREATE("Cannot check peer: invalid ALPN value.");
528
495
  }
529
496
 
530
497
  /* Check the peer name if specified. */
531
498
  if (peer_name != NULL && !ssl_host_matches_name(peer, peer_name)) {
532
- gpr_log(GPR_ERROR, "Peer name %s is not in peer certificate", peer_name);
533
- return GRPC_SECURITY_ERROR;
499
+ char *msg;
500
+ gpr_asprintf(&msg, "Peer name %s is not in peer certificate", peer_name);
501
+ grpc_error *error = GRPC_ERROR_CREATE(msg);
502
+ gpr_free(msg);
503
+ return error;
534
504
  }
535
505
  *auth_context = tsi_ssl_peer_to_auth_context(peer);
536
- return GRPC_SECURITY_OK;
506
+ return GRPC_ERROR_NONE;
537
507
  }
538
508
 
539
509
  static void ssl_channel_check_peer(grpc_exec_ctx *exec_ctx,
540
510
  grpc_security_connector *sc, tsi_peer peer,
541
- grpc_security_peer_check_cb cb,
542
- void *user_data) {
511
+ grpc_auth_context **auth_context,
512
+ grpc_closure *on_peer_checked) {
543
513
  grpc_ssl_channel_security_connector *c =
544
514
  (grpc_ssl_channel_security_connector *)sc;
545
- grpc_security_status status;
546
- grpc_auth_context *auth_context = NULL;
547
- status = ssl_check_peer(sc, c->overridden_target_name != NULL
548
- ? c->overridden_target_name
549
- : c->target_name,
550
- &peer, &auth_context);
551
- cb(exec_ctx, user_data, status, auth_context);
552
- grpc_auth_context_unref(auth_context);
515
+ grpc_error *error = ssl_check_peer(sc, c->overridden_target_name != NULL
516
+ ? c->overridden_target_name
517
+ : c->target_name,
518
+ &peer, auth_context);
519
+ grpc_closure_sched(exec_ctx, on_peer_checked, error);
553
520
  tsi_peer_destruct(&peer);
554
521
  }
555
522
 
556
523
  static void ssl_server_check_peer(grpc_exec_ctx *exec_ctx,
557
524
  grpc_security_connector *sc, tsi_peer peer,
558
- grpc_security_peer_check_cb cb,
559
- void *user_data) {
560
- grpc_auth_context *auth_context = NULL;
561
- grpc_security_status status = ssl_check_peer(sc, NULL, &peer, &auth_context);
525
+ grpc_auth_context **auth_context,
526
+ grpc_closure *on_peer_checked) {
527
+ grpc_error *error = ssl_check_peer(sc, NULL, &peer, auth_context);
562
528
  tsi_peer_destruct(&peer);
563
- cb(exec_ctx, user_data, status, auth_context);
564
- grpc_auth_context_unref(auth_context);
529
+ grpc_closure_sched(exec_ctx, on_peer_checked, error);
565
530
  }
566
531
 
567
532
  static void add_shallow_auth_property_to_peer(tsi_peer *peer,
@@ -635,8 +600,8 @@ static grpc_security_connector_vtable ssl_channel_vtable = {
635
600
  static grpc_security_connector_vtable ssl_server_vtable = {
636
601
  ssl_server_destroy, ssl_server_check_peer};
637
602
 
638
- static gpr_slice compute_default_pem_root_certs_once(void) {
639
- gpr_slice result = gpr_empty_slice();
603
+ static grpc_slice compute_default_pem_root_certs_once(void) {
604
+ grpc_slice result = gpr_empty_slice();
640
605
 
641
606
  /* First try to load the roots from the environment. */
642
607
  char *default_root_certs_path =
@@ -649,17 +614,17 @@ static gpr_slice compute_default_pem_root_certs_once(void) {
649
614
 
650
615
  /* Try overridden roots if needed. */
651
616
  grpc_ssl_roots_override_result ovrd_res = GRPC_SSL_ROOTS_OVERRIDE_FAIL;
652
- if (GPR_SLICE_IS_EMPTY(result) && ssl_roots_override_cb != NULL) {
617
+ if (GRPC_SLICE_IS_EMPTY(result) && ssl_roots_override_cb != NULL) {
653
618
  char *pem_root_certs = NULL;
654
619
  ovrd_res = ssl_roots_override_cb(&pem_root_certs);
655
620
  if (ovrd_res == GRPC_SSL_ROOTS_OVERRIDE_OK) {
656
621
  GPR_ASSERT(pem_root_certs != NULL);
657
- result = gpr_slice_new(pem_root_certs, strlen(pem_root_certs), gpr_free);
622
+ result = grpc_slice_new(pem_root_certs, strlen(pem_root_certs), gpr_free);
658
623
  }
659
624
  }
660
625
 
661
626
  /* Fall back to installed certs if needed. */
662
- if (GPR_SLICE_IS_EMPTY(result) &&
627
+ if (GRPC_SLICE_IS_EMPTY(result) &&
663
628
  ovrd_res != GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY) {
664
629
  GRPC_LOG_IF_ERROR("load_file",
665
630
  grpc_load_file(installed_roots_path, 0, &result));
@@ -667,13 +632,13 @@ static gpr_slice compute_default_pem_root_certs_once(void) {
667
632
  return result;
668
633
  }
669
634
 
670
- static gpr_slice default_pem_root_certs;
635
+ static grpc_slice default_pem_root_certs;
671
636
 
672
637
  static void init_default_pem_root_certs(void) {
673
638
  default_pem_root_certs = compute_default_pem_root_certs_once();
674
639
  }
675
640
 
676
- gpr_slice grpc_get_default_ssl_roots_for_testing(void) {
641
+ grpc_slice grpc_get_default_ssl_roots_for_testing(void) {
677
642
  return compute_default_pem_root_certs_once();
678
643
  }
679
644
 
@@ -707,12 +672,12 @@ size_t grpc_get_default_ssl_roots(const unsigned char **pem_root_certs) {
707
672
  loading all the roots once for the lifetime of the process. */
708
673
  static gpr_once once = GPR_ONCE_INIT;
709
674
  gpr_once_init(&once, init_default_pem_root_certs);
710
- *pem_root_certs = GPR_SLICE_START_PTR(default_pem_root_certs);
711
- return GPR_SLICE_LENGTH(default_pem_root_certs);
675
+ *pem_root_certs = GRPC_SLICE_START_PTR(default_pem_root_certs);
676
+ return GRPC_SLICE_LENGTH(default_pem_root_certs);
712
677
  }
713
678
 
714
679
  grpc_security_status grpc_ssl_channel_security_connector_create(
715
- grpc_call_credentials *request_metadata_creds,
680
+ grpc_exec_ctx *exec_ctx, grpc_call_credentials *request_metadata_creds,
716
681
  const grpc_ssl_config *config, const char *target_name,
717
682
  const char *overridden_target_name, grpc_channel_security_connector **sc) {
718
683
  size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions();
@@ -758,7 +723,7 @@ grpc_security_status grpc_ssl_channel_security_connector_create(
758
723
  c->base.request_metadata_creds =
759
724
  grpc_call_credentials_ref(request_metadata_creds);
760
725
  c->base.check_call_host = ssl_channel_check_call_host;
761
- c->base.do_handshake = ssl_channel_do_handshake;
726
+ c->base.add_handshakers = ssl_channel_add_handshakers;
762
727
  gpr_split_host_port(target_name, &c->target_name, &port);
763
728
  gpr_free(port);
764
729
  if (overridden_target_name != NULL) {
@@ -773,7 +738,7 @@ grpc_security_status grpc_ssl_channel_security_connector_create(
773
738
  if (result != TSI_OK) {
774
739
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
775
740
  tsi_result_to_string(result));
776
- ssl_channel_destroy(&c->base.base);
741
+ ssl_channel_destroy(exec_ctx, &c->base.base);
777
742
  *sc = NULL;
778
743
  goto error;
779
744
  }
@@ -789,7 +754,8 @@ error:
789
754
  }
790
755
 
791
756
  grpc_security_status grpc_ssl_server_security_connector_create(
792
- const grpc_ssl_server_config *config, grpc_server_security_connector **sc) {
757
+ grpc_exec_ctx *exec_ctx, const grpc_ssl_server_config *config,
758
+ grpc_server_security_connector **sc) {
793
759
  size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions();
794
760
  const unsigned char **alpn_protocol_strings =
795
761
  gpr_malloc(sizeof(const char *) * num_alpn_protocols);
@@ -829,12 +795,11 @@ grpc_security_status grpc_ssl_server_security_connector_create(
829
795
  if (result != TSI_OK) {
830
796
  gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
831
797
  tsi_result_to_string(result));
832
- ssl_server_destroy(&c->base.base);
798
+ ssl_server_destroy(exec_ctx, &c->base.base);
833
799
  *sc = NULL;
834
800
  goto error;
835
801
  }
836
- gpr_mu_init(&c->base.mu);
837
- c->base.do_handshake = ssl_server_do_handshake;
802
+ c->base.add_handshakers = ssl_server_add_handshakers;
838
803
  *sc = &c->base;
839
804
  gpr_free((void *)alpn_protocol_strings);
840
805
  gpr_free(alpn_protocol_string_lengths);