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
@@ -50,7 +50,9 @@
50
50
  /* Create a tcp endpoint given a winsock handle.
51
51
  * Takes ownership of the handle.
52
52
  */
53
- grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket, char *peer_string);
53
+ grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket,
54
+ grpc_resource_quota *resource_quota,
55
+ char *peer_string);
54
56
 
55
57
  grpc_error *grpc_tcp_prepare_socket(SOCKET sock);
56
58
 
@@ -34,29 +34,30 @@
34
34
  #ifndef GRPC_CORE_LIB_IOMGR_TIMER_H
35
35
  #define GRPC_CORE_LIB_IOMGR_TIMER_H
36
36
 
37
+ #include "src/core/lib/iomgr/port.h"
38
+
39
+ #ifdef GRPC_UV
40
+ #include "src/core/lib/iomgr/timer_uv.h"
41
+ #else
42
+ #include "src/core/lib/iomgr/timer_generic.h"
43
+ #endif /* GRPC_UV */
44
+
37
45
  #include <grpc/support/port_platform.h>
38
46
  #include <grpc/support/time.h>
39
47
  #include "src/core/lib/iomgr/exec_ctx.h"
40
48
  #include "src/core/lib/iomgr/iomgr.h"
41
49
 
42
- typedef struct grpc_timer {
43
- gpr_timespec deadline;
44
- uint32_t heap_index; /* INVALID_HEAP_INDEX if not in heap */
45
- int triggered;
46
- struct grpc_timer *next;
47
- struct grpc_timer *prev;
48
- grpc_closure closure;
49
- } grpc_timer;
50
-
51
- /* Initialize *timer. When expired or canceled, timer_cb will be called with
52
- *timer_cb_arg and status to indicate if it expired (SUCCESS) or was
53
- canceled (CANCELLED). timer_cb is guaranteed to be called exactly once,
54
- and application code should check the status to determine how it was
55
- invoked. The application callback is also responsible for maintaining
56
- information about when to free up any user-level state. */
50
+ typedef struct grpc_timer grpc_timer;
51
+
52
+ /* Initialize *timer. When expired or canceled, closure will be called with
53
+ error set to indicate if it expired (GRPC_ERROR_NONE) or was canceled
54
+ (GRPC_ERROR_CANCELLED). timer_cb is guaranteed to be called exactly once, and
55
+ application code should check the error to determine how it was invoked. The
56
+ application callback is also responsible for maintaining information about
57
+ when to free up any user-level state. */
57
58
  void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
58
- gpr_timespec deadline, grpc_iomgr_cb_func timer_cb,
59
- void *timer_cb_arg, gpr_timespec now);
59
+ gpr_timespec deadline, grpc_closure *closure,
60
+ gpr_timespec now);
60
61
 
61
62
  /* Note that there is no timer destroy function. This is because the
62
63
  timer is a one-time occurrence with a guarantee that the callback will
@@ -74,8 +75,8 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
74
75
 
75
76
  In all of these cases, the cancellation is still considered successful.
76
77
  They are essentially distinguished in that the timer_cb will be run
77
- exactly once from either the cancellation (with status CANCELLED)
78
- or from the activation (with status SUCCESS)
78
+ exactly once from either the cancellation (with error GRPC_ERROR_CANCELLED)
79
+ or from the activation (with error GRPC_ERROR_NONE).
79
80
 
80
81
  Note carefully that the callback function MAY occur in the same callstack
81
82
  as grpc_timer_cancel. It's expected that most timers will be cancelled (their
@@ -83,14 +84,13 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
83
84
  that cancellation costs as little as possible. Making callbacks run inline
84
85
  matches this aim.
85
86
 
86
- Requires: cancel() must happen after add() on a given timer */
87
+ Requires: cancel() must happen after init() on a given timer */
87
88
  void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer);
88
89
 
89
90
  /* iomgr internal api for dealing with timers */
90
91
 
