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
@@ -0,0 +1,367 @@
1
+ /*
2
+ *
3
+ * Copyright 2016, Google Inc.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions are
8
+ * met:
9
+ *
10
+ * * Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ * * Redistributions in binary form must reproduce the above
13
+ * copyright notice, this list of conditions and the following disclaimer
14
+ * in the documentation and/or other materials provided with the
15
+ * distribution.
16
+ * * Neither the name of Google Inc. nor the names of its
17
+ * contributors may be used to endorse or promote products derived from
18
+ * this software without specific prior written permission.
19
+ *
20
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ */
33
+
34
+ #include "src/core/lib/iomgr/port.h"
35
+
36
+ #ifdef GRPC_UV
37
+
38
+ #include <limits.h>
39
+ #include <string.h>
40
+
41
+ #include <grpc/slice_buffer.h>
42
+
43
+ #include <grpc/support/alloc.h>
44
+ #include <grpc/support/log.h>
45
+ #include <grpc/support/string_util.h>
46
+
47
+ #include "src/core/lib/iomgr/error.h"
48
+ #include "src/core/lib/iomgr/network_status_tracker.h"
49
+ #include "src/core/lib/iomgr/resource_quota.h"
50
+ #include "src/core/lib/iomgr/tcp_uv.h"
51
+ #include "src/core/lib/slice/slice_internal.h"
52
+ #include "src/core/lib/slice/slice_string_helpers.h"
53
+ #include "src/core/lib/support/string.h"
54
+
55
+ int grpc_tcp_trace = 0;
56
+
57
+ typedef struct {
58
+ grpc_endpoint base;
59
+ gpr_refcount refcount;
60
+
61
+ uv_write_t write_req;
62
+ uv_shutdown_t shutdown_req;
63
+
64
+ uv_tcp_t *handle;
65
+
66
+ grpc_closure *read_cb;
67
+ grpc_closure *write_cb;
68
+
69
+ grpc_slice read_slice;
70
+ grpc_slice_buffer *read_slices;
71
+ grpc_slice_buffer *write_slices;
72
+ uv_buf_t *write_buffers;
73
+
74
+ grpc_resource_user *resource_user;
75
+
76
+ bool shutting_down;
77
+
78
+ char *peer_string;
79
+ grpc_pollset *pollset;
80
+ } grpc_tcp;
81
+
82
+ static void uv_close_callback(uv_handle_t *handle) { gpr_free(handle); }
83
+
84
+ static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
85
+ grpc_resource_user_unref(exec_ctx, tcp->resource_user);
86
+ gpr_free(tcp);
87
+ }
88
+
89
+ /*#define GRPC_TCP_REFCOUNT_DEBUG*/
90
+ #ifdef GRPC_TCP_REFCOUNT_DEBUG
91
+ #define TCP_UNREF(exec_ctx, tcp, reason) \
92
+ tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__)
93
+ #define TCP_REF(tcp, reason) \
94
+ tcp_ref((exec_ctx), (tcp), (reason), __FILE__, __LINE__)
95
+ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
96
+ const char *reason, const char *file, int line) {
97
+ gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp,
98
+ reason, tcp->refcount.count, tcp->refcount.count - 1);
99
+ if (gpr_unref(&tcp->refcount)) {
100
+ tcp_free(exec_ctx, tcp);
101
+ }
102
+ }
103
+
104
+ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
105
+ int line) {
106
+ gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP ref %p : %s %d -> %d", tcp,
107
+ reason, tcp->refcount.count, tcp->refcount.count + 1);
108
+ gpr_ref(&tcp->refcount);
109
+ }
110
+ #else
111
+ #define TCP_UNREF(exec_ctx, tcp, reason) tcp_unref((exec_ctx), (tcp))
112
+ #define TCP_REF(tcp, reason) tcp_ref((tcp))
113
+ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
114
+ if (gpr_unref(&tcp->refcount)) {
115
+ tcp_free(exec_ctx, tcp);
116
+ }
117
+ }
118
+
119
+ static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); }
120
+ #endif
121
+
122
+ static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size,
123
+ uv_buf_t *buf) {
124
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
125
+ grpc_tcp *tcp = handle->data;
126
+ (void)suggested_size;
127
+ tcp->read_slice = grpc_resource_user_slice_malloc(
128
+ &exec_ctx, tcp->resource_user, GRPC_TCP_DEFAULT_READ_SLICE_SIZE);
129
+ buf->base = (char *)GRPC_SLICE_START_PTR(tcp->read_slice);
130
+ buf->len = GRPC_SLICE_LENGTH(tcp->read_slice);
131
+ grpc_exec_ctx_finish(&exec_ctx);
132
+ }
133
+
134
+ static void read_callback(uv_stream_t *stream, ssize_t nread,
135
+ const uv_buf_t *buf) {
136
+ grpc_slice sub;
137
+ grpc_error *error;
138
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
139
+ grpc_tcp *tcp = stream->data;
140
+ grpc_closure *cb = tcp->read_cb;
141
+ if (nread == 0) {
142
+ // Nothing happened. Wait for the next callback
143
+ return;
144
+ }
145
+ TCP_UNREF(&exec_ctx, tcp, "read");
146
+ tcp->read_cb = NULL;
147
+ // TODO(murgatroid99): figure out what the return value here means
148
+ uv_read_stop(stream);
149
+ if (nread == UV_EOF) {
150
+ error = GRPC_ERROR_CREATE("EOF");
151
+ } else if (nread > 0) {
152
+ // Successful read
153
+ sub = grpc_slice_sub_no_ref(tcp->read_slice, 0, (size_t)nread);
154
+ grpc_slice_buffer_add(tcp->read_slices, sub);
155
+ error = GRPC_ERROR_NONE;
156
+ if (grpc_tcp_trace) {
157
+ size_t i;
158
+ const char *str = grpc_error_string(error);
159
+ gpr_log(GPR_DEBUG, "read: error=%s", str);
160
+ grpc_error_free_string(str);
161
+ for (i = 0; i < tcp->read_slices->count; i++) {
162
+ char *dump = grpc_dump_slice(tcp->read_slices->slices[i],
163
+ GPR_DUMP_HEX | GPR_DUMP_ASCII);
164
+ gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string,
165
+ dump);
166
+ gpr_free(dump);
167
+ }
168
+ }
169
+ } else {
170
+ // nread < 0: Error
171
+ error = GRPC_ERROR_CREATE("TCP Read failed");
172
+ }
173
+ grpc_closure_sched(&exec_ctx, cb, error);
174
+ grpc_exec_ctx_finish(&exec_ctx);
175
+ }
176
+
177
+ static void uv_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
178
+ grpc_slice_buffer *read_slices, grpc_closure *cb) {
179
+ grpc_tcp *tcp = (grpc_tcp *)ep;
180
+ int status;
181
+ grpc_error *error = GRPC_ERROR_NONE;
182
+ GPR_ASSERT(tcp->read_cb == NULL);
183
+ tcp->read_cb = cb;
184
+ tcp->read_slices = read_slices;
185
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, read_slices);
186
+ TCP_REF(tcp, "read");
187
+ // TODO(murgatroid99): figure out what the return value here means
188
+ status =
189
+ uv_read_start((uv_stream_t *)tcp->handle, alloc_uv_buf, read_callback);
190
+ if (status != 0) {
191
+ error = GRPC_ERROR_CREATE("TCP Read failed at start");
192
+ error =
193
+ grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
194
+ grpc_closure_sched(exec_ctx, cb, error);
195
+ }
196
+ if (grpc_tcp_trace) {
197
+ const char *str = grpc_error_string(error);
198
+ gpr_log(GPR_DEBUG, "Initiating read on %p: error=%s", tcp, str);
199
+ }
200
+ }
201
+
202
+ static void write_callback(uv_write_t *req, int status) {
203
+ grpc_tcp *tcp = req->data;
204
+ grpc_error *error;
205
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
206
+ grpc_closure *cb = tcp->write_cb;
207
+ tcp->write_cb = NULL;
208
+ TCP_UNREF(&exec_ctx, tcp, "write");
209
+ if (status == 0) {
210
+ error = GRPC_ERROR_NONE;
211
+ } else {
212
+ error = GRPC_ERROR_CREATE("TCP Write failed");
213
+ }
214
+ if (grpc_tcp_trace) {
215
+ const char *str = grpc_error_string(error);
216
+ gpr_log(GPR_DEBUG, "write complete on %p: error=%s", tcp, str);
217
+ }
218
+ gpr_free(tcp->write_buffers);
219
+ grpc_resource_user_free(&exec_ctx, tcp->resource_user,
220
+ sizeof(uv_buf_t) * tcp->write_slices->count);
221
+ grpc_closure_sched(&exec_ctx, cb, error);
222
+ grpc_exec_ctx_finish(&exec_ctx);
223
+ }
224
+
225
+ static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
226
+ grpc_slice_buffer *write_slices,
227
+ grpc_closure *cb) {
228
+ grpc_tcp *tcp = (grpc_tcp *)ep;
229
+ uv_buf_t *buffers;
230
+ unsigned int buffer_count;
231
+ unsigned int i;
232
+ grpc_slice *slice;
233
+ uv_write_t *write_req;
234
+
235
+ if (grpc_tcp_trace) {
236
+ size_t j;
237
+
238
+ for (j = 0; j < write_slices->count; j++) {
239
+ char *data = grpc_dump_slice(write_slices->slices[j],
240
+ GPR_DUMP_HEX | GPR_DUMP_ASCII);
241
+ gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data);
242
+ gpr_free(data);
243
+ }
244
+ }
245
+
246
+ if (tcp->shutting_down) {
247
+ grpc_closure_sched(exec_ctx, cb,
248
+ GRPC_ERROR_CREATE("TCP socket is shutting down"));
249
+ return;
250
+ }
251
+
252
+ GPR_ASSERT(tcp->write_cb == NULL);
253
+ tcp->write_slices = write_slices;
254
+ GPR_ASSERT(tcp->write_slices->count <= UINT_MAX);
255
+ if (tcp->write_slices->count == 0) {
256
+ // No slices means we don't have to do anything,
257
+ // and libuv doesn't like empty writes
258
+ grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_NONE);
259
+ return;
260
+ }
261
+
262
+ tcp->write_cb = cb;
263
+ buffer_count = (unsigned int)tcp->write_slices->count;
264
+ buffers = gpr_malloc(sizeof(uv_buf_t) * buffer_count);
265
+ grpc_resource_user_alloc(exec_ctx, tcp->resource_user,
266
+ sizeof(uv_buf_t) * buffer_count, NULL);
267
+ for (i = 0; i < buffer_count; i++) {
268
+ slice = &tcp->write_slices->slices[i];
269
+ buffers[i].base = (char *)GRPC_SLICE_START_PTR(*slice);
270
+ buffers[i].len = GRPC_SLICE_LENGTH(*slice);
271
+ }
272
+ tcp->write_buffers = buffers;
273
+ write_req = &tcp->write_req;
274
+ write_req->data = tcp;
275
+ TCP_REF(tcp, "write");
276
+ // TODO(murgatroid99): figure out what the return value here means
277
+ uv_write(write_req, (uv_stream_t *)tcp->handle, buffers, buffer_count,
278
+ write_callback);
279
+ }
280
+
281
+ static void uv_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
282
+ grpc_pollset *pollset) {
283
+ // No-op. We're ignoring pollsets currently
284
+ (void)exec_ctx;
285
+ (void)ep;
286
+ (void)pollset;
287
+ grpc_tcp *tcp = (grpc_tcp *)ep;
288
+ tcp->pollset = pollset;
289
+ }
290
+
291
+ static void uv_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
292
+ grpc_pollset_set *pollset) {
293
+ // No-op. We're ignoring pollsets currently
294
+ (void)exec_ctx;
295
+ (void)ep;
296
+ (void)pollset;
297
+ }
298
+
299
+ static void shutdown_callback(uv_shutdown_t *req, int status) {}
300
+
301
+ static void uv_endpoint_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
302
+ grpc_tcp *tcp = (grpc_tcp *)ep;
303
+ if (!tcp->shutting_down) {
304
+ tcp->shutting_down = true;
305
+ uv_shutdown_t *req = &tcp->shutdown_req;
306
+ uv_shutdown(req, (uv_stream_t *)tcp->handle, shutdown_callback);
307
+ }
308
+ }
309
+
310
+ static void uv_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
311
+ grpc_network_status_unregister_endpoint(ep);
312
+ grpc_tcp *tcp = (grpc_tcp *)ep;
313
+ uv_close((uv_handle_t *)tcp->handle, uv_close_callback);
314
+ TCP_UNREF(exec_ctx, tcp, "destroy");
315
+ }
316
+
317
+ static char *uv_get_peer(grpc_endpoint *ep) {
318
+ grpc_tcp *tcp = (grpc_tcp *)ep;
319
+ return gpr_strdup(tcp->peer_string);
320
+ }
321
+
322
+ static grpc_resource_user *uv_get_resource_user(grpc_endpoint *ep) {
323
+ grpc_tcp *tcp = (grpc_tcp *)ep;
324
+ return tcp->resource_user;
325
+ }
326
+
327
+ static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) { return NULL; }
328
+
329
+ static int uv_get_fd(grpc_endpoint *ep) { return -1; }
330
+
331
+ static grpc_endpoint_vtable vtable = {
332
+ uv_endpoint_read, uv_endpoint_write, uv_get_workqueue,
333
+ uv_add_to_pollset, uv_add_to_pollset_set, uv_endpoint_shutdown,
334
+ uv_destroy, uv_get_resource_user, uv_get_peer,
335
+ uv_get_fd};
336
+
337
+ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle,
338
+ grpc_resource_quota *resource_quota,
339
+ char *peer_string) {
340
+ grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp));
341
+
342
+ if (grpc_tcp_trace) {
343
+ gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp);
344
+ }
345
+
346
+ /* Disable Nagle's Algorithm */
347
+ uv_tcp_nodelay(handle, 1);
348
+
349
+ memset(tcp, 0, sizeof(grpc_tcp));
350
+ tcp->base.vtable = &vtable;
351
+ tcp->handle = handle;
352
+ handle->data = tcp;
353
+ gpr_ref_init(&tcp->refcount, 1);
354
+ tcp->peer_string = gpr_strdup(peer_string);
355
+ tcp->shutting_down = false;
356
+ tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
357
+ /* Tell network status tracking code about the new endpoint */
358
+ grpc_network_status_register_endpoint(&tcp->base);
359
+
360
+ #ifndef GRPC_UV_TCP_HOLD_LOOP
361
+ uv_unref((uv_handle_t *)handle);
362
+ #endif
363
+
364
+ return &tcp->base;
365
+ }
366
+
367
+ #endif /* GRPC_UV */
@@ -0,0 +1,59 @@
1
+ /*
2
+ *
3
+ * Copyright 2016, Google Inc.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions are
8
+ * met:
9
+ *
10
+ * * Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ * * Redistributions in binary form must reproduce the above
13
+ * copyright notice, this list of conditions and the following disclaimer
14
+ * in the documentation and/or other materials provided with the
15
+ * distribution.
16
+ * * Neither the name of Google Inc. nor the names of its
17
+ * contributors may be used to endorse or promote products derived from
18
+ * this software without specific prior written permission.
19
+ *
20
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ */
33
+
34
+ #ifndef GRPC_CORE_LIB_IOMGR_TCP_UV_H
35
+ #define GRPC_CORE_LIB_IOMGR_TCP_UV_H
36
+ /*
37
+ Low level TCP "bottom half" implementation, for use by transports built on
38
+ top of a TCP connection.
39
+
40
+ Note that this file does not (yet) include APIs for creating the socket in
41
+ the first place.
42
+
43
+ All calls passing slice transfer ownership of a slice refcount unless
44
+ otherwise specified.
45
+ */
46
+
47
+ #include "src/core/lib/iomgr/endpoint.h"
48
+
49
+ #include <uv.h>
50
+
51
+ extern int grpc_tcp_trace;
52
+
53
+ #define GRPC_TCP_DEFAULT_READ_SLICE_SIZE 8192
54
+
55
+ grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle,
56
+ grpc_resource_quota *resource_quota,
57
+ char *peer_string);
58
+
59
+ #endif /* GRPC_CORE_LIB_IOMGR_TCP_UV_H */
@@ -31,19 +31,19 @@
31
31
  *
