grpc 1.0.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -31,7 +31,7 @@
31
31
  *
32
32
  */
33
33
 
34
- #include "src/core/ext/transport/chttp2/transport/timeout_encoding.h"
34
+ #include "src/core/lib/transport/timeout_encoding.h"
35
35
 
36
36
  #include <stdio.h>
37
37
  #include <string.h>
@@ -117,7 +117,7 @@ static void enc_micros(char *buffer, int64_t x) {
117
117
  }
118
118
  }
119
119
 
120
- void grpc_chttp2_encode_timeout(gpr_timespec timeout, char *buffer) {
120
+ void grpc_http2_encode_timeout(gpr_timespec timeout, char *buffer) {
121
121
  if (timeout.tv_sec < 0) {
122
122
  enc_tiny(buffer);
123
123
  } else if (timeout.tv_sec == 0) {
@@ -136,7 +136,7 @@ static int is_all_whitespace(const char *p) {
136
136
  return *p == 0;
137
137
  }
138
138
 
139
- int grpc_chttp2_decode_timeout(const char *buffer, gpr_timespec *timeout) {
139
+ int grpc_http2_decode_timeout(const char *buffer, gpr_timespec *timeout) {
140
140
  int32_t x = 0;
141
141
  const uint8_t *p = (const uint8_t *)buffer;
142
142
  int have_digit = 0;
@@ -31,17 +31,17 @@
31
31
  *
32
32
  */
33
33
 
34
- #ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TIMEOUT_ENCODING_H
35
- #define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TIMEOUT_ENCODING_H
34
+ #ifndef GRPC_CORE_LIB_TRANSPORT_TIMEOUT_ENCODING_H
35
+ #define GRPC_CORE_LIB_TRANSPORT_TIMEOUT_ENCODING_H
36
36
 
37
37
  #include <grpc/support/time.h>
38
38
  #include "src/core/lib/support/string.h"
39
39
 
40
- #define GRPC_CHTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE (GPR_LTOA_MIN_BUFSIZE + 1)
40
+ #define GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE (GPR_LTOA_MIN_BUFSIZE + 1)
41
41
 
42
- /* Encode/decode timeouts to the GRPC over HTTP2 format;
42
+ /* Encode/decode timeouts to the GRPC over HTTP/2 format;
43
43
  encoding may round up arbitrarily */
44
- void grpc_chttp2_encode_timeout(gpr_timespec timeout, char *buffer);
45
- int grpc_chttp2_decode_timeout(const char *buffer, gpr_timespec *timeout);
44
+ void grpc_http2_encode_timeout(gpr_timespec timeout, char *buffer);
45
+ int grpc_http2_decode_timeout(const char *buffer, gpr_timespec *timeout);
46
46
 
47
- #endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_TIMEOUT_ENCODING_H */
47
+ #endif /* GRPC_CORE_LIB_TRANSPORT_TIMEOUT_ENCODING_H */
@@ -32,18 +32,25 @@
32
32
  */
33
33
 
34
34
  #include "src/core/lib/transport/transport.h"
35
+
36
+ #include <string.h>
37
+
35
38
  #include <grpc/support/alloc.h>
36
39
  #include <grpc/support/atm.h>
37
40
  #include <grpc/support/log.h>
38
41
  #include <grpc/support/sync.h>
42
+
43
+ #include "src/core/lib/slice/slice_internal.h"
44
+ #include "src/core/lib/slice/slice_string_helpers.h"
39
45
  #include "src/core/lib/support/string.h"
40
46
  #include "src/core/lib/transport/transport_impl.h"
41
47
 
42
48
  #ifdef GRPC_STREAM_REFCOUNT_DEBUG
43
49
  void grpc_stream_ref(grpc_stream_refcount *refcount, const char *reason) {
44
50
  gpr_atm val = gpr_atm_no_barrier_load(&refcount->refs.count);
45
- gpr_log(GPR_DEBUG, "%s %p:%p REF %d->%d %s", refcount->object_type,
46
- refcount, refcount->destroy.cb_arg, val, val + 1, reason);
51
+ gpr_log(GPR_DEBUG, "%s %p:%p REF %" PRIdPTR "->%" PRIdPTR " %s",
52
+ refcount->object_type, refcount, refcount->destroy.cb_arg, val,
53
+ val + 1, reason);
47
54
  #else
48
55
  void grpc_stream_ref(grpc_stream_refcount *refcount) {
49
56
  #endif
@@ -54,14 +61,15 @@ void grpc_stream_ref(grpc_stream_refcount *refcount) {
54
61
  void grpc_stream_unref(grpc_exec_ctx *exec_ctx, grpc_stream_refcount *refcount,
55
62
  const char *reason) {
56
63
  gpr_atm val = gpr_atm_no_barrier_load(&refcount->refs.count);
57
- gpr_log(GPR_DEBUG, "%s %p:%p UNREF %d->%d %s", refcount->object_type,
58
- refcount, refcount->destroy.cb_arg, val, val - 1, reason);
64
+ gpr_log(GPR_DEBUG, "%s %p:%p UNREF %" PRIdPTR "->%" PRIdPTR " %s",
65
+ refcount->object_type, refcount, refcount->destroy.cb_arg, val,
66
+ val - 1, reason);
59
67
  #else
60
68
  void grpc_stream_unref(grpc_exec_ctx *exec_ctx,
61
69
  grpc_stream_refcount *refcount) {
62
70
  #endif
63
71
  if (gpr_unref(&refcount->refs)) {
64
- grpc_exec_ctx_sched(exec_ctx, &refcount->destroy, GRPC_ERROR_NONE, NULL);
72
+ grpc_closure_sched(exec_ctx, &refcount->destroy, GRPC_ERROR_NONE);
65
73
  }
66
74
  }
67
75
 
@@ -75,7 +83,7 @@ void grpc_stream_ref_init(grpc_stream_refcount *refcount, int initial_refs,
75
83
  grpc_iomgr_cb_func cb, void *cb_arg) {
76
84
  #endif
77
85
  gpr_ref_init(&refcount->refs, initial_refs);
78
- grpc_closure_init(&refcount->destroy, cb, cb_arg);
86
+ grpc_closure_init(&refcount->destroy, cb, cb_arg, grpc_schedule_on_exec_ctx);
79
87
  }
80
88
 
81
89
  static void move64(uint64_t *from, uint64_t *to) {
@@ -153,14 +161,18 @@ char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx,
153
161
  return transport->vtable->get_peer(exec_ctx, transport);
154
162
  }
155
163
 
164
+ grpc_endpoint *grpc_transport_get_endpoint(grpc_exec_ctx *exec_ctx,
165
+ grpc_transport *transport) {
166
+ return transport->vtable->get_endpoint(exec_ctx, transport);
167
+ }
168
+
156
169
  void grpc_transport_stream_op_finish_with_failure(grpc_exec_ctx *exec_ctx,
157
170
  grpc_transport_stream_op *op,
158
171
  grpc_error *error) {
159
- grpc_exec_ctx_sched(exec_ctx, op->recv_message_ready, GRPC_ERROR_REF(error),
160
- NULL);
161
- grpc_exec_ctx_sched(exec_ctx, op->recv_initial_metadata_ready,
162
- GRPC_ERROR_REF(error), NULL);
163
- grpc_exec_ctx_sched(exec_ctx, op->on_complete, error, NULL);
172
+ grpc_closure_sched(exec_ctx, op->recv_message_ready, GRPC_ERROR_REF(error));
173
+ grpc_closure_sched(exec_ctx, op->recv_initial_metadata_ready,
174
+ GRPC_ERROR_REF(error));
175
+ grpc_closure_sched(exec_ctx, op->on_complete, error);
164
176
  }
165
177
 
166
178
  typedef struct {
@@ -184,7 +196,8 @@ static void add_error(grpc_transport_stream_op *op, grpc_error **which,
184
196
  cmd = gpr_malloc(sizeof(*cmd));
185
197
  cmd->error = error;
186
198
  cmd->then_call = op->on_complete;
187
- grpc_closure_init(&cmd->closure, free_message, cmd);
199
+ grpc_closure_init(&cmd->closure, free_message, cmd,
200
+ grpc_schedule_on_exec_ctx);
188
201
  op->on_complete = &cmd->closure;
189
202
  *which = error;
190
203
  }
@@ -200,50 +213,98 @@ void grpc_transport_stream_op_add_cancellation(grpc_transport_stream_op *op,
200
213
  }
201
214
 
202
215
  void grpc_transport_stream_op_add_cancellation_with_message(
203
- grpc_transport_stream_op *op, grpc_status_code status,
204
- gpr_slice *optional_message) {
216
+ grpc_exec_ctx *exec_ctx, grpc_transport_stream_op *op,
217
+ grpc_status_code status, grpc_slice *optional_message) {
205
218
  GPR_ASSERT(status != GRPC_STATUS_OK);
206
219
  if (op->cancel_error != GRPC_ERROR_NONE) {
207
220
  if (optional_message) {
208
- gpr_slice_unref(*optional_message);
221
+ grpc_slice_unref_internal(exec_ctx, *optional_message);
209
222
  }
210
223
  return;
211
224
  }
212
225
  grpc_error *error;
213
226
  if (optional_message != NULL) {
214
- char *msg = gpr_dump_slice(*optional_message, GPR_DUMP_ASCII);
227
+ char *msg = grpc_dump_slice(*optional_message, GPR_DUMP_ASCII);
215
228
  error = grpc_error_set_str(GRPC_ERROR_CREATE(msg),
216
229
  GRPC_ERROR_STR_GRPC_MESSAGE, msg);
217
230
  gpr_free(msg);
218
- gpr_slice_unref(*optional_message);
231
+ grpc_slice_unref_internal(exec_ctx, *optional_message);
219
232
  } else {
220
233
  error = GRPC_ERROR_CREATE("Call cancelled");
221
234
  }
222
235
  error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS, status);
223
- add_error(op, &op->close_error, error);
236
+ add_error(op, &op->cancel_error, error);
224
237
  }
225
238
 
226
- void grpc_transport_stream_op_add_close(grpc_transport_stream_op *op,
239
+ void grpc_transport_stream_op_add_close(grpc_exec_ctx *exec_ctx,
240
+ grpc_transport_stream_op *op,
227
241
  grpc_status_code status,
228
- gpr_slice *optional_message) {
242
+ grpc_slice *optional_message) {
229
243
  GPR_ASSERT(status != GRPC_STATUS_OK);
230
244
  if (op->cancel_error != GRPC_ERROR_NONE ||
231
245
  op->close_error != GRPC_ERROR_NONE) {
232
246
  if (optional_message) {
233
- gpr_slice_unref(*optional_message);
247
+ grpc_slice_unref_internal(exec_ctx, *optional_message);
234
248
  }
235
249
  return;
236
250
  }
237
251
  grpc_error *error;
238
252
  if (optional_message != NULL) {
239
- char *msg = gpr_dump_slice(*optional_message, GPR_DUMP_ASCII);
253
+ char *msg = grpc_dump_slice(*optional_message, GPR_DUMP_ASCII);
240
254
  error = grpc_error_set_str(GRPC_ERROR_CREATE(msg),
241
255
  GRPC_ERROR_STR_GRPC_MESSAGE, msg);
242
256
  gpr_free(msg);
243
- gpr_slice_unref(*optional_message);
257
+ grpc_slice_unref_internal(exec_ctx, *optional_message);
244
258
  } else {
245
259
  error = GRPC_ERROR_CREATE("Call force closed");
246
260
  }
247
261
  error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS, status);
248
262
  add_error(op, &op->close_error, error);
249
263
  }
264
+
265
+ typedef struct {
266
+ grpc_closure outer_on_complete;
267
+ grpc_closure *inner_on_complete;
268
+ grpc_transport_op op;
269
+ } made_transport_op;
270
+
271
+ static void destroy_made_transport_op(grpc_exec_ctx *exec_ctx, void *arg,
272
+ grpc_error *error) {
273
+ made_transport_op *op = arg;
274
+ grpc_closure_sched(exec_ctx, op->inner_on_complete, GRPC_ERROR_REF(error));
275
+ gpr_free(op);
276
+ }
277
+
278
+ grpc_transport_op *grpc_make_transport_op(grpc_closure *on_complete) {
279
+ made_transport_op *op = gpr_malloc(sizeof(*op));
280
+ grpc_closure_init(&op->outer_on_complete, destroy_made_transport_op, op,
281
+ grpc_schedule_on_exec_ctx);
282
+ op->inner_on_complete = on_complete;
283
+ memset(&op->op, 0, sizeof(op->op));
284
+ op->op.on_consumed = &op->outer_on_complete;
285
+ return &op->op;
286
+ }
287
+
288
+ typedef struct {
289
+ grpc_closure outer_on_complete;
290
+ grpc_closure *inner_on_complete;
291
+ grpc_transport_stream_op op;
292
+ } made_transport_stream_op;
293
+
294
+ static void destroy_made_transport_stream_op(grpc_exec_ctx *exec_ctx, void *arg,
295
+ grpc_error *error) {
296
+ made_transport_stream_op *op = arg;
297
+ grpc_closure_sched(exec_ctx, op->inner_on_complete, GRPC_ERROR_REF(error));
298
+ gpr_free(op);
299
+ }
300
+
301
+ grpc_transport_stream_op *grpc_make_transport_stream_op(
302
+ grpc_closure *on_complete) {
303
+ made_transport_stream_op *op = gpr_malloc(sizeof(*op));
304
+ grpc_closure_init(&op->outer_on_complete, destroy_made_transport_stream_op,
305
+ op, grpc_schedule_on_exec_ctx);
306
+ op->inner_on_complete = on_complete;
307
+ memset(&op->op, 0, sizeof(op->op));
308
+ op->op.on_complete = &op->outer_on_complete;
309
+ return &op->op;
310
+ }
@@ -37,12 +37,17 @@
37
37
  #include <stddef.h>
38
38
 
39
39
  #include "src/core/lib/channel/context.h"
40
+ #include "src/core/lib/iomgr/endpoint.h"
40
41
  #include "src/core/lib/iomgr/polling_entity.h"
41
42
  #include "src/core/lib/iomgr/pollset.h"
42
43
  #include "src/core/lib/iomgr/pollset_set.h"
43
44
  #include "src/core/lib/transport/byte_stream.h"
44
45
  #include "src/core/lib/transport/metadata_batch.h"
45
46
 
47
+ #ifdef __cplusplus
48
+ extern "C" {
49
+ #endif
50
+
46
51
  /* forward declarations */
47
52
  typedef struct grpc_transport grpc_transport;
48
53
 
@@ -96,6 +101,11 @@ void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats *from,
96
101
  void grpc_transport_move_stats(grpc_transport_stream_stats *from,
97
102
  grpc_transport_stream_stats *to);
98
103
 
104
+ typedef struct {
105
+ grpc_closure closure;
106
+ void *args[2];
107
+ } grpc_transport_private_op_data;
108
+
99
109
  /* Transport stream op: a set of operations to perform on a transport
100
110
  against a single stream */
101
111
  typedef struct grpc_transport_stream_op {
@@ -104,6 +114,10 @@ typedef struct grpc_transport_stream_op {
104
114
  have been completed. */
105
115
  grpc_closure *on_complete;
106
116
 
117
+ /** Is the completion of this op covered by a poller (if false: the op should
118
+ complete independently of some pollset being polled) */
119
+ bool covered_by_poller;
120
+
107
121
  /** Send initial metadata to the peer, from the provided metadata batch.
108
122
  idempotent_request MUST be set if this is non-null */
109
123
  grpc_metadata_batch *send_initial_metadata;
@@ -120,6 +134,7 @@ typedef struct grpc_transport_stream_op {
120
134
  /** Receive initial metadata from the stream, into provided metadata batch. */
121
135
  grpc_metadata_batch *recv_initial_metadata;
122
136
  bool *recv_idempotent_request;
137
+ bool *recv_cacheable_request;
123
138
  /** Should be enqueued when initial metadata is ready to be processed. */
124
139
  grpc_closure *recv_initial_metadata_ready;
125
140
 
@@ -138,12 +153,18 @@ typedef struct grpc_transport_stream_op {
138
153
  /** If != GRPC_ERROR_NONE, cancel this stream */
139
154
  grpc_error *cancel_error;
140
155
 
141
- /** If != GRPC_ERROR, send grpc-status, grpc-message, and close this
156
+ /** If != GRPC_ERROR_NONE, send grpc-status, grpc-message, and close this
142
157
  stream for both reading and writing */
143
158
  grpc_error *close_error;
144
159
 
145
160
  /* Indexes correspond to grpc_context_index enum values */
146
161
  grpc_call_context_element *context;
162
+
163
+ /***************************************************************************
164
+ * remaining fields are initialized and used at the discretion of the
165
+ * transport implementation */
166
+
167
+ grpc_transport_private_op_data transport_private;
147
168
  } grpc_transport_stream_op;
148
169
 
149
170
  /** Transport op: a set of operations to perform on a transport as a whole */
@@ -158,10 +179,10 @@ typedef struct grpc_transport_op {
158
179
  /** should we send a goaway?
159
180
  after a goaway is sent, once there are no more active calls on
160
181
  the transport, the transport should disconnect */
161
- int send_goaway;
182
+ bool send_goaway;
162
183
  /** what should the goaway contain? */
163
184
  grpc_status_code goaway_status;
164
- gpr_slice *goaway_message;
185
+ grpc_slice *goaway_message;
165
186
  /** set the callback for accepting new streams;
166
187
  this is a permanent callback, unlike the other one-shot closures.
167
188
  If true, the callback is set to set_accept_stream_fn, with its
@@ -177,6 +198,12 @@ typedef struct grpc_transport_op {
177
198
  grpc_pollset_set *bind_pollset_set;
178
199
  /** send a ping, call this back if not NULL */
179
200
  grpc_closure *send_ping;
201
+
202
+ /***************************************************************************
203
+ * remaining fields are initialized and used at the discretion of the
204
+ * transport implementation */
205
+
206
+ grpc_transport_private_op_data transport_private;
180
207
  } grpc_transport_op;
181
208
 
182
209
  /* Returns the amount of memory required to store a grpc_stream for this
@@ -222,14 +249,16 @@ void grpc_transport_stream_op_add_cancellation(grpc_transport_stream_op *op,
222
249
  grpc_status_code status);
223
250
 
224
251
  void grpc_transport_stream_op_add_cancellation_with_message(
225
- grpc_transport_stream_op *op, grpc_status_code status,
226
- gpr_slice *optional_message);
252
+ grpc_exec_ctx *exec_ctx, grpc_transport_stream_op *op,
253
+ grpc_status_code status, grpc_slice *optional_message);
227
254
 
228
- void grpc_transport_stream_op_add_close(grpc_transport_stream_op *op,
255
+ void grpc_transport_stream_op_add_close(grpc_exec_ctx *exec_ctx,
256
+ grpc_transport_stream_op *op,
229
257
  grpc_status_code status,
230
- gpr_slice *optional_message);
258
+ grpc_slice *optional_message);
231
259
 
232
260
  char *grpc_transport_stream_op_string(grpc_transport_stream_op *op);
261
+ char *grpc_transport_op_string(grpc_transport_op *op);
233
262
 
234
263
  /* Send a batch of operations on a transport
235
264
 
@@ -256,7 +285,7 @@ void grpc_transport_ping(grpc_transport *transport, grpc_closure *cb);
256
285
 
257
286
  /* Advise peer of pending connection termination. */
258
287
  void grpc_transport_goaway(grpc_transport *transport, grpc_status_code status,
259
- gpr_slice debug_data);
288
+ grpc_slice debug_data);
260
289
 
261
290
  /* Close a transport. Aborts all open streams. */
262
291
  void grpc_transport_close(grpc_transport *transport);
@@ -268,4 +297,20 @@ void grpc_transport_destroy(grpc_exec_ctx *exec_ctx, grpc_transport *transport);
268
297
  char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx,
269
298
  grpc_transport *transport);
270
299
 
300
+ /* Get the endpoint used by \a transport */
301
+ grpc_endpoint *grpc_transport_get_endpoint(grpc_exec_ctx *exec_ctx,
302
+ grpc_transport *transport);
303
+
304
+ /* Allocate a grpc_transport_op, and preconfigure the on_consumed closure to
305
+ \a on_consumed and then delete the returned transport op */
306
+ grpc_transport_op *grpc_make_transport_op(grpc_closure *on_consumed);
307
+ /* Allocate a grpc_transport_stream_op, and preconfigure the on_consumed closure
308
+ to \a on_consumed and then delete the returned transport op */
309
+ grpc_transport_stream_op *grpc_make_transport_stream_op(
310
+ grpc_closure *on_consumed);
311
+
312
+ #ifdef __cplusplus
313
+ }
314
+ #endif
315
+
271
316
  #endif /* GRPC_CORE_LIB_TRANSPORT_TRANSPORT_H */
@@ -74,6 +74,9 @@ typedef struct grpc_transport_vtable {
74
74
 
75
75
  /* implementation of grpc_transport_get_peer */
76
76
  char *(*get_peer)(grpc_exec_ctx *exec_ctx, grpc_transport *self);
77
+
78
+ /* implementation of grpc_transport_get_endpoint */
79
+ grpc_endpoint *(*get_endpoint)(grpc_exec_ctx *exec_ctx, grpc_transport *self);
77
80
  } grpc_transport_vtable;
78
81
 
79
82
  /* an instance of a grpc transport */
@@ -40,19 +40,21 @@
40
40
  #include <grpc/support/alloc.h>
41
41
  #include <grpc/support/string_util.h>
42
42
  #include <grpc/support/useful.h>
43
+ #include "src/core/lib/slice/slice_string_helpers.h"
43
44
  #include "src/core/lib/support/string.h"
45
+ #include "src/core/lib/transport/connectivity_state.h"
44
46
 
45
47
  /* These routines are here to facilitate debugging - they produce string
46
48
  representations of various transport data structures */
47
49
 
48
50
  static void put_metadata(gpr_strvec *b, grpc_mdelem *md) {
49
51
  gpr_strvec_add(b, gpr_strdup("key="));
50
- gpr_strvec_add(b,
51
- gpr_dump_slice(md->key->slice, GPR_DUMP_HEX | GPR_DUMP_ASCII));
52
+ gpr_strvec_add(
53
+ b, grpc_dump_slice(md->key->slice, GPR_DUMP_HEX | GPR_DUMP_ASCII));
52
54
 
53
55
  gpr_strvec_add(b, gpr_strdup(" value="));
54
56
  gpr_strvec_add(
55
- b, gpr_dump_slice(md->value->slice, GPR_DUMP_HEX | GPR_DUMP_ASCII));
57
+ b, grpc_dump_slice(md->value->slice, GPR_DUMP_HEX | GPR_DUMP_ASCII));
56
58
  }
57
59
 
58
60
  static void put_metadata_list(gpr_strvec *b, grpc_metadata_batch md) {
@@ -72,56 +74,51 @@ static void put_metadata_list(gpr_strvec *b, grpc_metadata_batch md) {
72
74
  char *grpc_transport_stream_op_string(grpc_transport_stream_op *op) {
73
75
  char *tmp;
74
76
  char *out;
75
- int first = 1;
76
77
 
77
78
  gpr_strvec b;
78
79
  gpr_strvec_init(&b);
79
80
 
81
+ gpr_strvec_add(
82
+ &b, gpr_strdup(op->covered_by_poller ? "[COVERED]" : "[UNCOVERED]"));
83
+
80
84
  if (op->send_initial_metadata != NULL) {
81
- if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
82
- first = 0;
85
+ gpr_strvec_add(&b, gpr_strdup(" "));
83
86
  gpr_strvec_add(&b, gpr_strdup("SEND_INITIAL_METADATA{"));
84
87
  put_metadata_list(&b, *op->send_initial_metadata);
85
88
  gpr_strvec_add(&b, gpr_strdup("}"));
86
89
  }
87
90
 
88
91
  if (op->send_message != NULL) {
89
- if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
90
- first = 0;
92
+ gpr_strvec_add(&b, gpr_strdup(" "));
91
93
  gpr_asprintf(&tmp, "SEND_MESSAGE:flags=0x%08x:len=%d",
92
94
  op->send_message->flags, op->send_message->length);
93
95
  gpr_strvec_add(&b, tmp);
94
96
  }
95
97
 
96
98
  if (op->send_trailing_metadata != NULL) {
97
- if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
98
- first = 0;
99
+ gpr_strvec_add(&b, gpr_strdup(" "));
99
100
  gpr_strvec_add(&b, gpr_strdup("SEND_TRAILING_METADATA{"));
100
101
  put_metadata_list(&b, *op->send_trailing_metadata);
101
102
  gpr_strvec_add(&b, gpr_strdup("}"));
102
103
  }
103
104
 
104
105
  if (op->recv_initial_metadata != NULL) {
105
- if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
106
- first = 0;
106
+ gpr_strvec_add(&b, gpr_strdup(" "));
107
107
  gpr_strvec_add(&b, gpr_strdup("RECV_INITIAL_METADATA"));
108
108
  }
109
109
 
110
110
  if (op->recv_message != NULL) {
111
- if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
112
- first = 0;
111
+ gpr_strvec_add(&b, gpr_strdup(" "));
113
112
  gpr_strvec_add(&b, gpr_strdup("RECV_MESSAGE"));
114
113
  }
115
114
 
116
115
  if (op->recv_trailing_metadata != NULL) {
117
- if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
118
- first = 0;
116
+ gpr_strvec_add(&b, gpr_strdup(" "));
119
117
  gpr_strvec_add(&b, gpr_strdup("RECV_TRAILING_METADATA"));
120
118
  }
121
119
 
122
120
  if (op->cancel_error != GRPC_ERROR_NONE) {
123
- if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
124
- first = 0;
121
+ gpr_strvec_add(&b, gpr_strdup(" "));
125
122
  const char *msg = grpc_error_string(op->cancel_error);
126
123
  gpr_asprintf(&tmp, "CANCEL:%s", msg);
127
124
  grpc_error_free_string(msg);
@@ -129,8 +126,7 @@ char *grpc_transport_stream_op_string(grpc_transport_stream_op *op) {
129
126
  }
130
127
 
131
128
  if (op->close_error != GRPC_ERROR_NONE) {
132
- if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
133
- first = 0;
129
+ gpr_strvec_add(&b, gpr_strdup(" "));
134
130
  const char *msg = grpc_error_string(op->close_error);
135
131
  gpr_asprintf(&tmp, "CLOSE:%s", msg);
136
132
  grpc_error_free_string(msg);
@@ -143,6 +139,82 @@ char *grpc_transport_stream_op_string(grpc_transport_stream_op *op) {
143
139
  return out;
144
140
  }
145
141
 
142
+ char *grpc_transport_op_string(grpc_transport_op *op) {
143
+ char *tmp;
144
+ char *out;
145
+ bool first = true;
146
+
147
+ gpr_strvec b;
148
+ gpr_strvec_init(&b);
149
+
150
+ if (op->on_connectivity_state_change != NULL) {
151
+ if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
152
+ first = false;
153
+ if (op->connectivity_state != NULL) {
154
+ gpr_asprintf(&tmp, "ON_CONNECTIVITY_STATE_CHANGE:p=%p:from=%s",
155
+ op->on_connectivity_state_change,
156
+ grpc_connectivity_state_name(*op->connectivity_state));
157
+ gpr_strvec_add(&b, tmp);
158
+ } else {
159
+ gpr_asprintf(&tmp, "ON_CONNECTIVITY_STATE_CHANGE:p=%p:unsubscribe",
160
+ op->on_connectivity_state_change);
161
+ gpr_strvec_add(&b, tmp);
162
+ }
163
+ }
164
+
165
+ if (op->disconnect_with_error != GRPC_ERROR_NONE) {
166
+ if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
167
+ first = false;
168
+ const char *err = grpc_error_string(op->disconnect_with_error);
169
+ gpr_asprintf(&tmp, "DISCONNECT:%s", err);
170
+ gpr_strvec_add(&b, tmp);
171
+ grpc_error_free_string(err);
172
+ }
173
+
174
+ if (op->send_goaway) {
175
+ if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
176
+ first = false;
177
+ char *msg = op->goaway_message == NULL
178
+ ? "null"
179
+ : grpc_dump_slice(*op->goaway_message,
180
+ GPR_DUMP_ASCII | GPR_DUMP_HEX);
181
+ gpr_asprintf(&tmp, "SEND_GOAWAY:status=%d:msg=%s", op->goaway_status, msg);
182
+ if (op->goaway_message != NULL) gpr_free(msg);
183
+ gpr_strvec_add(&b, tmp);
184
+ }
185
+
186
+ if (op->set_accept_stream) {
187
+ if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
188
+ first = false;
189
+ gpr_asprintf(&tmp, "SET_ACCEPT_STREAM:%p(%p,...)", op->set_accept_stream_fn,
190
+ op->set_accept_stream_user_data);
191
+ gpr_strvec_add(&b, tmp);
192
+ }
193
+
194
+ if (op->bind_pollset != NULL) {
195
+ if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
196
+ first = false;
197
+ gpr_strvec_add(&b, gpr_strdup("BIND_POLLSET"));
198
+ }
199
+
200
+ if (op->bind_pollset_set != NULL) {
201
+ if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
202
+ first = false;
203
+ gpr_strvec_add(&b, gpr_strdup("BIND_POLLSET_SET"));
204
+ }
205
+
206
+ if (op->send_ping != NULL) {
207
+ if (!first) gpr_strvec_add(&b, gpr_strdup(" "));
208
+ first = false;
209
+ gpr_strvec_add(&b, gpr_strdup("SEND_PING"));
210
+ }
211
+
212
+ out = gpr_strvec_flatten(&b, NULL);
213
+ gpr_strvec_destroy(&b);
214
+
215
+ return out;
216
+ }
217
+
146
218
  void grpc_call_log_op(char *file, int line, gpr_log_severity severity,
147
219
  grpc_call_element *elem, grpc_transport_stream_op *op) {
148
220
  char *str = grpc_transport_stream_op_string(op);