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
@@ -36,6 +36,7 @@
36
36
 
37
37
  void grpc_register_security_filters(void);
38
38
  void grpc_security_pre_init(void);
39
+ void grpc_security_init(void);
39
40
  int grpc_is_initialized(void);
40
41
 
41
42
  #endif /* GRPC_CORE_LIB_SURFACE_INIT_H */
@@ -41,6 +41,7 @@
41
41
  #include "src/core/lib/security/transport/auth_filters.h"
42
42
  #include "src/core/lib/security/transport/secure_endpoint.h"
43
43
  #include "src/core/lib/security/transport/security_connector.h"
44
+ #include "src/core/lib/security/transport/security_handshaker.h"
44
45
  #include "src/core/lib/surface/channel_init.h"
45
46
  #include "src/core/lib/tsi/transport_security_interface.h"
46
47
 
@@ -50,7 +51,7 @@ void grpc_security_pre_init(void) {
50
51
  }
51
52
 
52
53
  static bool maybe_prepend_client_auth_filter(
53
- grpc_channel_stack_builder *builder, void *arg) {
54
+ grpc_exec_ctx *exec_ctx, grpc_channel_stack_builder *builder, void *arg) {
54
55
  const grpc_channel_args *args =
55
56
  grpc_channel_stack_builder_get_channel_arguments(builder);
56
57
  if (args) {
@@ -65,7 +66,7 @@ static bool maybe_prepend_client_auth_filter(
65
66
  }
66
67
 
67
68
  static bool maybe_prepend_server_auth_filter(
68
- grpc_channel_stack_builder *builder, void *arg) {
69
+ grpc_exec_ctx *exec_ctx, grpc_channel_stack_builder *builder, void *arg) {
69
70
  const grpc_channel_args *args =
70
71
  grpc_channel_stack_builder_get_channel_arguments(builder);
71
72
  if (args) {
@@ -87,3 +88,5 @@ void grpc_register_security_filters(void) {
87
88
  grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX,
88
89
  maybe_prepend_server_auth_filter, NULL);
89
90
  }
91
+
92
+ void grpc_security_init() { grpc_security_register_handshaker_factories(); }
@@ -55,14 +55,15 @@ typedef struct {
55
55
  const char *error_message;
56
56
  } channel_data;
57
57
 
58
- static void fill_metadata(grpc_call_element *elem, grpc_metadata_batch *mdb) {
58
+ static void fill_metadata(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
59
+ grpc_metadata_batch *mdb) {
59
60
  call_data *calld = elem->call_data;
60
61
  channel_data *chand = elem->channel_data;
61
62
  char tmp[GPR_LTOA_MIN_BUFSIZE];
62
63
  gpr_ltoa(chand->error_code, tmp);
63
- calld->status.md = grpc_mdelem_from_strings("grpc-status", tmp);
64
+ calld->status.md = grpc_mdelem_from_strings(exec_ctx, "grpc-status", tmp);
64
65
  calld->details.md =
65
- grpc_mdelem_from_strings("grpc-message", chand->error_message);
66
+ grpc_mdelem_from_strings(exec_ctx, "grpc-message", chand->error_message);
66
67
  calld->status.prev = calld->details.next = NULL;
67
68
  calld->status.next = &calld->details;
68
69
  calld->details.prev = &calld->status;
@@ -76,9 +77,9 @@ static void lame_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
76
77
  grpc_transport_stream_op *op) {
77
78
  GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
78
79
  if (op->recv_initial_metadata != NULL) {
79
- fill_metadata(elem, op->recv_initial_metadata);
80
+ fill_metadata(exec_ctx, elem, op->recv_initial_metadata);
80
81
  } else if (op->recv_trailing_metadata != NULL) {
81
- fill_metadata(elem, op->recv_trailing_metadata);
82
+ fill_metadata(exec_ctx, elem, op->recv_trailing_metadata);
82
83
  }
83
84
  grpc_transport_stream_op_finish_with_failure(
84
85
  exec_ctx, op, GRPC_ERROR_CREATE("lame client channel"));
@@ -88,39 +89,47 @@ static char *lame_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
88
89
  return NULL;
89
90
  }
90
91
 
92
+ static void lame_get_channel_info(grpc_exec_ctx *exec_ctx,
93
+ grpc_channel_element *elem,
94
+ const grpc_channel_info *channel_info) {}
95
+
91
96
  static void lame_start_transport_op(grpc_exec_ctx *exec_ctx,
92
97
  grpc_channel_element *elem,
93
98
  grpc_transport_op *op) {
94
99
  if (op->on_connectivity_state_change) {
95
100
  GPR_ASSERT(*op->connectivity_state != GRPC_CHANNEL_SHUTDOWN);
96
101
  *op->connectivity_state = GRPC_CHANNEL_SHUTDOWN;
97
- grpc_exec_ctx_sched(exec_ctx, op->on_connectivity_state_change,
98
- GRPC_ERROR_NONE, NULL);
99
- }
100
- if (op->on_consumed != NULL) {
101
- grpc_exec_ctx_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE, NULL);
102
+ grpc_closure_sched(exec_ctx, op->on_connectivity_state_change,
103
+ GRPC_ERROR_NONE);
102
104
  }
103
105
  if (op->send_ping != NULL) {
104
- grpc_exec_ctx_sched(exec_ctx, op->send_ping,
105
- GRPC_ERROR_CREATE("lame client channel"), NULL);
106
+ grpc_closure_sched(exec_ctx, op->send_ping,
107
+ GRPC_ERROR_CREATE("lame client channel"));
106
108
  }
107
109
  GRPC_ERROR_UNREF(op->disconnect_with_error);
110
+ if (op->on_consumed != NULL) {
111
+ grpc_closure_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE);
112
+ }
108
113
  }
109
114
 
110
- static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
111
- grpc_call_element_args *args) {}
115
+ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
116
+ grpc_call_element *elem,
117
+ grpc_call_element_args *args) {
118
+ return GRPC_ERROR_NONE;
119
+ }
112
120
 