32
32
  */
33
33
 
34
- #include <grpc/support/port_platform.h>
34
+ #include "src/core/lib/iomgr/port.h"
35
35
 
36
- #ifdef GPR_WINSOCK_SOCKET
36
+ #ifdef GRPC_WINSOCK_SOCKET
37
37
 
38
38
  #include <limits.h>
39
39
 
40
40
  #include "src/core/lib/iomgr/network_status_tracker.h"
41
41
  #include "src/core/lib/iomgr/sockaddr_windows.h"
42
42
 
43
+ #include <grpc/slice_buffer.h>
43
44
  #include <grpc/support/alloc.h>
44
45
  #include <grpc/support/log.h>
45
46
  #include <grpc/support/log_windows.h>
46
- #include <grpc/support/slice_buffer.h>
47
47
  #include <grpc/support/string_util.h>
48
48
  #include <grpc/support/useful.h>
49
49
 
@@ -53,6 +53,7 @@
53
53
  #include "src/core/lib/iomgr/socket_windows.h"
54
54
  #include "src/core/lib/iomgr/tcp_client.h"
55
55
  #include "src/core/lib/iomgr/timer.h"
56
+ #include "src/core/lib/slice/slice_internal.h"
56
57
 
57
58
  #if defined(__MSYS__) && defined(GPR_ARCH_64)