91
92
  /* Check for timers to be run, and run them.
92
93
  Return true if timer callbacks were executed.
93
- Drops drop_mu if it is non-null before executing callbacks.
94
94
  If next is non-null, TRY to update *next with the next running timer
95
95
  IF that timer occurs before *next current value.
96
96
  *next is never guaranteed to be updated on any given execution; however,
@@ -31,6 +31,10 @@
31
31
  *
32
32
  */
33
33
 
34
+ #include "src/core/lib/iomgr/port.h"
35
+
36
+ #ifdef GRPC_TIMER_USE_GENERIC
37
+
34
38
  #include "src/core/lib/iomgr/timer.h"
35
39
 
36
40
  #include <grpc/support/log.h>
@@ -174,28 +178,27 @@ static void note_deadline_change(shard_type *shard) {
174
178
  }
175
179
 
176
180
  void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
177
- gpr_timespec deadline, grpc_iomgr_cb_func timer_cb,
178
- void *timer_cb_arg, gpr_timespec now) {
181
+ gpr_timespec deadline, grpc_closure *closure,
182
+ gpr_timespec now) {
179
183
  int is_first_timer = 0;
180
184
  shard_type *shard = &g_shards[shard_idx(timer)];
181
185
  GPR_ASSERT(deadline.clock_type == g_clock_type);
182
186
  GPR_ASSERT(now.clock_type == g_clock_type);
183
- grpc_closure_init(&timer->closure, timer_cb, timer_cb_arg);
187
+ timer->closure = closure;
184
188
  timer->deadline = deadline;
185
189
  timer->triggered = 0;
186
190
 
187
191
  if (!g_initialized) {
188
192
  timer->triggered = 1;
189
- grpc_exec_ctx_sched(
190
- exec_ctx, &timer->closure,
191
- GRPC_ERROR_CREATE("Attempt to create timer before initialization"),
192
- NULL);
193
+ grpc_closure_sched(
194
+ exec_ctx, timer->closure,
195
+ GRPC_ERROR_CREATE("Attempt to create timer before initialization"));
193
196
  return;
194
197
  }
195
198
 
196
199
  if (gpr_time_cmp(deadline, now) <= 0) {
197
200
  timer->triggered = 1;
198
- grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_NONE, NULL);
201
+ grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_NONE);
199
202
  return;
200
203
  }
201
204
 
@@ -247,7 +250,7 @@ void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) {
247
250
  shard_type *shard = &g_shards[shard_idx(timer)];
248
251
  gpr_mu_lock(&shard->mu);
249
252
  if (!timer->triggered) {
250
- grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_CANCELLED, NULL);
253
+ grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_CANCELLED);
251
254
  timer->triggered = 1;
252
255
  if (timer->heap_index == INVALID_HEAP_INDEX) {
253
256
  list_remove(timer);
@@ -313,7 +316,7 @@ static size_t pop_timers(grpc_exec_ctx *exec_ctx, shard_type *shard,
313
316
  grpc_timer *timer;
314
317
  gpr_mu_lock(&shard->mu);
315
318
  while ((timer = pop_one(shard, now))) {
316
- grpc_exec_ctx_sched(exec_ctx, &timer->closure, GRPC_ERROR_REF(error), NULL);
319
+ grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_REF(error));
317
320
  n++;
318
321
  }
319
322
  *new_min_deadline = compute_min_deadline(shard);
@@ -382,3 +385,5 @@ bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now,
382
385
  ? GRPC_ERROR_NONE
383
386
  : GRPC_ERROR_CREATE("Shutting down timer system"));
384
387
  }
388
+
389
+ #endif /* GRPC_TIMER_USE_GENERIC */
@@ -0,0 +1,49 @@
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_TIMER_GENERIC_H
35
+ #define GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H
36
+
37
+ #include <grpc/support/time.h>
38
+ #include "src/core/lib/iomgr/exec_ctx.h"
39
+
40
+ struct grpc_timer {
41
+ gpr_timespec deadline;
42
+ uint32_t heap_index; /* INVALID_HEAP_INDEX if not in heap */
43
+ int triggered;
44
+ struct grpc_timer *next;
45
+ struct grpc_timer *prev;
46
+ grpc_closure *closure;
47
+ };
48
+
49
+ #endif /* GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H */
@@ -31,6 +31,10 @@
31
31
  *