113
121
  static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
114
- const grpc_call_stats *stats,
122
+ const grpc_call_final_info *final_info,
115
123
  void *and_free_memory) {
116
124
  gpr_free(and_free_memory);
117
125
  }
118
126
 
119
- static void init_channel_elem(grpc_exec_ctx *exec_ctx,
120
- grpc_channel_element *elem,
121
- grpc_channel_element_args *args) {
127
+ static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
128
+ grpc_channel_element *elem,
129
+ grpc_channel_element_args *args) {
122
130
  GPR_ASSERT(args->is_first);
123
131
  GPR_ASSERT(args->is_last);
132
+ return GRPC_ERROR_NONE;
124
133
  }
125
134
 
126
135
  static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
@@ -137,6 +146,7 @@ const grpc_channel_filter grpc_lame_filter = {
137
146
  init_channel_elem,
138
147
  destroy_channel_elem,
139
148
  lame_get_peer,
149
+ lame_get_channel_info,
140
150
  "lame-client",
141
151
  };
142
152
 
@@ -45,6 +45,7 @@
45
45
  #include "src/core/lib/channel/channel_args.h"
46
46
  #include "src/core/lib/channel/connected_channel.h"
47
47
  #include "src/core/lib/iomgr/iomgr.h"
48
+ #include "src/core/lib/slice/slice_internal.h"
48
49
  #include "src/core/lib/support/stack_lockfree.h"
49
50
  #include "src/core/lib/support/string.h"
50
51
  #include "src/core/lib/surface/api_trace.h"
@@ -71,6 +72,8 @@ typedef struct registered_method registered_method;
71
72
 
72
73
  typedef enum { BATCH_CALL, REGISTERED_CALL } requested_call_type;
73
74
 