58
59
  /* Nasty workaround for nasty bug when using the 64 bits msys compiler
@@ -105,9 +106,11 @@ typedef struct grpc_tcp {
105
106
 
106
107
  grpc_closure *read_cb;
107
108
  grpc_closure *write_cb;
108
- gpr_slice read_slice;
109
- gpr_slice_buffer *write_slices;
110
- gpr_slice_buffer *read_slices;
109
+ grpc_slice read_slice;
110
+ grpc_slice_buffer *write_slices;
111
+ grpc_slice_buffer *read_slices;
112
+
113
+ grpc_resource_user *resource_user;
111
114
 
112
115
  /* The IO Completion Port runs from another thread. We need some mechanism
113
116
  to protect ourselves when requesting a shutdown. */
@@ -117,23 +120,25 @@ typedef struct grpc_tcp {
117
120
  char *peer_string;
118
121
  } grpc_tcp;
119
122
 
120
- static void tcp_free(grpc_tcp *tcp) {
123
+ static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
121
124
  grpc_winsocket_destroy(tcp->socket);
122
125
  gpr_mu_destroy(&tcp->mu);
123
126
  gpr_free(tcp->peer_string);
127
+ grpc_resource_user_unref(exec_ctx, tcp->resource_user);
124
128
  gpr_free(tcp);
125
129
  }
