grpc 1.0.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -66,22 +66,59 @@ static grpc_arg copy_arg(const grpc_arg *src) {
66
66
  grpc_channel_args *grpc_channel_args_copy_and_add(const grpc_channel_args *src,
67
67
  const grpc_arg *to_add,
68
68
  size_t num_to_add) {
69
+ return grpc_channel_args_copy_and_add_and_remove(src, NULL, 0, to_add,
70
+ num_to_add);
71
+ }
72
+
73
+ grpc_channel_args *grpc_channel_args_copy_and_remove(
74
+ const grpc_channel_args *src, const char **to_remove,
75
+ size_t num_to_remove) {
76
+ return grpc_channel_args_copy_and_add_and_remove(src, to_remove,
77
+ num_to_remove, NULL, 0);
78
+ }
79
+
80
+ static bool should_remove_arg(const grpc_arg *arg, const char **to_remove,
81
+ size_t num_to_remove) {
82
+ for (size_t i = 0; i < num_to_remove; ++i) {
83
+ if (strcmp(arg->key, to_remove[i]) == 0) return true;
84
+ }
85
+ return false;
86
+ }
87
+
88
+ grpc_channel_args *grpc_channel_args_copy_and_add_and_remove(
89
+ const grpc_channel_args *src, const char **to_remove, size_t num_to_remove,
90
+ const grpc_arg *to_add, size_t num_to_add) {
91
+ // Figure out how many args we'll be copying.
92
+ size_t num_args_to_copy = 0;
93
+ if (src != NULL) {
94
+ for (size_t i = 0; i < src->num_args; ++i) {
95
+ if (!should_remove_arg(&src->args[i], to_remove, num_to_remove)) {
96
+ ++num_args_to_copy;
97
+ }
98
+ }
99
+ }
100
+ // Create result.
69
101
  grpc_channel_args *dst = gpr_malloc(sizeof(grpc_channel_args));
70
- size_t i;
71
- size_t src_num_args = (src == NULL) ? 0 : src->num_args;
72
- if (!src && !to_add) {
73
- dst->num_args = 0;
102
+ dst->num_args = num_args_to_copy + num_to_add;
103
+ if (dst->num_args == 0) {
74
104
  dst->args = NULL;
75
105
  return dst;
76
106
  }
77
- dst->num_args = src_num_args + num_to_add;
78
107
  dst->args = gpr_malloc(sizeof(grpc_arg) * dst->num_args);
79
- for (i = 0; i < src_num_args; i++) {
80
- dst->args[i] = copy_arg(&src->args[i]);
108
+ // Copy args from src that are not being removed.
109
+ size_t dst_idx = 0;
110
+ if (src != NULL) {
111
+ for (size_t i = 0; i < src->num_args; ++i) {
112
+ if (!should_remove_arg(&src->args[i], to_remove, num_to_remove)) {
113
+ dst->args[dst_idx++] = copy_arg(&src->args[i]);
114
+ }
115
+ }
81
116
  }
82
- for (i = 0; i < num_to_add; i++) {
83
- dst->args[i + src_num_args] = copy_arg(&to_add[i]);
117
+ // Add args from to_add.
118
+ for (size_t i = 0; i < num_to_add; ++i) {
119
+ dst->args[dst_idx++] = copy_arg(&to_add[i]);
84
120
  }
121
+ GPR_ASSERT(dst_idx == dst->num_args);
85
122
  return dst;
86
123
  }
87
124
 
@@ -147,7 +184,7 @@ grpc_channel_args *grpc_channel_args_normalize(const grpc_channel_args *a) {
147
184
  return b;
148
185
  }
149
186
 
150
- void grpc_channel_args_destroy(grpc_channel_args *a) {
187
+ void grpc_channel_args_destroy(grpc_exec_ctx *exec_ctx, grpc_channel_args *a) {
151
188
  size_t i;
152
189
  if (!a) return;
153
190
  for (i = 0; i < a->num_args; i++) {
@@ -158,7 +195,8 @@ void grpc_channel_args_destroy(grpc_channel_args *a) {
158
195
  case GRPC_ARG_INTEGER:
159
196
  break;
160
197
  case GRPC_ARG_POINTER:
161
- a->args[i].value.pointer.vtable->destroy(a->args[i].value.pointer.p);
198
+ a->args[i].value.pointer.vtable->destroy(exec_ctx,
199
+ a->args[i].value.pointer.p);
162
200
  break;
163
201
  }
164
202
  gpr_free(a->args[i].key);
@@ -212,7 +250,8 @@ static int find_compression_algorithm_states_bitset(const grpc_channel_args *a,
212
250
  }
213
251
 
214
252
  grpc_channel_args *grpc_channel_args_compression_algorithm_set_state(
215
- grpc_channel_args **a, grpc_compression_algorithm algorithm, int state) {
253
+ grpc_exec_ctx *exec_ctx, grpc_channel_args **a,
254
+ grpc_compression_algorithm algorithm, int state) {
216
255
  int *states_arg = NULL;
217
256
  grpc_channel_args *result = *a;
218
257
  const int states_arg_found =
@@ -245,7 +284,7 @@ grpc_channel_args *grpc_channel_args_compression_algorithm_set_state(
245
284
  GPR_BITCLEAR((unsigned *)&tmp.value.integer, algorithm);
246
285
  }
247
286
  result = grpc_channel_args_copy_and_add(*a, &tmp, 1);
248
- grpc_channel_args_destroy(*a);
287
+ grpc_channel_args_destroy(exec_ctx, *a);
249
288
  *a = result;
250
289
  }
251
290
  return result;
@@ -261,6 +300,12 @@ uint32_t grpc_channel_args_compression_algorithm_get_states(
261
300
  }
262
301
  }
263
302
 
303
+ grpc_channel_args *grpc_channel_args_set_socket_mutator(
304
+ grpc_channel_args *a, grpc_socket_mutator *mutator) {
305
+ grpc_arg tmp = grpc_socket_mutator_to_arg(mutator);
306
+ return grpc_channel_args_copy_and_add(a, &tmp, 1);
307
+ }
308
+
264
309
  int grpc_channel_args_compare(const grpc_channel_args *a,
265
310
  const grpc_channel_args *b) {
266
311
  int c = GPR_ICMP(a->num_args, b->num_args);
@@ -272,6 +317,18 @@ int grpc_channel_args_compare(const grpc_channel_args *a,
272
317
  return 0;
273
318
  }
274
319
 
320
+ const grpc_arg *grpc_channel_args_find(const grpc_channel_args *args,
321
+ const char *name) {
322
+ if (args != NULL) {
323
+ for (size_t i = 0; i < args->num_args; ++i) {
324
+ if (strcmp(args->args[i].key, name) == 0) {
325
+ return &args->args[i];
326
+ }
327
+ }
328
+ }
329
+ return NULL;
330
+ }
331
+
275
332
  int grpc_channel_arg_get_integer(grpc_arg *arg, grpc_integer_options options) {
276
333
  if (arg->type != GRPC_ARG_INTEGER) {
277
334
  gpr_log(GPR_ERROR, "%s ignored: it must be an integer", arg->key);
@@ -36,6 +36,9 @@
36
36
 
37
37
  #include <grpc/compression.h>
38
38
  #include <grpc/grpc.h>
39
+ #include "src/core/lib/iomgr/socket_mutator.h"
40
+
41
+ // Channel args are intentionally immutable, to avoid the need for locking.
39
42
 
40
43
  /** Copy the arguments in \a src into a new instance */
41
44
  grpc_channel_args *grpc_channel_args_copy(const grpc_channel_args *src);
@@ -49,12 +52,23 @@ grpc_channel_args *grpc_channel_args_copy_and_add(const grpc_channel_args *src,
49
52
  const grpc_arg *to_add,
50
53
  size_t num_to_add);
51
54
 
55
+ /** Copies the arguments in \a src except for those whose keys are in
56
+ \a to_remove. */
57
+ grpc_channel_args *grpc_channel_args_copy_and_remove(
58
+ const grpc_channel_args *src, const char **to_remove, size_t num_to_remove);
59
+
60
+ /** Copies the arguments from \a src except for those whose keys are in
61
+ \a to_remove and appends the arguments in \a to_add. */
62
+ grpc_channel_args *grpc_channel_args_copy_and_add_and_remove(
63
+ const grpc_channel_args *src, const char **to_remove, size_t num_to_remove,
64
+ const grpc_arg *to_add, size_t num_to_add);
65
+
52
66
  /** Concatenate args from \a a and \a b into a new instance */
53
67
  grpc_channel_args *grpc_channel_args_merge(const grpc_channel_args *a,
54
68
  const grpc_channel_args *b);
55
69
 
56
70
  /** Destroy arguments created by \a grpc_channel_args_copy */
57
- void grpc_channel_args_destroy(grpc_channel_args *a);
71
+ void grpc_channel_args_destroy(grpc_exec_ctx *exec_ctx, grpc_channel_args *a);
58
72
 
59
73
  /** Returns the compression algorithm set in \a a. */
60
74
  grpc_compression_algorithm grpc_channel_args_get_compression_algorithm(
@@ -74,7 +88,8 @@ grpc_channel_args *grpc_channel_args_set_compression_algorithm(
74
88
  * modified to point to the returned instance (which may be different from the
75
89
  * input value of \a a). */
76
90
  grpc_channel_args *grpc_channel_args_compression_algorithm_set_state(
77
- grpc_channel_args **a, grpc_compression_algorithm algorithm, int enabled);
91
+ grpc_exec_ctx *exec_ctx, grpc_channel_args **a,
92
+ grpc_compression_algorithm algorithm, int enabled);
78
93
 
79
94
  /** Returns the bitset representing the support state (true for enabled, false
80
95
  * for disabled) for compression algorithms.
@@ -87,6 +102,17 @@ uint32_t grpc_channel_args_compression_algorithm_get_states(
87
102
  int grpc_channel_args_compare(const grpc_channel_args *a,
88
103
  const grpc_channel_args *b);
89
104
 
105
+ /** Returns a channel arg instance with socket mutator added. The socket mutator
106
+ * will perform its mutate_fd method on all file descriptors used by the
107
+ * channel.
108
+ * If \a a is non-MULL, its args are copied. */
109
+ grpc_channel_args *grpc_channel_args_set_socket_mutator(
110
+ grpc_channel_args *a, grpc_socket_mutator *mutator);
111
+
112
+ /** Returns the value of argument \a name from \a args, or NULL if not found. */
113
+ const grpc_arg *grpc_channel_args_find(const grpc_channel_args *args,
114
+ const char *name);
115
+
90
116
  typedef struct grpc_integer_options {
91
117
  int default_value; // Return this if value is outside of expected bounds.
92
118
  int min_value;
@@ -32,6 +32,7 @@
32
32
  */
33
33
 
34
34
  #include "src/core/lib/channel/channel_stack.h"
35
+ #include <grpc/support/alloc.h>
35
36
  #include <grpc/support/log.h>
36
37
 
37
38
  #include <stdlib.h>
@@ -101,13 +102,11 @@ grpc_call_element *grpc_call_stack_element(grpc_call_stack *call_stack,
101
102
  return CALL_ELEMS_FROM_STACK(call_stack) + index;
102
103
  }
103
104
 
104
- void grpc_channel_stack_init(grpc_exec_ctx *exec_ctx, int initial_refs,
105
- grpc_iomgr_cb_func destroy, void *destroy_arg,
106
- const grpc_channel_filter **filters,
107
- size_t filter_count,
108
- const grpc_channel_args *channel_args,
109
- grpc_transport *optional_transport,
110
- const char *name, grpc_channel_stack *stack) {
105
+ grpc_error *grpc_channel_stack_init(
106
+ grpc_exec_ctx *exec_ctx, int initial_refs, grpc_iomgr_cb_func destroy,
107
+ void *destroy_arg, const grpc_channel_filter **filters, size_t filter_count,
108
+ const grpc_channel_args *channel_args, grpc_transport *optional_transport,
109
+ const char *name, grpc_channel_stack *stack) {
111
110
  size_t call_size =
112
111
  ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call_stack)) +
113
112
  ROUND_UP_TO_ALIGNMENT_SIZE(filter_count * sizeof(grpc_call_element));
@@ -125,6 +124,7 @@ void grpc_channel_stack_init(grpc_exec_ctx *exec_ctx, int initial_refs,
125
124
  ROUND_UP_TO_ALIGNMENT_SIZE(filter_count * sizeof(grpc_channel_element));
126
125
 
127
126
  /* init per-filter data */
127
+ grpc_error *first_error = GRPC_ERROR_NONE;
128
128
  for (i = 0; i < filter_count; i++) {
129
129
  args.channel_stack = stack;
130
130
  args.channel_args = channel_args;
@@ -133,7 +133,15 @@ void grpc_channel_stack_init(grpc_exec_ctx *exec_ctx, int initial_refs,
133
133
  args.is_last = i == (filter_count - 1);
134
134
  elems[i].filter = filters[i];
135
135
  elems[i].channel_data = user_data;
136
- elems[i].filter->init_channel_elem(exec_ctx, &elems[i], &args);
136
+ grpc_error *error =
137
+ elems[i].filter->init_channel_elem(exec_ctx, &elems[i], &args);
138
+ if (error != GRPC_ERROR_NONE) {
139
+ if (first_error == GRPC_ERROR_NONE) {
140
+ first_error = error;
141
+ } else {
142
+ GRPC_ERROR_UNREF(error);
143
+ }
144
+ }
137
145
  user_data += ROUND_UP_TO_ALIGNMENT_SIZE(filters[i]->sizeof_channel_data);
138
146
  call_size += ROUND_UP_TO_ALIGNMENT_SIZE(filters[i]->sizeof_call_data);
139
147
  }
@@ -143,6 +151,7 @@ void grpc_channel_stack_init(grpc_exec_ctx *exec_ctx, int initial_refs,
143
151
  grpc_channel_stack_size(filters, filter_count));
144
152
 
145
153
  stack->call_stack_size = call_size;
154
+ return first_error;
146
155
  }
147
156
 
148
157
  void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
@@ -157,12 +166,12 @@ void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
157
166
  }
158
167
  }
159
168
 
160
- void grpc_call_stack_init(grpc_exec_ctx *exec_ctx,
161
- grpc_channel_stack *channel_stack, int initial_refs,
162
- grpc_iomgr_cb_func destroy, void *destroy_arg,
163
- grpc_call_context_element *context,
164
- const void *transport_server_data,
165
- grpc_call_stack *call_stack) {
169
+ grpc_error *grpc_call_stack_init(
170
+ grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack,
171
+ int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg,
172
+ grpc_call_context_element *context, const void *transport_server_data,
173
+ grpc_mdstr *path, gpr_timespec start_time, gpr_timespec deadline,
174
+ grpc_call_stack *call_stack) {
166
175
  grpc_channel_element *channel_elems = CHANNEL_ELEMS_FROM_STACK(channel_stack);
167
176
  grpc_call_element_args args;
168
177
  size_t count = channel_stack->count;
@@ -178,17 +187,30 @@ void grpc_call_stack_init(grpc_exec_ctx *exec_ctx,
178
187
  ROUND_UP_TO_ALIGNMENT_SIZE(count * sizeof(grpc_call_element));
179
188
 
180
189
  /* init per-filter data */
190
+ grpc_error *first_error = GRPC_ERROR_NONE;
191
+ args.start_time = start_time;
181
192
  for (i = 0; i < count; i++) {
182
193
  args.call_stack = call_stack;
183
194
  args.server_transport_data = transport_server_data;
184
195
  args.context = context;
196
+ args.path = path;
197
+ args.deadline = deadline;
185
198
  call_elems[i].filter = channel_elems[i].filter;
186
199
  call_elems[i].channel_data = channel_elems[i].channel_data;
187
200
  call_elems[i].call_data = user_data;
188
- call_elems[i].filter->init_call_elem(exec_ctx, &call_elems[i], &args);
201
+ grpc_error *error =
202
+ call_elems[i].filter->init_call_elem(exec_ctx, &call_elems[i], &args);
203
+ if (error != GRPC_ERROR_NONE) {
204
+ if (first_error == GRPC_ERROR_NONE) {
205
+ first_error = error;
206
+ } else {
207
+ GRPC_ERROR_UNREF(error);
208
+ }
209
+ }
189
210
  user_data +=
190
211
  ROUND_UP_TO_ALIGNMENT_SIZE(call_elems[i].filter->sizeof_call_data);
191
212
  }
213
+ return first_error;
192
214
  }
193
215
 
194
216
  void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
@@ -217,7 +239,7 @@ void grpc_call_stack_ignore_set_pollset_or_pollset_set(
217
239
  grpc_polling_entity *pollent) {}
218
240
 
219
241
  void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack,
220
- const grpc_call_stats *call_stats,
242
+ const grpc_call_final_info *final_info,
221
243
  void *and_free_memory) {
222
244
  grpc_call_element *elems = CALL_ELEMS_FROM_STACK(stack);
223
245
  size_t count = stack->count;
@@ -225,7 +247,7 @@ void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack,
225
247
 
226
248
  /* destroy per-filter data */
227
249
  for (i = 0; i < count; i++) {
228
- elems[i].filter->destroy_call_elem(exec_ctx, &elems[i], call_stats,
250
+ elems[i].filter->destroy_call_elem(exec_ctx, &elems[i], final_info,
229
251
  i == count - 1 ? and_free_memory : NULL);
230
252
  }
231
253
  }
@@ -242,6 +264,13 @@ char *grpc_call_next_get_peer(grpc_exec_ctx *exec_ctx,
242
264
  return next_elem->filter->get_peer(exec_ctx, next_elem);
243
265
  }
244
266
 
267
+ void grpc_channel_next_get_info(grpc_exec_ctx *exec_ctx,
268
+ grpc_channel_element *elem,
269
+ const grpc_channel_info *channel_info) {
270
+ grpc_channel_element *next_elem = elem + 1;
271
+ next_elem->filter->get_channel_info(exec_ctx, next_elem, channel_info);
272
+ }
273
+
245
274
  void grpc_channel_next_op(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem,
246
275
  grpc_transport_op *op) {
247
276
  grpc_channel_element *next_elem = elem + 1;
@@ -259,21 +288,41 @@ grpc_call_stack *grpc_call_stack_from_top_element(grpc_call_element *elem) {
259
288
  sizeof(grpc_call_stack)));
260
289
  }
261
290
 
291
+ static void destroy_op(grpc_exec_ctx *exec_ctx, void *op, grpc_error *error) {
292
+ gpr_free(op);
293
+ }
294
+
262
295
  void grpc_call_element_send_cancel(grpc_exec_ctx *exec_ctx,
263
- grpc_call_element *cur_elem) {
264
- grpc_transport_stream_op op;
265
- memset(&op, 0, sizeof(op));
266
- op.cancel_error = GRPC_ERROR_CANCELLED;
267
- grpc_call_next_op(exec_ctx, cur_elem, &op);
296
+ grpc_call_element *elem) {
297
+ grpc_transport_stream_op *op = gpr_malloc(sizeof(*op));
298
+ memset(op, 0, sizeof(*op));
299
+ op->cancel_error = GRPC_ERROR_CANCELLED;
300
+ op->on_complete =
301
+ grpc_closure_create(destroy_op, op, grpc_schedule_on_exec_ctx);
302
+ elem->filter->start_transport_stream_op(exec_ctx, elem, op);
268
303
  }
269
304
 
270
305
  void grpc_call_element_send_cancel_with_message(grpc_exec_ctx *exec_ctx,
271
- grpc_call_element *cur_elem,
306
+ grpc_call_element *elem,
272
307
  grpc_status_code status,
273
- gpr_slice *optional_message) {
274
- grpc_transport_stream_op op;
275
- memset(&op, 0, sizeof(op));
276
- grpc_transport_stream_op_add_cancellation_with_message(&op, status,
308
+ grpc_slice *optional_message) {
309
+ grpc_transport_stream_op *op = gpr_malloc(sizeof(*op));
310
+ memset(op, 0, sizeof(*op));
311
+ op->on_complete =
312
+ grpc_closure_create(destroy_op, op, grpc_schedule_on_exec_ctx);
313
+ grpc_transport_stream_op_add_cancellation_with_message(exec_ctx, op, status,
277
314
  optional_message);
278
- grpc_call_next_op(exec_ctx, cur_elem, &op);
315
+ elem->filter->start_transport_stream_op(exec_ctx, elem, op);
316
+ }
317
+
318
+ void grpc_call_element_send_close_with_message(grpc_exec_ctx *exec_ctx,
319
+ grpc_call_element *elem,
320
+ grpc_status_code status,
321
+ grpc_slice *optional_message) {
322
+ grpc_transport_stream_op *op = gpr_malloc(sizeof(*op));
323
+ memset(op, 0, sizeof(*op));
324
+ op->on_complete =
325
+ grpc_closure_create(destroy_op, op, grpc_schedule_on_exec_ctx);
326
+ grpc_transport_stream_op_add_close(exec_ctx, op, status, optional_message);
327
+ elem->filter->start_transport_stream_op(exec_ctx, elem, op);
279
328
  }
@@ -34,6 +34,13 @@
34
34
  #ifndef GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H
35
35
  #define GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H
36
36
 
37
+ //////////////////////////////////////////////////////////////////////////////
38
+ // IMPORTANT NOTE:
39
+ //
40
+ // When you update this API, please make the corresponding changes to
41
+ // the C++ API in src/cpp/common/channel_filter.{h,cc}
42
+ //////////////////////////////////////////////////////////////////////////////
43
+
37
44
  /* A channel filter defines how operations on a channel are implemented.
38
45
  Channel filters are chained together to create full channels, and if those
39
46
  chains are linear, then channel stacks provide a mechanism to minimize
@@ -51,6 +58,10 @@
51
58
  #include "src/core/lib/iomgr/polling_entity.h"
52
59
  #include "src/core/lib/transport/transport.h"
53
60
 
61
+ #ifdef __cplusplus
62
+ extern "C" {
63
+ #endif
64
+
54
65
  typedef struct grpc_channel_element grpc_channel_element;
55
66
  typedef struct grpc_call_element grpc_call_element;
56
67
 
@@ -70,14 +81,22 @@ typedef struct {
70
81
  grpc_call_stack *call_stack;
71
82
  const void *server_transport_data;
72
83
  grpc_call_context_element *context;
84
+ grpc_mdstr *path;
85
+ gpr_timespec start_time;
86
+ gpr_timespec deadline;
73
87
  } grpc_call_element_args;
74
88
 
75
89
  typedef struct {
76
90
  grpc_transport_stream_stats transport_stream_stats;
77
91
  gpr_timespec latency; /* From call creating to enqueing of received status */
78
- grpc_status_code final_status;
79
92
  } grpc_call_stats;
80
93
 
94
+ /** Information about the call upon completion. */
95
+ typedef struct {
96
+ grpc_call_stats stats;
97
+ grpc_status_code final_status;
98
+ } grpc_call_final_info;
99
+
81
100
  /* Channel filters specify:
82
101
  1. the amount of memory needed in the channel & call (via the sizeof_XXX
83
102
  members)
@@ -110,8 +129,9 @@ typedef struct {
110
129
  on a client; if it is non-NULL, then it points to memory owned by the
111
130
  transport and is on the server. Most filters want to ignore this
112
131
  argument. */
113
- void (*init_call_elem)(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
114
- grpc_call_element_args *args);
132
+ grpc_error *(*init_call_elem)(grpc_exec_ctx *exec_ctx,
133
+ grpc_call_element *elem,
134
+ grpc_call_element_args *args);
115
135
  void (*set_pollset_or_pollset_set)(grpc_exec_ctx *exec_ctx,
116
136
  grpc_call_element *elem,
117
137
  grpc_polling_entity *pollent);
@@ -119,21 +139,23 @@ typedef struct {
119
139
  The filter does not need to do any chaining.
120
140
  The bottom filter of a stack will be passed a non-NULL pointer to
121
141
  \a and_free_memory that should be passed to gpr_free when destruction
122
- is complete. */
142
+ is complete. \a final_info contains data about the completed call, mainly
143
+ for reporting purposes. */
123
144
  void (*destroy_call_elem)(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
124
- const grpc_call_stats *stats,
145
+ const grpc_call_final_info *final_info,
125
146
  void *and_free_memory);
126
147
 
127
148
  /* sizeof(per channel data) */
128
149
  size_t sizeof_channel_data;
129
150
  /* Initialize per-channel data.
130
- elem is initialized at the start of the call, and elem->channel_data is
131
- what needs initializing.
151
+ elem is initialized at the creating of the channel, and elem->channel_data
152
+ is what needs initializing.
132
153
  is_first, is_last designate this elements position in the stack, and are
133
154
  useful for asserting correct configuration by upper layer code.
134
155
  The filter does not need to do any chaining */
135
- void (*init_channel_elem)(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem,
136
- grpc_channel_element_args *args);
156
+ grpc_error *(*init_channel_elem)(grpc_exec_ctx *exec_ctx,
157
+ grpc_channel_element *elem,
158
+ grpc_channel_element_args *args);
137
159
  /* Destroy per channel data.
138
160
  The filter does not need to do any chaining */
139
161
  void (*destroy_channel_elem)(grpc_exec_ctx *exec_ctx,
@@ -142,6 +164,10 @@ typedef struct {
142
164
  /* Implement grpc_call_get_peer() */
143
165
  char *(*get_peer)(grpc_exec_ctx *exec_ctx, grpc_call_element *elem);
144
166
 
167
+ /* Implement grpc_channel_get_info() */
168
+ void (*get_channel_info)(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem,
169
+ const grpc_channel_info *channel_info);
170
+
145
171
  /* The name of this filter */
146
172
  const char *name;
147
173
  } grpc_channel_filter;
@@ -196,12 +222,11 @@ grpc_call_element *grpc_call_stack_element(grpc_call_stack *stack, size_t i);
196
222
  size_t grpc_channel_stack_size(const grpc_channel_filter **filters,
197
223
  size_t filter_count);
198
224
  /* Initialize a channel stack given some filters */
199
- void grpc_channel_stack_init(grpc_exec_ctx *exec_ctx, int initial_refs,
200
- grpc_iomgr_cb_func destroy, void *destroy_arg,
201
- const grpc_channel_filter **filters,
202
- size_t filter_count, const grpc_channel_args *args,
203
- grpc_transport *optional_transport,
204
- const char *name, grpc_channel_stack *stack);
225
+ grpc_error *grpc_channel_stack_init(
226
+ grpc_exec_ctx *exec_ctx, int initial_refs, grpc_iomgr_cb_func destroy,
227
+ void *destroy_arg, const grpc_channel_filter **filters, size_t filter_count,
228
+ const grpc_channel_args *args, grpc_transport *optional_transport,
229
+ const char *name, grpc_channel_stack *stack);
205
230
  /* Destroy a channel stack */
206
231
  void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
207
232
  grpc_channel_stack *stack);
@@ -209,12 +234,12 @@ void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
209
234
  /* Initialize a call stack given a channel stack. transport_server_data is
210
235
  expected to be NULL on a client, or an opaque transport owned pointer on the
211
236
  server. */
212
- void grpc_call_stack_init(grpc_exec_ctx *exec_ctx,
213
- grpc_channel_stack *channel_stack, int initial_refs,
214
- grpc_iomgr_cb_func destroy, void *destroy_arg,
215
- grpc_call_context_element *context,
216
- const void *transport_server_data,
217
- grpc_call_stack *call_stack);
237
+ grpc_error *grpc_call_stack_init(
238
+ grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack,
239
+ int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg,
240
+ grpc_call_context_element *context, const void *transport_server_data,
241
+ grpc_mdstr *path, gpr_timespec start_time, gpr_timespec deadline,
242
+ grpc_call_stack *call_stack);
218
243
  /* Set a pollset or a pollset_set for a call stack: must occur before the first
219
244
  * op is started */
220
245
  void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
@@ -243,7 +268,7 @@ void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
243
268
 
244
269
  /* Destroy a call stack */
245
270
  void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack,
246
- const grpc_call_stats *call_stats,
271
+ const grpc_call_final_info *final_info,
247
272
  void *and_free_memory);
248
273
 
249
274
  /* Ignore set pollset{_set} - used by filters if they don't care about pollsets
@@ -260,6 +285,10 @@ void grpc_channel_next_op(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem,
260
285
  grpc_transport_op *op);
261
286
  /* Pass through a request to get_peer to the next child element */
262
287
  char *grpc_call_next_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem);
288
+ /* Pass through a request to get_channel_info() to the next child element */
289
+ void grpc_channel_next_get_info(grpc_exec_ctx *exec_ctx,
290
+ grpc_channel_element *elem,
291
+ const grpc_channel_info *channel_info);
263
292
 
264
293
  /* Given the top element of a channel stack, get the channel stack itself */
265
294
  grpc_channel_stack *grpc_channel_stack_from_top_element(
@@ -276,11 +305,20 @@ void grpc_call_element_send_cancel(grpc_exec_ctx *exec_ctx,
276
305
  void grpc_call_element_send_cancel_with_message(grpc_exec_ctx *exec_ctx,
277
306
  grpc_call_element *cur_elem,
278
307
  grpc_status_code status,
279
- gpr_slice *optional_message);
308
+ grpc_slice *optional_message);
309
+
310
+ void grpc_call_element_send_close_with_message(grpc_exec_ctx *exec_ctx,
311
+ grpc_call_element *cur_elem,
312
+ grpc_status_code status,
313
+ grpc_slice *optional_message);
280
314
 
281
315
  extern int grpc_trace_channel;
282
316
 
283
317
  #define GRPC_CALL_LOG_OP(sev, elem, op) \
284
318
  if (grpc_trace_channel) grpc_call_log_op(sev, elem, op)
285
319
 
320
+ #ifdef __cplusplus
321
+ }
322
+ #endif
323
+
286
324
  #endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H */