75
+ int grpc_server_channel_trace = 0;
76
+
74
77
  typedef struct requested_call {
75
78
  requested_call_type type;
76
79
  size_t cq_idx;
@@ -149,6 +152,7 @@ struct call_data {
149
152
 
150
153
  grpc_metadata_batch *recv_initial_metadata;
151
154
  bool recv_idempotent_request;
155
+ bool recv_cacheable_request;
152
156
  grpc_metadata_array initial_metadata;
153
157
 
154
158
  request_matcher *request_matcher;
@@ -192,6 +196,7 @@ struct grpc_server {
192
196
  grpc_completion_queue **cqs;
193
197
  grpc_pollset **pollsets;
194
198
  size_t cq_count;
199
+ size_t pollset_count;
195
200
  bool started;
196
201
 
197
202
  /* The two following mutexes control access to server-state
@@ -261,39 +266,38 @@ static void channel_broadcaster_init(grpc_server *s, channel_broadcaster *cb) {
261
266
 
262
267
  struct shutdown_cleanup_args {
263
268
  grpc_closure closure;
264
- gpr_slice slice;
269
+ grpc_slice slice;
265
270
  };
266
271
 
267
272
  static void shutdown_cleanup(grpc_exec_ctx *exec_ctx, void *arg,
268
273
  grpc_error *error) {
269
274
  struct shutdown_cleanup_args *a = arg;
270
- gpr_slice_unref(a->slice);
275
+ grpc_slice_unref_internal(exec_ctx, a->slice);
271
276
  gpr_free(a);
272
277
  }
273
278
 
274
279
  static void send_shutdown(grpc_exec_ctx *exec_ctx, grpc_channel *channel,
275
280
  int send_goaway, grpc_error *send_disconnect) {
276
- grpc_transport_op op;
277
- struct shutdown_cleanup_args *sc;
281
+ struct shutdown_cleanup_args *sc = gpr_malloc(sizeof(*sc));
282
+ grpc_closure_init(&sc->closure, shutdown_cleanup, sc,
283
+ grpc_schedule_on_exec_ctx);
284
+ grpc_transport_op *op = grpc_make_transport_op(&sc->closure);
278
285
  grpc_channel_element *elem;
279
286
 
280
- memset(&op, 0, sizeof(op));
281
- op.send_goaway = send_goaway;
282
- sc = gpr_malloc(sizeof(*sc));
283
- sc->slice = gpr_slice_from_copied_string("Server shutdown");
284
- op.goaway_message = &sc->slice;
285
- op.goaway_status = GRPC_STATUS_OK;
286
- op.disconnect_with_error = send_disconnect;
287
- grpc_closure_init(&sc->closure, shutdown_cleanup, sc);
288
- op.on_consumed = &sc->closure;
287
+ op->send_goaway = send_goaway;
288
+ op->set_accept_stream = true;
289
+ sc->slice = grpc_slice_from_copied_string("Server shutdown");
290
+ op->goaway_message = &sc->slice;
291
+ op->goaway_status = GRPC_STATUS_OK;
292
+ op->disconnect_with_error = send_disconnect;
289
293
 
290
294
  elem = grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
291
- elem->filter->start_transport_op(exec_ctx, elem, &op);
295
+ elem->filter->start_transport_op(exec_ctx, elem, op);
292
296
  }
293
297
 
294
298
  static void channel_broadcaster_shutdown(grpc_exec_ctx *exec_ctx,
295
299
  channel_broadcaster *cb,
296
- int send_goaway,
300
+ bool send_goaway,
297
301
  grpc_error *force_disconnect) {
298
302
  size_t i;
299
303
 
@@ -344,9 +348,9 @@ static void request_matcher_zombify_all_pending_calls(grpc_exec_ctx *exec_ctx,
344
348
  gpr_mu_unlock(&calld->mu_state);
345
349
  grpc_closure_init(
346
350
  &calld->kill_zombie_closure, kill_zombie,
347
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0));
348
- grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure, GRPC_ERROR_NONE,
349
- NULL);
351
+ grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
352
+ grpc_schedule_on_exec_ctx);
353
+ grpc_closure_sched(exec_ctx, &calld->kill_zombie_closure, GRPC_ERROR_NONE);
350
354
  }
351
355
  }
352
356
 
@@ -377,7 +381,7 @@ static void server_ref(grpc_server *server) {
377
381
  static void server_delete(grpc_exec_ctx *exec_ctx, grpc_server *server) {
378
382
  registered_method *rm;
379
383
  size_t i;
380
- grpc_channel_args_destroy(server->channel_args);
384
+ grpc_channel_args_destroy(exec_ctx, server->channel_args);
381
385
  gpr_mu_destroy(&server->mu_global);
382
386
  gpr_mu_destroy(&server->mu_call);
383
387
  while ((rm = server->registered_methods) != NULL) {
@@ -431,28 +435,35 @@ static void finish_destroy_channel(grpc_exec_ctx *exec_ctx, void *cd,
431
435
  server_unref(exec_ctx, server);
432
436
  }
433
437
 
434
- static void destroy_channel(grpc_exec_ctx *exec_ctx, channel_data *chand) {
438
+ static void destroy_channel(grpc_exec_ctx *exec_ctx, channel_data *chand,
439
+ grpc_error *error) {
435
440
  if (is_channel_orphaned(chand)) return;
436
441
  GPR_ASSERT(chand->server != NULL);
437
442
  orphan_channel(chand);
438
443
  server_ref(chand->server);
439
444
  maybe_finish_shutdown(exec_ctx, chand->server);
440
- chand->finish_destroy_channel_closure.cb = finish_destroy_channel;
441
- chand->finish_destroy_channel_closure.cb_arg = chand;
445
+ grpc_closure_init(&chand->finish_destroy_channel_closure,
446
+ finish_destroy_channel, chand, grpc_schedule_on_exec_ctx);
442
447
 
443
- grpc_transport_op op;
444
- memset(&op, 0, sizeof(op));
445
- op.set_accept_stream = true;
446
- op.on_consumed = &chand->finish_destroy_channel_closure;
448
+ if (grpc_server_channel_trace && error != GRPC_ERROR_NONE) {
449
+ const char *msg = grpc_error_string(error);
450
+ gpr_log(GPR_INFO, "Disconnected client: %s", msg);
451
+ grpc_error_free_string(msg);
452
+ }
453
+ GRPC_ERROR_UNREF(error);
454
+
455
+ grpc_transport_op *op =
456
+ grpc_make_transport_op(&chand->finish_destroy_channel_closure);
457
+ op->set_accept_stream = true;
447
458
  grpc_channel_next_op(exec_ctx,
448
459
  grpc_channel_stack_element(
449
460
  grpc_channel_get_channel_stack(chand->channel), 0),
450
- &op);
461
+ op);
451
462
  }
452
463
 
453
464
  static void cpstr(char **dest, size_t *capacity, grpc_mdstr *value) {
454
- gpr_slice slice = value->slice;
455
- size_t len = GPR_SLICE_LENGTH(slice);
465
+ grpc_slice slice = value->slice;
466
+ size_t len = GRPC_SLICE_LENGTH(slice);
456
467
 
457
468
  if (len + 1 > *capacity) {
458
469
  *capacity = GPR_MAX(len + 1, *capacity * 2);
@@ -497,9 +508,12 @@ static void publish_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
497
508
  &rc->data.batch.details->method_capacity, calld->path);
498
509
  rc->data.batch.details->deadline = calld->deadline;
499
510
  rc->data.batch.details->flags =
500
- 0 | (calld->recv_idempotent_request
501
- ? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST
502
- : 0);
511
+ (calld->recv_idempotent_request
512
+ ? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST
513
+ : 0) |
514
+ (calld->recv_cacheable_request
515
+ ? GRPC_INITIAL_METADATA_CACHEABLE_REQUEST
516
+ : 0);
503
517
  break;
504
518
  case REGISTERED_CALL:
505
519
  *rc->data.registered.deadline = calld->deadline;
@@ -533,8 +547,9 @@ static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *arg,
533
547
  gpr_mu_unlock(&calld->mu_state);
534
548
  grpc_closure_init(
535
549
  &calld->kill_zombie_closure, kill_zombie,
536
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0));
537
- grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure, error, NULL);
550
+ grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
551
+ grpc_schedule_on_exec_ctx);
552
+ grpc_closure_sched(exec_ctx, &calld->kill_zombie_closure, error);
538
553
  return;
539
554
  }
540
555
 
@@ -578,9 +593,9 @@ static void finish_start_new_rpc(
578
593
  gpr_mu_lock(&calld->mu_state);
579
594
  calld->state = ZOMBIED;
580
595
  gpr_mu_unlock(&calld->mu_state);
581
- grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem);
582
- grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure, GRPC_ERROR_NONE,
583
- NULL);
596
+ grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem,
597
+ grpc_schedule_on_exec_ctx);
598
+ grpc_closure_sched(exec_ctx, &calld->kill_zombie_closure, GRPC_ERROR_NONE);
584
599
  return;
585
600
  }
586
601
 
@@ -594,8 +609,9 @@ static void finish_start_new_rpc(
594
609
  grpc_op op;
595
610
  memset(&op, 0, sizeof(op));
596
611
  op.op = GRPC_OP_RECV_MESSAGE;
597
- op.data.recv_message = &calld->payload;
598
- grpc_closure_init(&calld->publish, publish_new_rpc, elem);
612
+ op.data.recv_message.recv_message = &calld->payload;
613
+ grpc_closure_init(&calld->publish, publish_new_rpc, elem,
614
+ grpc_schedule_on_exec_ctx);
599
615
  grpc_call_start_batch_and_execute(exec_ctx, calld->call, &op, 1,
600
616
  &calld->publish);
601
617
  break;
@@ -728,7 +744,8 @@ static void maybe_finish_shutdown(grpc_exec_ctx *exec_ctx,
728
744
  }
729
745
  }
730
746
 
731
- static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) {
747
+ static grpc_mdelem *server_filter(grpc_exec_ctx *exec_ctx, void *user_data,
748
+ grpc_mdelem *md) {
732
749
  grpc_call_element *elem = user_data;
733
750
  call_data *calld = elem->call_data;
734
751
  if (md->key == GRPC_MDSTR_PATH) {
@@ -752,7 +769,8 @@ static void server_on_recv_initial_metadata(grpc_exec_ctx *exec_ctx, void *ptr,
752
769
  gpr_timespec op_deadline;
753
770
 
754
771
  GRPC_ERROR_REF(error);
755
- grpc_metadata_batch_filter(calld->recv_initial_metadata, server_filter, elem);
772
+ grpc_metadata_batch_filter(exec_ctx, calld->recv_initial_metadata,
773
+ server_filter, elem);
756
774
  op_deadline = calld->recv_initial_metadata->deadline;
757
775
  if (0 != gpr_time_cmp(op_deadline, gpr_inf_future(op_deadline.clock_type))) {
758
776
  calld->deadline = op_deadline;
@@ -765,8 +783,7 @@ static void server_on_recv_initial_metadata(grpc_exec_ctx *exec_ctx, void *ptr,
765
783
  GRPC_ERROR_CREATE_REFERENCING("Missing :authority or :path", &error, 1);
766
784
  }
767
785
 
768
- grpc_exec_ctx_sched(exec_ctx, calld->on_done_recv_initial_metadata, error,
769
- NULL);
786
+ grpc_closure_run(exec_ctx, calld->on_done_recv_initial_metadata, error);
770
787
  }
771
788
 
772
789
  static void server_mutate_op(grpc_call_element *elem,
@@ -779,6 +796,7 @@ static void server_mutate_op(grpc_call_element *elem,
779
796
  calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready;
780
797
  op->recv_initial_metadata_ready = &calld->server_on_recv_initial_metadata;
781
798
  op->recv_idempotent_request = &calld->recv_idempotent_request;
799
+ op->recv_cacheable_request = &calld->recv_cacheable_request;
782
800
  }
783
801
  }
784
802
 
@@ -801,9 +819,10 @@ static void got_initial_metadata(grpc_exec_ctx *exec_ctx, void *ptr,
801
819
  if (calld->state == NOT_STARTED) {
802
820
  calld->state = ZOMBIED;
803
821
  gpr_mu_unlock(&calld->mu_state);
804
- grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem);
805
- grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure,
806
- GRPC_ERROR_NONE, NULL);
822
+ grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem,
823
+ grpc_schedule_on_exec_ctx);
824
+ grpc_closure_sched(exec_ctx, &calld->kill_zombie_closure,
825
+ GRPC_ERROR_NONE);
807
826
  } else if (calld->state == PENDING) {
808
827
  calld->state = ZOMBIED;
809
828
  gpr_mu_unlock(&calld->mu_state);
@@ -820,17 +839,28 @@ static void accept_stream(grpc_exec_ctx *exec_ctx, void *cd,
820
839
  const void *transport_server_data) {
821
840
  channel_data *chand = cd;
822
841
  /* create a call */
823
- grpc_call *call = grpc_call_create(chand->channel, NULL, 0, NULL, NULL,
824
- transport_server_data, NULL, 0,
825
- gpr_inf_future(GPR_CLOCK_MONOTONIC));
842
+ grpc_call_create_args args;
843
+ memset(&args, 0, sizeof(args));
844
+ args.channel = chand->channel;
845
+ args.server_transport_data = transport_server_data;
846
+ args.send_deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
847
+ grpc_call *call;
848
+ grpc_error *error = grpc_call_create(exec_ctx, &args, &call);
826
849
  grpc_call_element *elem =
827
850
  grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
851
+ if (error != GRPC_ERROR_NONE) {
852
+ got_initial_metadata(exec_ctx, elem, error);
853
+ GRPC_ERROR_UNREF(error);
854
+ return;
855
+ }
828
856
  call_data *calld = elem->call_data;
829
857
  grpc_op op;
830
858
  memset(&op, 0, sizeof(op));
831
859
  op.op = GRPC_OP_RECV_INITIAL_METADATA;
832
- op.data.recv_initial_metadata = &calld->initial_metadata;
833
- grpc_closure_init(&calld->got_initial_metadata, got_initial_metadata, elem);
860
+ op.data.recv_initial_metadata.recv_initial_metadata =
861
+ &calld->initial_metadata;
862
+ grpc_closure_init(&calld->got_initial_metadata, got_initial_metadata, elem,
863
+ grpc_schedule_on_exec_ctx);
834
864
  grpc_call_start_batch_and_execute(exec_ctx, call, &op, 1,
835
865
  &calld->got_initial_metadata);
836
866
  }
@@ -840,24 +870,24 @@ static void channel_connectivity_changed(grpc_exec_ctx *exec_ctx, void *cd,
840
870
  channel_data *chand = cd;
841
871
  grpc_server *server = chand->server;
842
872
  if (chand->connectivity_state != GRPC_CHANNEL_SHUTDOWN) {
843
- grpc_transport_op op;
844
- memset(&op, 0, sizeof(op));
845
- op.on_connectivity_state_change = &chand->channel_connectivity_changed,
846
- op.connectivity_state = &chand->connectivity_state;
873
+ grpc_transport_op *op = grpc_make_transport_op(NULL);
874
+ op->on_connectivity_state_change = &chand->channel_connectivity_changed,
875
+ op->connectivity_state = &chand->connectivity_state;
847
876
  grpc_channel_next_op(exec_ctx,
848
877
  grpc_channel_stack_element(
849
878
  grpc_channel_get_channel_stack(chand->channel), 0),
850
- &op);
879
+ op);
851
880
  } else {
852
881
  gpr_mu_lock(&server->mu_global);
853
- destroy_channel(exec_ctx, chand);
882
+ destroy_channel(exec_ctx, chand, GRPC_ERROR_REF(error));
854
883
  gpr_mu_unlock(&server->mu_global);
855
884
  GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, chand->channel, "connectivity");
856
885
  }
857
886
  }