126
130
 
127
131
  /*#define GRPC_TCP_REFCOUNT_DEBUG*/
128
132
  #ifdef GRPC_TCP_REFCOUNT_DEBUG
129
- #define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), __FILE__, __LINE__)
133
+ #define TCP_UNREF(exec_ctx, tcp, reason) \
134
+ tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__)
130
135
  #define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
131
- static void tcp_unref(grpc_tcp *tcp, const char *reason, const char *file,
132
- int line) {
136
+ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
137
+ const char *reason, const char *file, int line) {
133
138
  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp,
134
139
  reason, tcp->refcount.count, tcp->refcount.count - 1);
135
140
  if (gpr_unref(&tcp->refcount)) {
136
- tcp_free(tcp);
141
+ tcp_free(exec_ctx, tcp);
137
142
  }
138
143
  }
139
144
 
@@ -144,11 +149,11 @@ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
144
149
  gpr_ref(&tcp->refcount);
145
150
  }
146
151
  #else
147
- #define TCP_UNREF(tcp, reason) tcp_unref((tcp))
152
+ #define TCP_UNREF(exec_ctx, tcp, reason) tcp_unref((exec_ctx), (tcp))
148
153
  #define TCP_REF(tcp, reason) tcp_ref((tcp))
149
- static void tcp_unref(grpc_tcp *tcp) {
154
+ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
150
155
  if (gpr_unref(&tcp->refcount)) {
151
- tcp_free(tcp);
156
+ tcp_free(exec_ctx, tcp);
152
157
  }
153
158
  }