32
32
  */
33
33
 
34
+ #include "src/core/lib/iomgr/port.h"
35
+
36
+ #ifdef GRPC_TIMER_USE_GENERIC
37
+
34
38
  #include "src/core/lib/iomgr/timer_heap.h"
35
39
 
36
40
  #include <string.h>
@@ -144,3 +148,5 @@ grpc_timer *grpc_timer_heap_top(grpc_timer_heap *heap) {
144
148
  void grpc_timer_heap_pop(grpc_timer_heap *heap) {
145
149
  grpc_timer_heap_remove(heap, grpc_timer_heap_top(heap));
146
150
  }
151
+
152
+ #endif /* GRPC_TIMER_USE_GENERIC */
@@ -0,0 +1,99 @@
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
+ #if GRPC_UV
37
+
38
+ #include <grpc/support/alloc.h>
39
+ #include <grpc/support/log.h>
40
+
41
+ #include "src/core/lib/iomgr/timer.h"
42
+
43
+ #include <uv.h>
44
+
45
+ static void timer_close_callback(uv_handle_t *handle) { gpr_free(handle); }
46
+
47
+ static void stop_uv_timer(uv_timer_t *handle) {
48
+ uv_timer_stop(handle);
49
+ uv_unref((uv_handle_t *)handle);
50
+ uv_close((uv_handle_t *)handle, timer_close_callback);
51
+ }
52
+
53
+ void run_expired_timer(uv_timer_t *handle) {
54
+ grpc_timer *timer = (grpc_timer *)handle->data;
55
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
56
+ GPR_ASSERT(!timer->triggered);
57
+ timer->triggered = 1;
58
+ grpc_closure_sched(&exec_ctx, timer->closure, GRPC_ERROR_NONE);
59
+ stop_uv_timer(handle);
60
+ grpc_exec_ctx_finish(&exec_ctx);
61
+ }
62
+
63
+ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
64
+ gpr_timespec deadline, grpc_closure *closure,
65
+ gpr_timespec now) {
66
+ uint64_t timeout;
67
+ uv_timer_t *uv_timer;
68
+ timer->closure = closure;
69
+ if (gpr_time_cmp(deadline, now) <= 0) {
70
+ timer->triggered = 1;
71
+ grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_NONE);
72
+ return;
73
+ }
74
+ timer->triggered = 0;
75
+ timeout = (uint64_t)gpr_time_to_millis(gpr_time_sub(deadline, now));
76
+ uv_timer = gpr_malloc(sizeof(uv_timer_t));
77
+ uv_timer_init(uv_default_loop(), uv_timer);
78
+ uv_timer->data = timer;
79
+ timer->uv_timer = uv_timer;
80
+ uv_timer_start(uv_timer, run_expired_timer, timeout, 0);
81
+ }
82
+
83
+ void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) {
84
+ if (!timer->triggered) {
85
+ timer->triggered = 1;
86
+ grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_CANCELLED);
87
+ stop_uv_timer((uv_timer_t *)timer->uv_timer);
88
+ }
89
+ }
90
+
91
+ bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now,
92
+ gpr_timespec *next) {
93
+ return false;
94
+ }
95
+
96
+ void grpc_timer_list_init(gpr_timespec now) {}
97
+ void grpc_timer_list_shutdown(grpc_exec_ctx *exec_ctx) {}
98
+
99
+ #endif /* GRPC_UV */
@@ -0,0 +1,47 @@
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_TIMER_UV_H
35
+ #define GRPC_CORE_LIB_IOMGR_TIMER_UV_H
36
+
37
+ #include "src/core/lib/iomgr/exec_ctx.h"
38
+
39
+ struct grpc_timer {
40
+ grpc_closure *closure;
41
+ /* This is actually a uv_timer_t*, but we want to keep platform-specific
42
+ types out of headers */
43
+ void *uv_timer;
44
+ int triggered;
45
+ };
46
+
47
+ #endif /* GRPC_CORE_LIB_IOMGR_TIMER_UV_H */
@@ -36,10 +36,9 @@
36
36
  #define _GNU_SOURCE