858
887
 
859
- static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
860
- grpc_call_element_args *args) {
888
+ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
889
+ grpc_call_element *elem,
890
+ grpc_call_element_args *args) {
861
891
  call_data *calld = elem->call_data;
862
892
  channel_data *chand = elem->channel_data;
863
893
  memset(calld, 0, sizeof(call_data));
@@ -866,23 +896,26 @@ static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
866
896
  gpr_mu_init(&calld->mu_state);
867
897
 
868
898
  grpc_closure_init(&calld->server_on_recv_initial_metadata,
869
- server_on_recv_initial_metadata, elem);
899
+ server_on_recv_initial_metadata, elem,
900
+ grpc_schedule_on_exec_ctx);
870
901
 
871
902
  server_ref(chand->server);
903
+ return GRPC_ERROR_NONE;
872
904
  }
873
905
 
874
906
  static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
875
- const grpc_call_stats *stats, void *ignored) {
907
+ const grpc_call_final_info *final_info,
908
+ void *ignored) {
876
909
  channel_data *chand = elem->channel_data;
877
910
  call_data *calld = elem->call_data;
878
911
 
879
912
  GPR_ASSERT(calld->state != PENDING);
880
913
 
881
914
  if (calld->host) {
882
- GRPC_MDSTR_UNREF(calld->host);
915
+ GRPC_MDSTR_UNREF(exec_ctx, calld->host);
883
916
  }
884
917
  if (calld->path) {
885
- GRPC_MDSTR_UNREF(calld->path);
918
+ GRPC_MDSTR_UNREF(exec_ctx, calld->path);
886
919
  }
887
920
  grpc_metadata_array_destroy(&calld->initial_metadata);
888
921
 
@@ -891,9 +924,9 @@ static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
891
924
  server_unref(exec_ctx, chand->server);
892
925
  }