154
159
 
@@ -160,7 +165,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) {
160
165
  grpc_tcp *tcp = tcpp;
161
166
  grpc_closure *cb = tcp->read_cb;
162
167
  grpc_winsocket *socket = tcp->socket;
163
- gpr_slice sub;
168
+ grpc_slice sub;
164
169
  grpc_winsocket_callback_info *info = &socket->read_info;
165
170
 
166
171
  GRPC_ERROR_REF(error);
@@ -170,25 +175,25 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) {
170
175
  char *utf8_message = gpr_format_message(info->wsa_error);
171
176
  error = GRPC_ERROR_CREATE(utf8_message);
172
177
  gpr_free(utf8_message);
173
- gpr_slice_unref(tcp->read_slice);
178
+ grpc_slice_unref_internal(exec_ctx, tcp->read_slice);
174
179
  } else {
175
180
  if (info->bytes_transfered != 0 && !tcp->shutting_down) {
176
- sub = gpr_slice_sub_no_ref(tcp->read_slice, 0, info->bytes_transfered);
177
- gpr_slice_buffer_add(tcp->read_slices, sub);
181
+ sub = grpc_slice_sub_no_ref(tcp->read_slice, 0, info->bytes_transfered);
182
+ grpc_slice_buffer_add(tcp->read_slices, sub);
178
183
  } else {
179
- gpr_slice_unref(tcp->read_slice);
184
+ grpc_slice_unref_internal(exec_ctx, tcp->read_slice);
180
185
  error = GRPC_ERROR_CREATE("End of TCP stream");
181
186
  }
182
187
  }