37
37
  #endif
38
38
 
39
- #include <grpc/support/port_platform.h>
39
+ #include "src/core/lib/iomgr/port.h"
40
40
 
41
- #ifdef GRPC_NEED_UDP
42
- #ifdef GPR_POSIX_SOCKET
41
+ #ifdef GRPC_POSIX_SOCKET
43
42
 
44
43
  #include "src/core/lib/iomgr/udp_server.h"
45
44
 
@@ -63,32 +62,30 @@
63
62
  #include "src/core/lib/iomgr/error.h"
64
63
  #include "src/core/lib/iomgr/ev_posix.h"
65
64
  #include "src/core/lib/iomgr/resolve_address.h"
65
+ #include "src/core/lib/iomgr/sockaddr.h"
66
66
  #include "src/core/lib/iomgr/sockaddr_utils.h"
67
67
  #include "src/core/lib/iomgr/socket_utils_posix.h"
68
+ #include "src/core/lib/iomgr/unix_sockets_posix.h"
68
69
  #include "src/core/lib/support/string.h"
69
70
 
70
- #define INIT_PORT_CAP 2
71
-
72
71
  /* one listening port */
73
- typedef struct {
72
+ typedef struct grpc_udp_listener grpc_udp_listener;
73
+ struct grpc_udp_listener {
74
74
  int fd;
75
75
  grpc_fd *emfd;
76
76
  grpc_udp_server *server;
77
- union {
78
- uint8_t untyped[GRPC_MAX_SOCKADDR_SIZE];
79
- struct sockaddr sockaddr;
80
- } addr;
81
- size_t addr_len;
77
+ grpc_resolved_address addr;
82
78
  grpc_closure read_closure;
83
79
  grpc_closure destroyed_closure;
84
80
  grpc_udp_server_read_cb read_cb;
85
81
  grpc_udp_server_orphan_cb orphan_cb;
86
- } server_port;
82
+
83
+ struct grpc_udp_listener *next;
84
+ };
87
85
 
88
86
  /* the overall server */
89
87
  struct grpc_udp_server {
90
88
  gpr_mu mu;
91
- gpr_cv cv;
92
89
 
93
90
  /* active port count: how many ports are actually still listening */
94
91
  size_t active_ports;
@@ -98,10 +95,10 @@ struct grpc_udp_server {
98
95
  /* is this server shutting down? (boolean) */
99
96
  int shutdown;
100
97
 
101
- /* all listening ports */
102
- server_port *ports;
103
- size_t nports;
104
- size_t port_capacity;
98
+ /* linked list of server ports */
99
+ grpc_udp_listener *head;
100
+ grpc_udp_listener *tail;
101
+ unsigned nports;
105
102
 
106
103
  /* shutdown callback */
107
104
  grpc_closure *shutdown_complete;
@@ -117,24 +114,29 @@ struct grpc_udp_server {
117
114
  grpc_udp_server *grpc_udp_server_create(void) {
118
115
  grpc_udp_server *s = gpr_malloc(sizeof(grpc_udp_server));
119
116
  gpr_mu_init(&s->mu);
120
- gpr_cv_init(&s->cv);
121
117
  s->active_ports = 0;
122
118
  s->destroyed_ports = 0;
123
119
  s->shutdown = 0;
124
- s->ports = gpr_malloc(sizeof(server_port) * INIT_PORT_CAP);
120
+ s->head = NULL;
121
+ s->tail = NULL;
125
122
  s->nports = 0;
126
- s->port_capacity = INIT_PORT_CAP;
127
123
 
128
124
  return s;
129
125
  }
130
126
 
131
127
  static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
132
- grpc_exec_ctx_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE, NULL);
128
+ if (s->shutdown_complete != NULL) {
129
+ grpc_closure_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE);
130
+ }
133
131
 
134
132
  gpr_mu_destroy(&s->mu);
135
- gpr_cv_destroy(&s->cv);
136
133
 
137
- gpr_free(s->ports);
134
+ while (s->head) {
135
+ grpc_udp_listener *sp = s->head;
136
+ s->head = sp->next;
137
+ gpr_free(sp);
138
+ }
139
+
138
140
  gpr_free(s);
139
141
  }