893
926
 
894
- static void init_channel_elem(grpc_exec_ctx *exec_ctx,
895
- grpc_channel_element *elem,
896
- grpc_channel_element_args *args) {
927
+ static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
928
+ grpc_channel_element *elem,
929
+ grpc_channel_element_args *args) {
897
930
  channel_data *chand = elem->channel_data;
898
931
  GPR_ASSERT(args->is_first);
899
932
  GPR_ASSERT(!args->is_last);
@@ -903,7 +936,9 @@ static void init_channel_elem(grpc_exec_ctx *exec_ctx,
903
936
  chand->registered_methods = NULL;
904
937
  chand->connectivity_state = GRPC_CHANNEL_IDLE;
905
938
  grpc_closure_init(&chand->channel_connectivity_changed,
906
- channel_connectivity_changed, chand);
939
+ channel_connectivity_changed, chand,
940
+ grpc_schedule_on_exec_ctx);
941
+ return GRPC_ERROR_NONE;
907
942
  }
908
943
 
909
944
  static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
@@ -913,10 +948,10 @@ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
913
948
  if (chand->registered_methods) {
914
949
  for (i = 0; i < chand->registered_method_slots; i++) {
915
950
  if (chand->registered_methods[i].method) {
916
- GRPC_MDSTR_UNREF(chand->registered_methods[i].method);
951
+ GRPC_MDSTR_UNREF(exec_ctx, chand->registered_methods[i].method);
917
952
  }
918
953
  if (chand->registered_methods[i].host) {
919
- GRPC_MDSTR_UNREF(chand->registered_methods[i].host);
954
+ GRPC_MDSTR_UNREF(exec_ctx, chand->registered_methods[i].host);
920
955
  }
921
956
  }
922
957
  gpr_free(chand->registered_methods);
@@ -943,6 +978,7 @@ const grpc_channel_filter grpc_server_top_filter = {
943
978
  init_channel_elem,
944
979
  destroy_channel_elem,
945
980
  grpc_call_next_get_peer,
981
+ grpc_channel_next_get_info,
946
982
  "server",
947
983
  };
948
984
 
@@ -1062,7 +1098,7 @@ void grpc_server_start(grpc_server *server) {
1062
1098
  GRPC_API_TRACE("grpc_server_start(server=%p)", 1, (server));
1063
1099
 
1064
1100
  server->started = true;
1065
- size_t pollset_count = 0;
1101
+ server->pollset_count = 0;
1066
1102
  server->pollsets = gpr_malloc(sizeof(grpc_pollset *) * server->cq_count);
1067
1103
  server->request_freelist_per_cq =
1068
1104
  gpr_malloc(sizeof(*server->request_freelist_per_cq) * server->cq_count);
@@ -1070,7 +1106,8 @@ void grpc_server_start(grpc_server *server) {
1070
1106
  gpr_malloc(sizeof(*server->requested_calls_per_cq) * server->cq_count);
1071
1107
  for (i = 0; i < server->cq_count; i++) {
1072
1108
  if (!grpc_cq_is_non_listening_server_cq(server->cqs[i])) {
1073
- server->pollsets[pollset_count++] = grpc_cq_pollset(server->cqs[i]);
1109
+ server->pollsets[server->pollset_count++] =
1110
+ grpc_cq_pollset(server->cqs[i]);
1074
1111
  }
1075
1112
  server->request_freelist_per_cq[i] =
1076
1113
  gpr_stack_lockfree_create((size_t)server->max_requested_calls_per_cq);
@@ -1089,12 +1126,19 @@ void grpc_server_start(grpc_server *server) {
1089
1126
  }
1090
1127
 
1091
1128
  for (l = server->listeners; l; l = l->next) {
1092
- l->start(&exec_ctx, server, l->arg, server->pollsets, pollset_count);
1129
+ l->start(&exec_ctx, server, l->arg, server->pollsets,
1130
+ server->pollset_count);
1093
1131
  }
1094
1132
 
1095
1133
  grpc_exec_ctx_finish(&exec_ctx);
1096
1134
  }
1097
1135
 
1136
+ void grpc_server_get_pollsets(grpc_server *server, grpc_pollset ***pollsets,
1137
+ size_t *pollset_count) {
1138
+ *pollset_count = server->pollset_count;
1139
+ *pollsets = server->pollsets;
1140
+ }
1141
+
1098
1142
  void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
1099
1143
  grpc_transport *transport,
1100
1144
  grpc_pollset *accepting_pollset,
@@ -1111,7 +1155,7 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
1111
1155
  size_t slots;
1112
1156
  uint32_t probes;
1113
1157
  uint32_t max_probes = 0;
1114
- grpc_transport_op op;
1158
+ grpc_transport_op *op = NULL;
1115
1159
 
1116
1160
  channel =
1117
1161
  grpc_channel_create(exec_ctx, NULL, args, GRPC_SERVER_CHANNEL, transport);
@@ -1171,16 +1215,16 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
1171
1215
  gpr_mu_unlock(&s->mu_global);
1172
1216
 
1173
1217
  GRPC_CHANNEL_INTERNAL_REF(channel, "connectivity");
1174
- memset(&op, 0, sizeof(op));
1175
- op.set_accept_stream = true;
1176
- op.set_accept_stream_fn = accept_stream;
1177
- op.set_accept_stream_user_data = chand;
1178
- op.on_connectivity_state_change = &chand->channel_connectivity_changed;
1179
- op.connectivity_state = &chand->connectivity_state;
1218
+ op = grpc_make_transport_op(NULL);
1219
+ op->set_accept_stream = true;
1220
+ op->set_accept_stream_fn = accept_stream;
1221
+ op->set_accept_stream_user_data = chand;
1222
+ op->on_connectivity_state_change = &chand->channel_connectivity_changed;
1223
+ op->connectivity_state = &chand->connectivity_state;
1180
1224
  if (gpr_atm_acq_load(&s->shutdown_flag) != 0) {
1181
- op.disconnect_with_error = GRPC_ERROR_CREATE("Server shutdown");
1225
+ op->disconnect_with_error = GRPC_ERROR_CREATE("Server shutdown");
1182
1226
  }
1183
- grpc_transport_perform_op(exec_ctx, transport, &op);
1227
+ grpc_transport_perform_op(exec_ctx, transport, op);
1184
1228
  }
1185
1229
 
1186
1230
  void done_published_shutdown(grpc_exec_ctx *exec_ctx, void *done_arg,
@@ -1245,11 +1289,13 @@ void grpc_server_shutdown_and_notify(grpc_server *server,
1245
1289
 
1246
1290
  /* Shutdown listeners */
1247
1291
  for (l = server->listeners; l; l = l->next) {
1248
- grpc_closure_init(&l->destroy_done, listener_destroy_done, server);
1292
+ grpc_closure_init(&l->destroy_done, listener_destroy_done, server,
1293
+ grpc_schedule_on_exec_ctx);
1249
1294
  l->destroy(&exec_ctx, server, l->arg, &l->destroy_done);
1250
1295
  }
1251
1296
 
1252
- channel_broadcaster_shutdown(&exec_ctx, &broadcaster, 1, 0);
1297
+ channel_broadcaster_shutdown(&exec_ctx, &broadcaster, true /* send_goaway */,
1298
+ GRPC_ERROR_NONE);
1253
1299
 
1254
1300
  done:
1255
1301
  grpc_exec_ctx_finish(&exec_ctx);
@@ -1265,7 +1311,7 @@ void grpc_server_cancel_all_calls(grpc_server *server) {
1265
1311
  channel_broadcaster_init(server, &broadcaster);
1266
1312
  gpr_mu_unlock(&server->mu_global);
1267
1313
 
1268
- channel_broadcaster_shutdown(&exec_ctx, &broadcaster, 0,
1314
+ channel_broadcaster_shutdown(&exec_ctx, &broadcaster, false /* send_goaway */,
1269
1315
  GRPC_ERROR_CREATE("Cancelling all calls"));
1270
1316
  grpc_exec_ctx_finish(&exec_ctx);
1271
1317
  }
@@ -1350,9 +1396,10 @@ static grpc_call_error queue_call_request(grpc_exec_ctx *exec_ctx,
1350
1396
  gpr_mu_unlock(&calld->mu_state);
1351
1397
  grpc_closure_init(
1352
1398
  &calld->kill_zombie_closure, kill_zombie,
1353
- grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0));
1354
- grpc_exec_ctx_sched(exec_ctx, &calld->kill_zombie_closure,
1355
- GRPC_ERROR_NONE, NULL);
1399
+ grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0),
1400
+ grpc_schedule_on_exec_ctx);
1401
+ grpc_closure_sched(exec_ctx, &calld->kill_zombie_closure,
1402
+ GRPC_ERROR_NONE);
1356
1403
  } else {
1357
1404
  GPR_ASSERT(calld->state == PENDING);
1358
1405
  calld->state = ACTIVATED;