183
188
  }
184
189
 
185
190
  tcp->read_cb = NULL;
186
- TCP_UNREF(tcp, "read");
187
- grpc_exec_ctx_sched(exec_ctx, cb, error, NULL);
191
+ TCP_UNREF(exec_ctx, tcp, "read");
192
+ grpc_closure_sched(exec_ctx, cb, error);
188
193
  }
189
194
 
190
195
  static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
191
- gpr_slice_buffer *read_slices, grpc_closure *cb) {
196
+ grpc_slice_buffer *read_slices, grpc_closure *cb) {
192
197
  grpc_tcp *tcp = (grpc_tcp *)ep;
193
198
  grpc_winsocket *handle = tcp->socket;
194
199
  grpc_winsocket_callback_info *info = &handle->read_info;
@@ -198,20 +203,20 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
198
203
  WSABUF buffer;
199
204
 
200
205
  if (tcp->shutting_down) {
201
- grpc_exec_ctx_sched(exec_ctx, cb,
202
- GRPC_ERROR_CREATE("TCP socket is shutting down"), NULL);
206
+ grpc_closure_sched(exec_ctx, cb,
207
+ GRPC_ERROR_CREATE("TCP socket is shutting down"));
203
208
  return;
204
209
  }
205
210
 
206
211
  tcp->read_cb = cb;
207
212
  tcp->read_slices = read_slices;
208
- gpr_slice_buffer_reset_and_unref(read_slices);
213
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, read_slices);
209
214
 
210
- tcp->read_slice = gpr_slice_malloc(8192);
215
+ tcp->read_slice = grpc_slice_malloc(8192);
211
216
 