140
142
 
@@ -155,8 +157,6 @@ static void destroyed_port(grpc_exec_ctx *exec_ctx, void *server,
155
157
  events will be received on them - at this point it's safe to destroy
156
158
  things */
157
159
  static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
158
- size_t i;
159
-
160
160
  /* delete ALL the things */
161
161
  gpr_mu_lock(&s->mu);
162
162
 
@@ -165,12 +165,16 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
165
165
  return;
166
166
  }
167
167
 
168
- if (s->nports) {
169
- for (i = 0; i < s->nports; i++) {
170
- server_port *sp = &s->ports[i];
171
- sp->destroyed_closure.cb = destroyed_port;
172
- sp->destroyed_closure.cb_arg = s;
168
+ if (s->head) {
169
+ grpc_udp_listener *sp;
170
+ for (sp = s->head; sp; sp = sp->next) {
171
+ grpc_unlink_if_unix_domain_socket(&sp->addr);
172
+
173
+ grpc_closure_init(&sp->destroyed_closure, destroyed_port, s,
174
+ grpc_schedule_on_exec_ctx);
173
175
 
176
+ /* Call the orphan_cb to signal that the FD is about to be closed and
177
+ * should no longer be used. */
174
178
  GPR_ASSERT(sp->orphan_cb);
175
179
  sp->orphan_cb(sp->emfd);
176
180
 
@@ -186,7 +190,7 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
186
190
 
187
191
  void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
188
192
  grpc_closure *on_done) {
189
- size_t i;
193
+ grpc_udp_listener *sp;
190
194
  gpr_mu_lock(&s->mu);
191
195
 
192
196
  GPR_ASSERT(!s->shutdown);
@@ -196,8 +200,10 @@ void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
196
200
 
197
201
  /* shutdown all fd's */
198
202
  if (s->active_ports) {
199
- for (i = 0; i < s->nports; i++) {
200
- grpc_fd_shutdown(exec_ctx, s->ports[i].emfd);
203
+ for (sp = s->head; sp; sp = sp->next) {
204
+ GPR_ASSERT(sp->orphan_cb);
205
+ sp->orphan_cb(sp->emfd);
206
+ grpc_fd_shutdown(exec_ctx, sp->emfd);
201
207
  }
202
208
  gpr_mu_unlock(&s->mu);
203
209
  } else {
@@ -207,10 +213,9 @@ void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
207
213
  }
208
214
 
209
215
  /* Prepare a recently-created socket for listening. */
210
- static int prepare_socket(int fd, const struct sockaddr *addr,
211
- size_t addr_len) {
212
- struct sockaddr_storage sockname_temp;
213
- socklen_t sockname_len;
216
+ static int prepare_socket(int fd, const grpc_resolved_address *addr) {
217
+ grpc_resolved_address sockname_temp;
218
+ struct sockaddr *addr_ptr = (struct sockaddr *)addr->addr;
214
219
  /* Set send/receive socket buffers to 1 MB */
215
220
  int buffer_size_bytes = 1024 * 1024;
216
221
 
@@ -230,15 +235,15 @@ static int prepare_socket(int fd, const struct sockaddr *addr,
230
235
  if (grpc_set_socket_ip_pktinfo_if_possible(fd) != GRPC_ERROR_NONE) {
231
236
  gpr_log(GPR_ERROR, "Unable to set ip_pktinfo.");
232
237
  goto error;
233
- } else if (addr->sa_family == AF_INET6) {
238
+ } else if (addr_ptr->sa_family == AF_INET6) {
234
239
  if (grpc_set_socket_ipv6_recvpktinfo_if_possible(fd) != GRPC_ERROR_NONE) {
235
240
  gpr_log(GPR_ERROR, "Unable to set ipv6_recvpktinfo.");
236
241
  goto error;
237
242
  }
238
243
  }
239
244
 
240
- GPR_ASSERT(addr_len < ~(socklen_t)0);
241
- if (bind(fd, addr, (socklen_t)addr_len) < 0) {
245
+ GPR_ASSERT(addr->len < ~(socklen_t)0);
246
+ if (bind(fd, (struct sockaddr *)addr, (socklen_t)addr->len) < 0) {
242
247
  char *addr_str;
243
248
  grpc_sockaddr_to_string(&addr_str, addr, 0);
244
249
  gpr_log(GPR_ERROR, "bind addr=%s: %s", addr_str, strerror(errno));
@@ -246,8 +251,10 @@ static int prepare_socket(int fd, const struct sockaddr *addr,
246
251
  goto error;
247
252
  }
248
253
 
249
- sockname_len = sizeof(sockname_temp);
250
- if (getsockname(fd, (struct sockaddr *)&sockname_temp, &sockname_len) < 0) {
254
+ sockname_temp.len = sizeof(struct sockaddr_storage);
255
+
256
+ if (getsockname(fd, (struct sockaddr *)sockname_temp.addr,
257
+ (socklen_t *)&sockname_temp.len) < 0) {
251
258
  goto error;
252
259
  }
253
260
 
@@ -263,7 +270,7 @@ static int prepare_socket(int fd, const struct sockaddr *addr,
263
270
  goto error;
264
271
  }
265
272
 
266
- return grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp);
273
+ return grpc_sockaddr_get_port(&sockname_temp);
267
274
 
268
275
  error:
269
276
  if (fd >= 0) {
@@ -274,10 +281,10 @@ error:
274
281
 
275
282
  /* event manager callback when reads are ready */
276
283
  static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
277
- server_port *sp = arg;
284
+ grpc_udp_listener *sp = arg;
278
285
 
286
+ gpr_mu_lock(&sp->server->mu);
279
287
  if (error != GRPC_ERROR_NONE) {
280
- gpr_mu_lock(&sp->server->mu);
281
288
  if (0 == --sp->server->active_ports) {
282
289
  gpr_mu_unlock(&sp->server->mu);
283
290
  deactivated_all_ports(exec_ctx, sp->server);
@@ -293,34 +300,37 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
293
300
 
294
301
  /* Re-arm the notification event so we get another chance to read. */
295
302
  grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
303
+ gpr_mu_unlock(&sp->server->mu);
296
304
  }
297
305
 
298
306
  static int add_socket_to_server(grpc_udp_server *s, int fd,
299
- const struct sockaddr *addr, size_t addr_len,
307
+ const grpc_resolved_address *addr,
300
308
  grpc_udp_server_read_cb read_cb,
301
309
  grpc_udp_server_orphan_cb orphan_cb) {
302
- server_port *sp;
310
+ grpc_udp_listener *sp;
303
311
  int port;
304
312
  char *addr_str;
305
313
  char *name;
306
314
 
307
- port = prepare_socket(fd, addr, addr_len);
315
+ port = prepare_socket(fd, addr);
308
316
  if (port >= 0) {
309
- grpc_sockaddr_to_string(&addr_str, (struct sockaddr *)&addr, 1);
317
+ grpc_sockaddr_to_string(&addr_str, addr, 1);
310
318
  gpr_asprintf(&name, "udp-server-listener:%s", addr_str);
311
319
  gpr_free(addr_str);
312
320
  gpr_mu_lock(&s->mu);
313
- /* append it to the list under a lock */
314
- if (s->nports == s->port_capacity) {
315
- s->port_capacity *= 2;
316
- s->ports = gpr_realloc(s->ports, sizeof(server_port) * s->port_capacity);
321
+ s->nports++;
322
+ sp = gpr_malloc(sizeof(grpc_udp_listener));
323
+ sp->next = NULL;
324
+ if (s->head == NULL) {
325
+ s->head = sp;
326
+ } else {
327
+ s->tail->next = sp;
317
328
  }
318
- sp = &s->ports[s->nports++];
329
+ s->tail = sp;
319
330
  sp->server = s;
320
331
  sp->fd = fd;
321
332
  sp->emfd = grpc_fd_create(fd, name);
322
- memcpy(sp->addr.untyped, addr, addr_len);
323
- sp->addr_len = addr_len;
333
+ memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
324
334
  sp->read_cb = read_cb;
325
335
  sp->orphan_cb = orphan_cb;
326
336
  GPR_ASSERT(sp->emfd);
@@ -331,34 +341,34 @@ static int add_socket_to_server(grpc_udp_server *s, int fd,
331
341
  return port;
332
342
  }
333
343
 
334
- int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
335
- size_t addr_len, grpc_udp_server_read_cb read_cb,
344
+ int grpc_udp_server_add_port(grpc_udp_server *s,
345
+ const grpc_resolved_address *addr,
346
+ grpc_udp_server_read_cb read_cb,
336
347
  grpc_udp_server_orphan_cb orphan_cb) {
348
+ grpc_udp_listener *sp;
337
349
  int allocated_port1 = -1;
338
350
  int allocated_port2 = -1;
339
- unsigned i;
340
351
  int fd;
341
352
  grpc_dualstack_mode dsmode;
342
- struct sockaddr_in6 addr6_v4mapped;
343
- struct sockaddr_in wild4;
344
- struct sockaddr_in6 wild6;
345
- struct sockaddr_in addr4_copy;
346
- struct sockaddr *allocated_addr = NULL;
347
- struct sockaddr_storage sockname_temp;
348
- socklen_t sockname_len;
353
+ grpc_resolved_address addr6_v4mapped;
354
+ grpc_resolved_address wild4;
355
+ grpc_resolved_address wild6;
356
+ grpc_resolved_address addr4_copy;
357
+ grpc_resolved_address *allocated_addr = NULL;
358
+ grpc_resolved_address sockname_temp;
349
359
  int port;
350
360
 
351
361
  /* Check if this is a wildcard port, and if so, try to keep the port the same
352
362
  as some previously created listener. */
353
363
  if (grpc_sockaddr_get_port(addr) == 0) {
354
- for (i = 0; i < s->nports; i++) {
355
- sockname_len = sizeof(sockname_temp);
356
- if (0 == getsockname(s->ports[i].fd, (struct sockaddr *)&sockname_temp,
357
- &sockname_len)) {
358
- port = grpc_sockaddr_get_port((struct sockaddr *)&sockname_temp);
364
+ for (sp = s->head; sp; sp = sp->next) {
365
+ sockname_temp.len = sizeof(struct sockaddr_storage);
366
+ if (0 == getsockname(sp->fd, (struct sockaddr *)sockname_temp.addr,
367
+ (socklen_t *)&sockname_temp.len)) {
368
+ port = grpc_sockaddr_get_port(&sockname_temp);
359
369
  if (port > 0) {
360
- allocated_addr = gpr_malloc(addr_len);
361
- memcpy(allocated_addr, addr, addr_len);
370
+ allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
371
+ memcpy(allocated_addr, addr, sizeof(grpc_resolved_address));
362
372
  grpc_sockaddr_set_port(allocated_addr, port);
363
373
  addr = allocated_addr;
364
374
  break;
@@ -368,8 +378,7 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
368
378
  }
369
379
 
370
380
  if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
371
- addr = (const struct sockaddr *)&addr6_v4mapped;
372
- addr_len = sizeof(addr6_v4mapped);
381
+ addr = &addr6_v4mapped;
373
382
  }
374
383
 
375
384
  /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
@@ -377,36 +386,33 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
377
386
  grpc_sockaddr_make_wildcards(port, &wild4, &wild6);
378
387
 
379
388
  /* Try listening on IPv6 first. */
380
- addr = (struct sockaddr *)&wild6;
381
- addr_len = sizeof(wild6);
389
+ addr = &wild6;
382
390
  // TODO(rjshade): Test and propagate the returned grpc_error*:
383
- grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode, &fd);
384
- allocated_port1 =
385
- add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb);
391
+ GRPC_ERROR_UNREF(grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP,
392
+ &dsmode, &fd));
393
+ allocated_port1 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb);
386
394
  if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) {
387
395
  goto done;
388
396
  }
389
397
 
390
398
  /* If we didn't get a dualstack socket, also listen on 0.0.0.0. */
391
399
  if (port == 0 && allocated_port1 > 0) {
392
- grpc_sockaddr_set_port((struct sockaddr *)&wild4, allocated_port1);
400
+ grpc_sockaddr_set_port(&wild4, allocated_port1);
393
401
  }
394
- addr = (struct sockaddr *)&wild4;
395
- addr_len = sizeof(wild4);
402
+ addr = &wild4;
396
403
  }
397
404
 
398
405
  // TODO(rjshade): Test and propagate the returned grpc_error*:
399
- grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP, &dsmode, &fd);
406
+ GRPC_ERROR_UNREF(grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP,
407
+ &dsmode, &fd));
400
408
  if (fd < 0) {
401
409
  gpr_log(GPR_ERROR, "Unable to create socket: %s", strerror(errno));
402
410
  }
403
411
  if (dsmode == GRPC_DSMODE_IPV4 &&
404
412
  grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) {
405
- addr = (struct sockaddr *)&addr4_copy;
406
- addr_len = sizeof(addr4_copy);
413
+ addr = &addr4_copy;
407
414
  }
408
- allocated_port2 =
409
- add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb);
415
+ allocated_port2 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb);
410
416
 
411
417
  done:
412
418
  gpr_free(allocated_addr);
@@ -414,29 +420,41 @@ done:
414
420
  }
415
421
 
416
422
  int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned port_index) {
417
- return (port_index < s->nports) ? s->ports[port_index].fd : -1;
423
+ grpc_udp_listener *sp;
424
+ if (port_index >= s->nports) {
425
+ return -1;
426
+ }
427
+
428
+ for (sp = s->head; sp && port_index != 0; sp = sp->next) {
429
+ --port_index;
430
+ }
431
+ return sp->fd;
418
432
  }
419
433
 
420
434
  void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
421
435
  grpc_pollset **pollsets, size_t pollset_count,
422
436
  grpc_server *server) {
423
- size_t i, j;
437
+ size_t i;
424
438
  gpr_mu_lock(&s->mu);
439
+ grpc_udp_listener *sp;
425
440
  GPR_ASSERT(s->active_ports == 0);
426
441
  s->pollsets = pollsets;
427
442
  s->grpc_server = server;
428
- for (i = 0; i < s->nports; i++) {
429
- for (j = 0; j < pollset_count; j++) {
430
- grpc_pollset_add_fd(exec_ctx, pollsets[j], s->ports[i].emfd);
443
+
444
+ sp = s->head;
445
+ while (sp != NULL) {
446
+ for (i = 0; i < pollset_count; i++) {
447
+ grpc_pollset_add_fd(exec_ctx, pollsets[i], sp->emfd);
431
448
  }
432
- s->ports[i].read_closure.cb = on_read;
433
- s->ports[i].read_closure.cb_arg = &s->ports[i];
434
- grpc_fd_notify_on_read(exec_ctx, s->ports[i].emfd,
435
- &s->ports[i].read_closure);
449
+ grpc_closure_init(&sp->read_closure, on_read, sp,
450
+ grpc_schedule_on_exec_ctx);
451
+ grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
452
+
436
453
  s->active_ports++;
454
+ sp = sp->next;
437
455
  }
456
+
438
457
  gpr_mu_unlock(&s->mu);
439
458
  }
440
459
 
441
460
  #endif
442
- #endif