212
- buffer.len = (ULONG)GPR_SLICE_LENGTH(
217
+ buffer.len = (ULONG)GRPC_SLICE_LENGTH(
213
218
  tcp->read_slice); // we know slice size fits in 32bit.
214
- buffer.buf = (char *)GPR_SLICE_START_PTR(tcp->read_slice);
219
+ buffer.buf = (char *)GRPC_SLICE_START_PTR(tcp->read_slice);
215
220
 
216
221
  TCP_REF(tcp, "read");
217
222
 
@@ -223,7 +228,7 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
223
228
  /* Did we get data immediately ? Yay. */
224
229
  if (info->wsa_error != WSAEWOULDBLOCK) {
225
230
  info->bytes_transfered = bytes_read;
226
- grpc_exec_ctx_sched(exec_ctx, &tcp->on_read, GRPC_ERROR_NONE, NULL);
231
+ grpc_closure_sched(exec_ctx, &tcp->on_read, GRPC_ERROR_NONE);
227
232
  return;
228
233
  }
229
234
 
@@ -236,8 +241,8 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
236
241
  int wsa_error = WSAGetLastError();
237
242
  if (wsa_error != WSA_IO_PENDING) {
238
243
  info->wsa_error = wsa_error;
239
- grpc_exec_ctx_sched(exec_ctx, &tcp->on_read,
240
- GRPC_WSA_ERROR(info->wsa_error, "WSARecv"), NULL);
244
+ grpc_closure_sched(exec_ctx, &tcp->on_read,
245
+ GRPC_WSA_ERROR(info->wsa_error, "WSARecv"));
241
246
  return;
242
247
  }
243
248
  }
@@ -267,13 +272,13 @@ static void on_write(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) {
267
272
  }
268
273
  }
269
274
 
270
- TCP_UNREF(tcp, "write");
271
- grpc_exec_ctx_sched(exec_ctx, cb, error, NULL);
275
+ TCP_UNREF(exec_ctx, tcp, "write");
276
+ grpc_closure_sched(exec_ctx, cb, error);
272
277
  }
273
278
 
274
279
  /* Initiates a write. */
275
280
  static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
276
- gpr_slice_buffer *slices, grpc_closure *cb) {
281
+ grpc_slice_buffer *slices, grpc_closure *cb) {
277
282
  grpc_tcp *tcp = (grpc_tcp *)ep;
278
283
  grpc_winsocket *socket = tcp->socket;
279
284
  grpc_winsocket_callback_info *info = &socket->write_info;
@@ -286,8 +291,8 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
286
291
  size_t len;
287
292
 
288
293
  if (tcp->shutting_down) {
289
- grpc_exec_ctx_sched(exec_ctx, cb,
290
- GRPC_ERROR_CREATE("TCP socket is shutting down"), NULL);
294
+ grpc_closure_sched(exec_ctx, cb,
295
+ GRPC_ERROR_CREATE("TCP socket is shutting down"));
291
296
  return;
292
297
  }
293
298
 
@@ -300,10 +305,10 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
300
305
  }
301
306
 
302
307
  for (i = 0; i < tcp->write_slices->count; i++) {
303
- len = GPR_SLICE_LENGTH(tcp->write_slices->slices[i]);
308
+ len = GRPC_SLICE_LENGTH(tcp->write_slices->slices[i]);
304
309
  GPR_ASSERT(len <= ULONG_MAX);
305
310
  buffers[i].len = (ULONG)len;
306
- buffers[i].buf = (char *)GPR_SLICE_START_PTR(tcp->write_slices->slices[i]);
311
+ buffers[i].buf = (char *)GRPC_SLICE_START_PTR(tcp->write_slices->slices[i]);
307
312
  }
308
313
 
309
314
  /* First, let's try a synchronous, non-blocking write. */
@@ -318,7 +323,7 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
318
323
  grpc_error *error = status == 0
319
324
  ? GRPC_ERROR_NONE
320
325
  : GRPC_WSA_ERROR(info->wsa_error, "WSASend");
321
- grpc_exec_ctx_sched(exec_ctx, cb, error, NULL);
326
+ grpc_closure_sched(exec_ctx, cb, error);
322
327
  if (allocated) gpr_free(allocated);
323
328
  return;
324
329
  }
@@ -335,9 +340,8 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
335
340
  if (status != 0) {
336
341
  int wsa_error = WSAGetLastError();
337
342
  if (wsa_error != WSA_IO_PENDING) {
338
- TCP_UNREF(tcp, "write");
339
- grpc_exec_ctx_sched(exec_ctx, cb, GRPC_WSA_ERROR(wsa_error, "WSASend"),
340
- NULL);
343
+ TCP_UNREF(exec_ctx, tcp, "write");
344
+ grpc_closure_sched(exec_ctx, cb, GRPC_WSA_ERROR(wsa_error, "WSASend"));
341
345
  return;
342
346
  }
343
347
  }
@@ -377,12 +381,13 @@ static void win_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
377
381
  tcp->shutting_down = 1;
378
382
  grpc_winsocket_shutdown(tcp->socket);
379
383
  gpr_mu_unlock(&tcp->mu);
384
+ grpc_resource_user_shutdown(exec_ctx, tcp->resource_user);
380
385
  }
381
386
 
382
387
  static void win_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
383
388
  grpc_network_status_unregister_endpoint(ep);
384
389
  grpc_tcp *tcp = (grpc_tcp *)ep;
385
- TCP_UNREF(tcp, "destroy");
390
+ TCP_UNREF(exec_ctx, tcp, "destroy");
386
391
  }
387
392
 
388
393
  static char *win_get_peer(grpc_endpoint *ep) {
@@ -392,6 +397,13 @@ static char *win_get_peer(grpc_endpoint *ep) {
392
397
 
393
398
  static grpc_workqueue *win_get_workqueue(grpc_endpoint *ep) { return NULL; }
394
399
 
400
+ static grpc_resource_user *win_get_resource_user(grpc_endpoint *ep) {
401
+ grpc_tcp *tcp = (grpc_tcp *)ep;
402
+ return tcp->resource_user;
403
+ }
404
+
405
+ static int win_get_fd(grpc_endpoint *ep) { return -1; }
406
+
395
407
  static grpc_endpoint_vtable vtable = {win_read,
396
408
  win_write,
397
409
  win_get_workqueue,
@@ -399,22 +411,27 @@ static grpc_endpoint_vtable vtable = {win_read,
399
411
  win_add_to_pollset_set,
400
412
  win_shutdown,
401
413
  win_destroy,
402
- win_get_peer};
414
+ win_get_resource_user,
415
+ win_get_peer,
416
+ win_get_fd};
403
417
 
404
- grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, char *peer_string) {
418
+ grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket,
419
+ grpc_resource_quota *resource_quota,
420
+ char *peer_string) {
405
421
  grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp));
406
422
  memset(tcp, 0, sizeof(grpc_tcp));
407
423
  tcp->base.vtable = &vtable;
408
424
  tcp->socket = socket;
409
425
  gpr_mu_init(&tcp->mu);
410
426
  gpr_ref_init(&tcp->refcount, 1);
411
- grpc_closure_init(&tcp->on_read, on_read, tcp);
412
- grpc_closure_init(&tcp->on_write, on_write, tcp);
427
+ grpc_closure_init(&tcp->on_read, on_read, tcp, grpc_schedule_on_exec_ctx);
428
+ grpc_closure_init(&tcp->on_write, on_write, tcp, grpc_schedule_on_exec_ctx);
413
429
  tcp->peer_string = gpr_strdup(peer_string);
430
+ tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
414
431
  /* Tell network status tracking code about the new endpoint */
415
432
  grpc_network_status_register_endpoint(&tcp->base);
416
433
 
417
434
  return &tcp->base;
418
435
  }
419
436
 
420
- #endif /* GPR_WINSOCK_SOCKET */
437
+ #endif /* GRPC_WINSOCK_SOCKET */