grpc 1.10.0 → 1.11.0.pre2

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 (762) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -501
  3. data/include/grpc/byte_buffer.h +2 -0
  4. data/include/grpc/byte_buffer_reader.h +2 -0
  5. data/include/grpc/census.h +2 -0
  6. data/include/grpc/fork.h +2 -0
  7. data/include/grpc/grpc.h +10 -0
  8. data/include/grpc/grpc_cronet.h +2 -0
  9. data/include/grpc/grpc_posix.h +2 -1
  10. data/include/grpc/grpc_security.h +21 -0
  11. data/include/grpc/grpc_security_constants.h +1 -0
  12. data/include/grpc/impl/codegen/byte_buffer.h +2 -0
  13. data/include/grpc/impl/codegen/grpc_types.h +24 -0
  14. data/include/grpc/impl/codegen/slice.h +1 -1
  15. data/include/grpc/impl/codegen/sync.h +1 -0
  16. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  17. data/include/grpc/impl/codegen/sync_generic.h +2 -0
  18. data/include/grpc/impl/codegen/sync_posix.h +2 -0
  19. data/include/grpc/impl/codegen/sync_windows.h +2 -0
  20. data/include/grpc/slice.h +2 -0
  21. data/include/grpc/slice_buffer.h +2 -0
  22. data/include/grpc/status.h +2 -0
  23. data/include/grpc/support/alloc.h +2 -2
  24. data/include/grpc/support/atm.h +2 -0
  25. data/include/grpc/support/atm_gcc_atomic.h +2 -0
  26. data/include/grpc/support/atm_gcc_sync.h +2 -0
  27. data/include/grpc/support/atm_windows.h +2 -0
  28. data/include/grpc/support/log.h +1 -1
  29. data/include/grpc/support/sync.h +2 -0
  30. data/include/grpc/support/sync_custom.h +2 -0
  31. data/include/grpc/support/sync_generic.h +2 -0
  32. data/include/grpc/support/sync_posix.h +2 -0
  33. data/include/grpc/support/sync_windows.h +2 -0
  34. data/include/grpc/support/time.h +2 -0
  35. data/src/boringssl/err_data.c +444 -438
  36. data/src/core/ext/census/grpc_context.cc +2 -0
  37. data/src/core/ext/filters/client_channel/backup_poller.cc +13 -8
  38. data/src/core/ext/filters/client_channel/backup_poller.h +3 -2
  39. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -0
  40. data/src/core/ext/filters/client_channel/client_channel.cc +1988 -433
  41. data/src/core/ext/filters/client_channel/client_channel.h +2 -0
  42. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -0
  43. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -0
  44. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +2 -27
  45. data/src/core/ext/filters/client_channel/connector.cc +2 -0
  46. data/src/core/ext/filters/client_channel/connector.h +2 -0
  47. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -0
  48. data/src/core/ext/filters/client_channel/http_proxy.cc +2 -0
  49. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -0
  50. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -0
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +2 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +96 -78
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -17
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +70 -62
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +2 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +4 -2
  61. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -2
  62. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +2 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +2 -0
  64. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +3 -1
  65. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
  66. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.h +2 -1
  68. data/src/core/ext/filters/client_channel/method_params.cc +178 -0
  69. data/src/core/ext/filters/client_channel/method_params.h +74 -0
  70. data/src/core/ext/filters/client_channel/parse_address.cc +17 -13
  71. data/src/core/ext/filters/client_channel/parse_address.h +2 -0
  72. data/src/core/ext/filters/client_channel/proxy_mapper.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper.h +2 -0
  74. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  75. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -0
  76. data/src/core/ext/filters/client_channel/resolver.cc +2 -0
  77. data/src/core/ext/filters/client_channel/resolver.h +6 -0
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -5
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -1
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -0
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +55 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +8 -1
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +1 -0
  84. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +30 -3
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -0
  86. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -1
  87. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  88. data/src/core/ext/filters/client_channel/resolver_registry.cc +2 -0
  89. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -0
  90. data/src/core/ext/filters/client_channel/retry_throttle.cc +102 -120
  91. data/src/core/ext/filters/client_channel/retry_throttle.h +52 -25
  92. data/src/core/ext/filters/client_channel/subchannel.cc +14 -4
  93. data/src/core/ext/filters/client_channel/subchannel.h +10 -1
  94. data/src/core/ext/filters/client_channel/subchannel_index.cc +2 -0
  95. data/src/core/ext/filters/client_channel/subchannel_index.h +2 -0
  96. data/src/core/ext/filters/client_channel/uri_parser.cc +2 -1
  97. data/src/core/ext/filters/client_channel/uri_parser.h +2 -1
  98. data/src/core/ext/filters/deadline/deadline_filter.cc +2 -1
  99. data/src/core/ext/filters/deadline/deadline_filter.h +2 -0
  100. data/src/core/ext/filters/http/client/http_client_filter.cc +27 -25
  101. data/src/core/ext/filters/http/client/http_client_filter.h +2 -0
  102. data/src/core/ext/filters/http/client_authority_filter.cc +156 -0
  103. data/src/core/ext/filters/http/client_authority_filter.h +34 -0
  104. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -0
  105. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +21 -22
  106. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +2 -0
  107. data/src/core/ext/filters/http/server/http_server_filter.cc +11 -8
  108. data/src/core/ext/filters/http/server/http_server_filter.h +2 -0
  109. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +2 -0
  110. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +2 -0
  111. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +2 -0
  112. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -0
  113. data/src/core/ext/filters/max_age/max_age_filter.h +2 -0
  114. data/src/core/ext/filters/message_size/message_size_filter.cc +52 -49
  115. data/src/core/ext/filters/message_size/message_size_filter.h +2 -0
  116. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -1
  117. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +2 -0
  118. data/src/core/ext/filters/workarounds/workaround_utils.cc +2 -0
  119. data/src/core/ext/filters/workarounds/workaround_utils.h +2 -0
  120. data/src/core/ext/transport/chttp2/alpn/alpn.cc +3 -1
  121. data/src/core/ext/transport/chttp2/alpn/alpn.h +2 -0
  122. data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
  123. data/src/core/ext/transport/chttp2/client/authority.h +36 -0
  124. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -0
  125. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -0
  126. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +10 -3
  127. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
  128. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +37 -25
  129. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +2 -0
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.h +3 -1
  131. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -1
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -1
  133. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +2 -0
  134. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -1
  135. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -0
  136. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -0
  137. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +2 -0
  138. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +2 -0
  139. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +152 -182
  140. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  141. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
  142. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  143. data/src/core/ext/transport/chttp2/transport/frame.h +2 -1
  144. data/src/core/ext/transport/chttp2/transport/frame_data.cc +15 -19
  145. data/src/core/ext/transport/chttp2/transport/frame_data.h +7 -5
  146. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -0
  147. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -2
  148. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -0
  149. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -1
  150. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -0
  151. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
  152. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
  153. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -2
  154. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +2 -0
  155. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -1
  156. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -0
  157. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -1
  158. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -1
  159. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -2
  160. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -0
  161. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -1
  162. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -0
  163. data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -0
  164. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +2 -0
  165. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +3 -2
  166. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -0
  167. data/src/core/ext/transport/chttp2/transport/internal.h +60 -24
  168. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  169. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
  170. data/src/core/ext/transport/chttp2/transport/stream_map.cc +2 -0
  171. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -0
  172. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -6
  173. data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -0
  174. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -23
  175. data/src/core/ext/transport/inproc/inproc_transport.h +2 -0
  176. data/src/core/lib/avl/avl.cc +2 -0
  177. data/src/core/lib/avl/avl.h +2 -0
  178. data/src/core/lib/backoff/backoff.cc +2 -0
  179. data/src/core/lib/backoff/backoff.h +2 -0
  180. data/src/core/lib/channel/channel_args.h +2 -0
  181. data/src/core/lib/channel/channel_stack.cc +3 -1
  182. data/src/core/lib/channel/channel_stack.h +2 -0
  183. data/src/core/lib/channel/channel_stack_builder.cc +2 -0
  184. data/src/core/lib/channel/channel_stack_builder.h +2 -0
  185. data/src/core/lib/channel/channel_trace.cc +239 -0
  186. data/src/core/lib/channel/channel_trace.h +133 -0
  187. data/src/core/lib/channel/channel_trace_registry.cc +80 -0
  188. data/src/core/lib/channel/channel_trace_registry.h +43 -0
  189. data/src/core/lib/channel/connected_channel.cc +2 -0
  190. data/src/core/lib/channel/connected_channel.h +2 -0
  191. data/src/core/lib/channel/handshaker.cc +2 -0
  192. data/src/core/lib/channel/handshaker.h +2 -0
  193. data/src/core/lib/channel/handshaker_factory.cc +2 -0
  194. data/src/core/lib/channel/handshaker_factory.h +2 -1
  195. data/src/core/lib/channel/handshaker_registry.cc +2 -0
  196. data/src/core/lib/channel/handshaker_registry.h +2 -1
  197. data/src/core/lib/channel/status_util.cc +100 -0
  198. data/src/core/lib/channel/status_util.h +58 -0
  199. data/src/core/lib/compression/algorithm_metadata.h +2 -0
  200. data/src/core/lib/compression/compression.cc +2 -0
  201. data/src/core/lib/compression/compression_internal.cc +2 -0
  202. data/src/core/lib/compression/compression_internal.h +2 -0
  203. data/src/core/lib/compression/message_compress.cc +2 -0
  204. data/src/core/lib/compression/message_compress.h +2 -0
  205. data/src/core/lib/compression/stream_compression.cc +2 -0
  206. data/src/core/lib/compression/stream_compression.h +2 -0
  207. data/src/core/lib/compression/stream_compression_gzip.cc +2 -0
  208. data/src/core/lib/compression/stream_compression_gzip.h +2 -0
  209. data/src/core/lib/compression/stream_compression_identity.cc +2 -1
  210. data/src/core/lib/compression/stream_compression_identity.h +2 -0
  211. data/src/core/lib/debug/stats.cc +2 -0
  212. data/src/core/lib/debug/stats.h +2 -0
  213. data/src/core/lib/debug/stats_data.cc +3 -1
  214. data/src/core/lib/debug/stats_data.h +2 -0
  215. data/src/core/lib/debug/trace.cc +2 -0
  216. data/src/core/lib/debug/trace.h +2 -1
  217. data/src/core/lib/gpr/alloc.cc +2 -1
  218. data/src/core/lib/gpr/arena.cc +47 -0
  219. data/src/core/lib/gpr/arena.h +2 -0
  220. data/src/core/lib/gpr/atm.cc +2 -0
  221. data/src/core/lib/gpr/cpu_linux.cc +5 -1
  222. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  223. data/src/core/lib/gpr/env.h +2 -0
  224. data/src/core/lib/gpr/fork.cc +2 -0
  225. data/src/core/lib/gpr/host_port.cc +2 -0
  226. data/src/core/lib/gpr/log.cc +2 -1
  227. data/src/core/lib/gpr/log_linux.cc +1 -0
  228. data/src/core/lib/gpr/mpscq.cc +2 -0
  229. data/src/core/lib/gpr/mpscq.h +2 -0
  230. data/src/core/lib/gpr/murmur_hash.cc +2 -0
  231. data/src/core/lib/gpr/spinlock.h +2 -0
  232. data/src/core/lib/gpr/string.cc +2 -1
  233. data/src/core/lib/gpr/string.h +2 -2
  234. data/src/core/lib/gpr/sync.cc +2 -0
  235. data/src/core/lib/gpr/time.cc +2 -0
  236. data/src/core/lib/gpr/time_posix.cc +1 -0
  237. data/src/core/lib/gpr/time_precise.cc +2 -0
  238. data/src/core/lib/gpr/time_precise.h +2 -0
  239. data/src/core/lib/gpr/tls_gcc.h +2 -0
  240. data/src/core/lib/gpr/tls_msvc.h +2 -0
  241. data/src/core/lib/gpr/tls_pthread.h +2 -0
  242. data/src/core/lib/gpr/tmpfile.h +2 -0
  243. data/src/core/lib/gprpp/atomic_with_atm.h +2 -0
  244. data/src/core/lib/gprpp/atomic_with_std.h +2 -0
  245. data/src/core/lib/gprpp/inlined_vector.h +2 -0
  246. data/src/core/lib/gprpp/manual_constructor.h +3 -1
  247. data/src/core/lib/gprpp/memory.h +5 -3
  248. data/src/core/lib/gprpp/orphanable.h +3 -0
  249. data/src/core/lib/gprpp/ref_counted.h +4 -0
  250. data/src/core/lib/gprpp/ref_counted_ptr.h +3 -0
  251. data/src/core/lib/gprpp/thd.h +135 -0
  252. data/src/core/lib/gprpp/thd_posix.cc +209 -0
  253. data/src/core/lib/gprpp/thd_windows.cc +162 -0
  254. data/src/core/lib/http/format_request.cc +2 -0
  255. data/src/core/lib/http/format_request.h +2 -0
  256. data/src/core/lib/http/httpcli.cc +2 -0
  257. data/src/core/lib/http/httpcli.h +2 -0
  258. data/src/core/lib/http/httpcli_security_connector.cc +16 -7
  259. data/src/core/lib/http/parser.cc +2 -0
  260. data/src/core/lib/http/parser.h +2 -1
  261. data/src/core/lib/iomgr/call_combiner.cc +2 -0
  262. data/src/core/lib/iomgr/call_combiner.h +2 -1
  263. data/src/core/lib/iomgr/combiner.cc +2 -0
  264. data/src/core/lib/iomgr/combiner.h +2 -0
  265. data/src/core/lib/iomgr/endpoint.cc +4 -0
  266. data/src/core/lib/iomgr/endpoint.h +2 -0
  267. data/src/core/lib/iomgr/endpoint_pair.h +2 -0
  268. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -0
  269. data/src/core/lib/iomgr/endpoint_pair_uv.cc +2 -0
  270. data/src/core/lib/iomgr/endpoint_pair_windows.cc +7 -4
  271. data/src/core/lib/iomgr/error.h +2 -0
  272. data/src/core/lib/iomgr/error_internal.h +2 -0
  273. data/src/core/lib/iomgr/ev_epoll1_linux.cc +2 -0
  274. data/src/core/lib/iomgr/ev_epoll1_linux.h +2 -0
  275. data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -18
  276. data/src/core/lib/iomgr/ev_epollex_linux.h +2 -0
  277. data/src/core/lib/iomgr/ev_epollsig_linux.cc +2 -0
  278. data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -0
  279. data/src/core/lib/iomgr/ev_poll_posix.cc +61 -31
  280. data/src/core/lib/iomgr/ev_poll_posix.h +2 -0
  281. data/src/core/lib/iomgr/ev_posix.cc +35 -19
  282. data/src/core/lib/iomgr/ev_posix.h +2 -0
  283. data/src/core/lib/iomgr/ev_windows.cc +2 -0
  284. data/src/core/lib/iomgr/exec_ctx.cc +3 -1
  285. data/src/core/lib/iomgr/exec_ctx.h +21 -9
  286. data/src/core/lib/iomgr/executor.cc +13 -11
  287. data/src/core/lib/iomgr/executor.h +2 -0
  288. data/src/core/lib/iomgr/fork_posix.cc +4 -2
  289. data/src/core/lib/iomgr/fork_windows.cc +2 -0
  290. data/src/core/lib/iomgr/gethostname_fallback.cc +2 -0
  291. data/src/core/lib/iomgr/gethostname_host_name_max.cc +2 -0
  292. data/src/core/lib/iomgr/gethostname_sysconf.cc +2 -0
  293. data/src/core/lib/iomgr/iocp_windows.cc +3 -1
  294. data/src/core/lib/iomgr/iocp_windows.h +3 -0
  295. data/src/core/lib/iomgr/iomgr.cc +2 -1
  296. data/src/core/lib/iomgr/iomgr.h +2 -0
  297. data/src/core/lib/iomgr/iomgr_custom.cc +63 -0
  298. data/src/core/lib/iomgr/iomgr_custom.h +47 -0
  299. data/src/core/lib/iomgr/iomgr_internal.cc +43 -0
  300. data/src/core/lib/iomgr/iomgr_internal.h +14 -0
  301. data/src/core/lib/iomgr/iomgr_posix.cc +30 -3
  302. data/src/core/lib/iomgr/iomgr_posix.h +2 -0
  303. data/src/core/lib/iomgr/iomgr_uv.cc +17 -20
  304. data/src/core/lib/iomgr/iomgr_windows.cc +29 -3
  305. data/src/core/lib/iomgr/is_epollexclusive_available.cc +2 -0
  306. data/src/core/lib/iomgr/is_epollexclusive_available.h +2 -0
  307. data/src/core/lib/iomgr/load_file.cc +2 -0
  308. data/src/core/lib/iomgr/load_file.h +2 -0
  309. data/src/core/lib/iomgr/lockfree_event.cc +2 -0
  310. data/src/core/lib/iomgr/lockfree_event.h +14 -1
  311. data/src/core/lib/iomgr/nameser.h +2 -0
  312. data/src/core/lib/iomgr/network_status_tracker.cc +3 -1
  313. data/src/core/lib/iomgr/network_status_tracker.h +2 -0
  314. data/src/core/lib/iomgr/polling_entity.cc +2 -0
  315. data/src/core/lib/iomgr/polling_entity.h +2 -0
  316. data/src/core/lib/iomgr/pollset.cc +56 -0
  317. data/src/core/lib/iomgr/pollset.h +19 -0
  318. data/src/core/lib/iomgr/pollset_custom.cc +106 -0
  319. data/src/core/lib/iomgr/{timer_generic.h → pollset_custom.h} +15 -17
  320. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  321. data/src/core/lib/iomgr/pollset_set.h +13 -0
  322. data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
  323. data/src/core/lib/iomgr/{pollset_uv.h → pollset_set_custom.h} +6 -7
  324. data/src/core/lib/iomgr/pollset_set_windows.cc +17 -10
  325. data/src/core/lib/iomgr/pollset_set_windows.h +2 -0
  326. data/src/core/lib/iomgr/pollset_uv.cc +42 -105
  327. data/src/core/lib/iomgr/pollset_windows.cc +20 -12
  328. data/src/core/lib/iomgr/pollset_windows.h +2 -0
  329. data/src/core/lib/iomgr/port.h +10 -19
  330. data/src/core/lib/iomgr/resolve_address.cc +50 -0
  331. data/src/core/lib/iomgr/resolve_address.h +39 -10
  332. data/src/core/lib/iomgr/resolve_address_custom.cc +187 -0
  333. data/src/core/lib/iomgr/resolve_address_custom.h +43 -0
  334. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -22
  335. data/src/core/lib/iomgr/resolve_address_windows.cc +10 -22
  336. data/src/core/lib/iomgr/resource_quota.cc +2 -0
  337. data/src/core/lib/iomgr/resource_quota.h +3 -5
  338. data/src/core/lib/iomgr/sockaddr.h +3 -11
  339. data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
  340. data/src/core/lib/iomgr/sockaddr_posix.h +26 -0
  341. data/src/core/lib/iomgr/sockaddr_utils.cc +91 -71
  342. data/src/core/lib/iomgr/sockaddr_utils.h +4 -0
  343. data/src/core/lib/iomgr/sockaddr_windows.h +21 -0
  344. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -0
  345. data/src/core/lib/iomgr/socket_factory_posix.h +2 -0
  346. data/src/core/lib/iomgr/socket_mutator.cc +2 -0
  347. data/src/core/lib/iomgr/socket_mutator.h +2 -0
  348. data/src/core/lib/iomgr/socket_utils.h +11 -0
  349. data/src/core/lib/iomgr/socket_utils_common_posix.cc +15 -6
  350. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  351. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -2
  352. data/src/core/lib/iomgr/socket_utils_posix.h +2 -0
  353. data/src/core/lib/iomgr/socket_utils_uv.cc +13 -2
  354. data/src/core/lib/iomgr/socket_utils_windows.cc +10 -0
  355. data/src/core/lib/iomgr/socket_windows.cc +2 -0
  356. data/src/core/lib/iomgr/socket_windows.h +2 -1
  357. data/src/core/lib/iomgr/sys_epoll_wrapper.h +2 -0
  358. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  359. data/src/core/lib/iomgr/tcp_client.h +13 -0
  360. data/src/core/lib/iomgr/tcp_client_custom.cc +151 -0
  361. data/src/core/lib/iomgr/tcp_client_posix.cc +11 -24
  362. data/src/core/lib/iomgr/tcp_client_posix.h +2 -0
  363. data/src/core/lib/iomgr/tcp_client_windows.cc +10 -23
  364. data/src/core/lib/iomgr/tcp_custom.cc +365 -0
  365. data/src/core/lib/iomgr/tcp_custom.h +81 -0
  366. data/src/core/lib/iomgr/tcp_posix.cc +3 -1
  367. data/src/core/lib/iomgr/tcp_posix.h +2 -0
  368. data/src/core/lib/iomgr/tcp_server.cc +73 -0
  369. data/src/core/lib/iomgr/tcp_server.h +24 -0
  370. data/src/core/lib/iomgr/tcp_server_custom.cc +472 -0
  371. data/src/core/lib/iomgr/tcp_server_posix.cc +41 -23
  372. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -0
  373. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
  374. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -6
  375. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +2 -0
  376. data/src/core/lib/iomgr/tcp_server_windows.cc +43 -21
  377. data/src/core/lib/iomgr/tcp_uv.cc +308 -314
  378. data/src/core/lib/iomgr/tcp_windows.cc +3 -1
  379. data/src/core/lib/iomgr/tcp_windows.h +2 -0
  380. data/src/core/lib/iomgr/time_averaged_stats.cc +2 -0
  381. data/src/core/lib/iomgr/timer.cc +45 -0
  382. data/src/core/lib/iomgr/timer.h +36 -15
  383. data/src/core/lib/iomgr/timer_custom.cc +93 -0
  384. data/src/core/lib/iomgr/timer_custom.h +43 -0
  385. data/src/core/lib/iomgr/timer_generic.cc +12 -10
  386. data/src/core/lib/iomgr/timer_heap.cc +2 -4
  387. data/src/core/lib/iomgr/timer_heap.h +2 -0
  388. data/src/core/lib/iomgr/timer_manager.cc +12 -20
  389. data/src/core/lib/iomgr/timer_manager.h +2 -0
  390. data/src/core/lib/iomgr/timer_uv.cc +15 -49
  391. data/src/core/lib/iomgr/udp_server.cc +271 -230
  392. data/src/core/lib/iomgr/udp_server.h +44 -20
  393. data/src/core/lib/iomgr/unix_sockets_posix.cc +10 -7
  394. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -0
  395. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -0
  396. data/src/core/lib/iomgr/wakeup_fd_cv.cc +3 -1
  397. data/src/core/lib/iomgr/wakeup_fd_cv.h +2 -0
  398. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +2 -0
  399. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -0
  400. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -0
  401. data/src/core/lib/iomgr/wakeup_fd_pipe.h +2 -0
  402. data/src/core/lib/iomgr/wakeup_fd_posix.cc +2 -0
  403. data/src/core/lib/iomgr/wakeup_fd_posix.h +2 -0
  404. data/src/core/lib/json/json.cc +38 -0
  405. data/src/core/lib/json/json.h +22 -1
  406. data/src/core/lib/json/json_reader.cc +2 -2
  407. data/src/core/lib/json/json_reader.h +1 -0
  408. data/src/core/lib/json/json_string.cc +2 -0
  409. data/src/core/lib/json/json_writer.cc +2 -2
  410. data/src/core/lib/json/json_writer.h +2 -0
  411. data/src/core/lib/profiling/basic_timers.cc +11 -9
  412. data/src/core/lib/profiling/timers.h +6 -3
  413. data/src/core/lib/security/context/security_context.cc +2 -0
  414. data/src/core/lib/security/context/security_context.h +2 -0
  415. data/src/core/lib/security/credentials/alts/alts_credentials.cc +119 -0
  416. data/src/core/lib/security/credentials/alts/alts_credentials.h +102 -0
  417. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  418. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  419. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +67 -0
  420. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  421. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +114 -0
  422. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +126 -0
  423. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  424. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +112 -0
  425. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +58 -0
  426. data/src/core/lib/security/credentials/composite/composite_credentials.cc +2 -0
  427. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -0
  428. data/src/core/lib/security/credentials/credentials.cc +2 -0
  429. data/src/core/lib/security/credentials/credentials.h +2 -0
  430. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -0
  431. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -3
  432. data/src/core/lib/security/credentials/fake/fake_credentials.h +5 -0
  433. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +2 -0
  434. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -0
  435. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -0
  436. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -0
  437. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -0
  438. data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
  439. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -0
  440. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
  441. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -0
  442. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -0
  443. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +2 -0
  444. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -0
  445. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  446. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +11 -2
  447. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -0
  448. data/src/core/lib/security/security_connector/alts_security_connector.cc +287 -0
  449. data/src/core/lib/security/security_connector/alts_security_connector.h +69 -0
  450. data/src/core/lib/security/security_connector/security_connector.cc +174 -74
  451. data/src/core/lib/security/security_connector/security_connector.h +41 -7
  452. data/src/core/lib/security/transport/auth_filters.h +2 -0
  453. data/src/core/lib/security/transport/client_auth_filter.cc +14 -28
  454. data/src/core/lib/security/transport/secure_endpoint.cc +2 -0
  455. data/src/core/lib/security/transport/secure_endpoint.h +2 -0
  456. data/src/core/lib/security/transport/security_handshaker.cc +2 -0
  457. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  458. data/src/core/lib/security/transport/server_auth_filter.cc +2 -0
  459. data/src/core/lib/security/transport/target_authority_table.cc +75 -0
  460. data/src/core/lib/security/transport/{lb_targets_info.h → target_authority_table.h} +16 -8
  461. data/src/core/lib/security/transport/tsi_error.cc +2 -0
  462. data/src/core/lib/security/transport/tsi_error.h +2 -0
  463. data/src/core/lib/security/util/json_util.cc +2 -0
  464. data/src/core/lib/security/util/json_util.h +2 -0
  465. data/src/core/lib/slice/b64.cc +2 -0
  466. data/src/core/lib/slice/b64.h +2 -0
  467. data/src/core/lib/slice/percent_encoding.cc +2 -0
  468. data/src/core/lib/slice/percent_encoding.h +2 -0
  469. data/src/core/lib/slice/slice.cc +2 -0
  470. data/src/core/lib/slice/slice_buffer.cc +3 -1
  471. data/src/core/lib/slice/slice_hash_table.h +178 -45
  472. data/src/core/lib/slice/slice_intern.cc +2 -0
  473. data/src/core/lib/slice/slice_internal.h +2 -2
  474. data/src/core/lib/slice/slice_string_helpers.cc +2 -0
  475. data/src/core/lib/slice/slice_string_helpers.h +2 -1
  476. data/src/core/lib/slice/slice_weak_hash_table.h +105 -0
  477. data/src/core/lib/surface/api_trace.cc +3 -1
  478. data/src/core/lib/surface/api_trace.h +2 -0
  479. data/src/core/lib/surface/byte_buffer.cc +3 -0
  480. data/src/core/lib/surface/byte_buffer_reader.cc +3 -0
  481. data/src/core/lib/surface/call.cc +46 -80
  482. data/src/core/lib/surface/call.h +2 -0
  483. data/src/core/lib/surface/call_details.cc +2 -0
  484. data/src/core/lib/surface/call_log_batch.cc +2 -0
  485. data/src/core/lib/surface/call_test_only.h +2 -0
  486. data/src/core/lib/surface/channel.cc +72 -41
  487. data/src/core/lib/surface/channel.h +2 -0
  488. data/src/core/lib/surface/channel_init.cc +2 -0
  489. data/src/core/lib/surface/channel_init.h +2 -0
  490. data/src/core/lib/surface/channel_ping.cc +2 -0
  491. data/src/core/lib/surface/channel_stack_type.cc +3 -2
  492. data/src/core/lib/surface/channel_stack_type.h +2 -0
  493. data/src/core/lib/surface/completion_queue.h +2 -0
  494. data/src/core/lib/surface/completion_queue_factory.cc +3 -1
  495. data/src/core/lib/surface/completion_queue_factory.h +2 -0
  496. data/src/core/lib/surface/event_string.cc +2 -0
  497. data/src/core/lib/surface/event_string.h +2 -0
  498. data/src/core/lib/surface/init.cc +5 -2
  499. data/src/core/lib/surface/init_secure.cc +5 -2
  500. data/src/core/lib/surface/lame_client.cc +7 -5
  501. data/src/core/lib/surface/lame_client.h +2 -0
  502. data/src/core/lib/surface/metadata_array.cc +2 -0
  503. data/src/core/lib/surface/server.cc +2 -0
  504. data/src/core/lib/surface/server.h +2 -0
  505. data/src/core/lib/surface/validate_metadata.cc +2 -1
  506. data/src/core/lib/surface/validate_metadata.h +2 -0
  507. data/src/core/lib/surface/version.cc +4 -2
  508. data/src/core/lib/transport/bdp_estimator.cc +2 -0
  509. data/src/core/lib/transport/byte_stream.cc +94 -116
  510. data/src/core/lib/transport/byte_stream.h +111 -78
  511. data/src/core/lib/transport/connectivity_state.cc +2 -0
  512. data/src/core/lib/transport/connectivity_state.h +3 -1
  513. data/src/core/lib/transport/error_utils.cc +2 -0
  514. data/src/core/lib/transport/error_utils.h +2 -0
  515. data/src/core/lib/transport/metadata.cc +2 -0
  516. data/src/core/lib/transport/metadata.h +3 -1
  517. data/src/core/lib/transport/metadata_batch.cc +26 -0
  518. data/src/core/lib/transport/metadata_batch.h +12 -1
  519. data/src/core/lib/transport/pid_controller.cc +2 -0
  520. data/src/core/lib/transport/pid_controller.h +2 -0
  521. data/src/core/lib/transport/service_config.cc +21 -175
  522. data/src/core/lib/transport/service_config.h +223 -35
  523. data/src/core/lib/transport/static_metadata.cc +310 -294
  524. data/src/core/lib/transport/static_metadata.h +96 -82
  525. data/src/core/lib/transport/status_conversion.cc +2 -0
  526. data/src/core/lib/transport/status_conversion.h +3 -0
  527. data/src/core/lib/transport/status_metadata.cc +54 -0
  528. data/src/core/lib/{iomgr/timer_uv.h → transport/status_metadata.h} +10 -12
  529. data/src/core/lib/transport/timeout_encoding.cc +2 -1
  530. data/src/core/lib/transport/timeout_encoding.h +2 -0
  531. data/src/core/lib/transport/transport.cc +3 -1
  532. data/src/core/lib/transport/transport.h +33 -7
  533. data/src/core/lib/transport/transport_impl.h +2 -0
  534. data/src/core/lib/transport/transport_op_string.cc +10 -3
  535. data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
  536. data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
  537. data/src/core/tsi/alts/crypt/gsec.cc +189 -0
  538. data/src/core/tsi/alts/crypt/gsec.h +454 -0
  539. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  540. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  541. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  542. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  543. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
  544. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  545. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  546. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  547. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  548. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  549. data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
  550. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  551. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +316 -0
  552. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +137 -0
  553. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +520 -0
  554. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +323 -0
  555. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +143 -0
  556. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +149 -0
  557. data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +73 -0
  558. data/src/core/tsi/alts/handshaker/alts_tsi_event.h +93 -0
  559. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +483 -0
  560. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +83 -0
  561. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +52 -0
  562. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +58 -0
  563. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +52 -0
  564. data/src/core/tsi/alts/handshaker/altscontext.pb.c +48 -0
  565. data/src/core/tsi/alts/handshaker/altscontext.pb.h +64 -0
  566. data/src/core/tsi/alts/handshaker/handshaker.pb.c +123 -0
  567. data/src/core/tsi/alts/handshaker/handshaker.pb.h +255 -0
  568. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +50 -0
  569. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +78 -0
  570. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +196 -0
  571. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +163 -0
  572. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +180 -0
  573. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +52 -0
  574. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  575. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  576. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  577. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  578. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +100 -0
  579. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
  580. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  581. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +296 -0
  582. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +52 -0
  583. data/src/core/tsi/alts_transport_security.cc +3 -1
  584. data/src/core/tsi/alts_transport_security.h +4 -2
  585. data/src/core/tsi/fake_transport_security.cc +2 -1
  586. data/src/core/tsi/fake_transport_security.h +2 -0
  587. data/src/core/tsi/ssl/session_cache/ssl_session.h +73 -0
  588. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +58 -0
  589. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +211 -0
  590. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +93 -0
  591. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +76 -0
  592. data/src/core/tsi/ssl_transport_security.cc +266 -62
  593. data/src/core/tsi/ssl_transport_security.h +128 -6
  594. data/src/core/tsi/ssl_types.h +2 -0
  595. data/src/core/tsi/transport_security.cc +2 -0
  596. data/src/core/tsi/transport_security.h +2 -0
  597. data/src/core/tsi/transport_security_adapter.cc +2 -0
  598. data/src/core/tsi/transport_security_adapter.h +2 -0
  599. data/src/core/tsi/transport_security_grpc.cc +2 -0
  600. data/src/core/tsi/transport_security_grpc.h +2 -0
  601. data/src/core/tsi/transport_security_interface.h +2 -0
  602. data/src/ruby/ext/grpc/extconf.rb +1 -2
  603. data/src/ruby/ext/grpc/rb_call.c +1 -13
  604. data/src/ruby/ext/grpc/rb_channel.c +6 -6
  605. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  606. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -0
  607. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +15 -0
  608. data/src/ruby/lib/grpc/core/time_consts.rb +1 -1
  609. data/src/ruby/lib/grpc/generic/bidi_call.rb +19 -8
  610. data/src/ruby/lib/grpc/generic/client_stub.rb +6 -10
  611. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  612. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
  613. data/src/ruby/lib/grpc/version.rb +1 -1
  614. data/src/ruby/spec/generic/client_stub_spec.rb +133 -0
  615. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +54 -0
  616. data/src/ruby/spec/pb/package_with_underscore/data.proto +23 -0
  617. data/src/ruby/spec/pb/package_with_underscore/service.proto +23 -0
  618. data/third_party/address_sorting/address_sorting.c +369 -0
  619. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  620. data/third_party/address_sorting/address_sorting_posix.c +97 -0
  621. data/third_party/address_sorting/address_sorting_windows.c +55 -0
  622. data/third_party/address_sorting/include/address_sorting/address_sorting.h +110 -0
  623. data/third_party/boringssl/crypto/asn1/a_enum.c +20 -9
  624. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +3 -0
  625. data/third_party/boringssl/crypto/asn1/a_int.c +19 -8
  626. data/third_party/boringssl/crypto/asn1/a_object.c +0 -128
  627. data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
  628. data/third_party/boringssl/crypto/asn1/tasn_fre.c +2 -4
  629. data/third_party/boringssl/crypto/asn1/tasn_new.c +3 -2
  630. data/third_party/boringssl/crypto/bn_extra/bn_asn1.c +0 -16
  631. data/third_party/boringssl/crypto/buf/buf.c +14 -0
  632. data/third_party/boringssl/crypto/bytestring/cbb.c +93 -0
  633. data/third_party/boringssl/crypto/conf/conf.c +2 -2
  634. data/third_party/boringssl/crypto/cpu-intel.c +17 -17
  635. data/third_party/boringssl/crypto/crypto.c +16 -4
  636. data/third_party/boringssl/crypto/curve25519/spake25519.c +11 -11
  637. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +1 -1
  638. data/third_party/boringssl/crypto/dsa/dsa.c +9 -21
  639. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +2 -2
  640. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -8
  641. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +2 -23
  642. data/third_party/boringssl/crypto/ex_data.c +0 -1
  643. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +7 -11
  644. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +19 -16
  645. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +15 -0
  646. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +53 -46
  647. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +242 -85
  648. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +42 -47
  649. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +176 -34
  650. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +118 -65
  651. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +94 -61
  652. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +79 -63
  653. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +26 -28
  654. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +2 -0
  655. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +250 -149
  656. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -27
  657. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +54 -20
  658. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +3 -3
  659. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +7 -41
  660. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +6 -40
  661. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -122
  662. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +3 -64
  663. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +27 -9
  664. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +203 -205
  665. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +14 -15
  666. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +12 -8
  667. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +4 -3
  668. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +25 -36
  669. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +10 -0
  670. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -4
  671. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +2 -0
  672. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +9 -19
  673. data/third_party/boringssl/crypto/lhash/lhash.c +19 -0
  674. data/third_party/boringssl/crypto/obj/obj.c +29 -69
  675. data/third_party/boringssl/crypto/pem/pem_lib.c +2 -2
  676. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +4 -55
  677. data/third_party/boringssl/crypto/rsa_extra/rsa_asn1.c +3 -22
  678. data/third_party/boringssl/crypto/x509/by_dir.c +1 -3
  679. data/third_party/boringssl/crypto/x509/by_file.c +0 -1
  680. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -1
  681. data/third_party/boringssl/crypto/x509/x509_obj.c +1 -3
  682. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -6
  683. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -1
  684. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -1
  685. data/third_party/boringssl/crypto/x509/x_algor.c +2 -2
  686. data/third_party/boringssl/crypto/x509v3/v3_alt.c +3 -4
  687. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -0
  688. data/third_party/boringssl/crypto/x509v3/v3_info.c +1 -2
  689. data/third_party/boringssl/crypto/x509v3/v3_lib.c +15 -7
  690. data/third_party/boringssl/crypto/x509v3/v3_utl.c +41 -2
  691. data/third_party/boringssl/include/openssl/asn1.h +0 -1
  692. data/third_party/boringssl/include/openssl/base.h +1 -1
  693. data/third_party/boringssl/include/openssl/bio.h +5 -2
  694. data/third_party/boringssl/include/openssl/bn.h +2 -17
  695. data/third_party/boringssl/include/openssl/buf.h +4 -0
  696. data/third_party/boringssl/include/openssl/bytestring.h +11 -0
  697. data/third_party/boringssl/include/openssl/chacha.h +5 -1
  698. data/third_party/boringssl/include/openssl/cipher.h +10 -0
  699. data/third_party/boringssl/include/openssl/conf.h +4 -8
  700. data/third_party/boringssl/include/openssl/dsa.h +2 -18
  701. data/third_party/boringssl/include/openssl/ec.h +5 -5
  702. data/third_party/boringssl/include/openssl/ecdsa.h +10 -28
  703. data/third_party/boringssl/include/openssl/evp.h +0 -4
  704. data/third_party/boringssl/include/openssl/lhash.h +1 -18
  705. data/third_party/boringssl/include/openssl/obj.h +1 -0
  706. data/third_party/boringssl/include/openssl/rsa.h +3 -4
  707. data/third_party/boringssl/include/openssl/ssl.h +35 -54
  708. data/third_party/boringssl/include/openssl/ssl3.h +2 -0
  709. data/third_party/boringssl/include/openssl/stack.h +1 -1
  710. data/third_party/boringssl/include/openssl/tls1.h +1 -16
  711. data/third_party/boringssl/include/openssl/x509.h +3 -2
  712. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -2
  713. data/third_party/boringssl/include/openssl/x509v3.h +1 -0
  714. data/third_party/boringssl/ssl/custom_extensions.cc +1 -1
  715. data/third_party/boringssl/ssl/d1_both.cc +120 -129
  716. data/third_party/boringssl/ssl/d1_lib.cc +23 -21
  717. data/third_party/boringssl/ssl/d1_pkt.cc +39 -143
  718. data/third_party/boringssl/ssl/dtls_method.cc +16 -23
  719. data/third_party/boringssl/ssl/dtls_record.cc +11 -4
  720. data/third_party/boringssl/ssl/handshake.cc +109 -40
  721. data/third_party/boringssl/ssl/handshake_client.cc +104 -96
  722. data/third_party/boringssl/ssl/handshake_server.cc +62 -72
  723. data/third_party/boringssl/ssl/internal.h +397 -318
  724. data/third_party/boringssl/ssl/s3_both.cc +173 -191
  725. data/third_party/boringssl/ssl/s3_lib.cc +26 -34
  726. data/third_party/boringssl/ssl/s3_pkt.cc +105 -247
  727. data/third_party/boringssl/ssl/ssl_asn1.cc +22 -22
  728. data/third_party/boringssl/ssl/ssl_buffer.cc +98 -108
  729. data/third_party/boringssl/ssl/ssl_cert.cc +12 -1
  730. data/third_party/boringssl/ssl/ssl_cipher.cc +23 -28
  731. data/third_party/boringssl/ssl/ssl_key_share.cc +11 -6
  732. data/third_party/boringssl/ssl/ssl_lib.cc +190 -113
  733. data/third_party/boringssl/ssl/ssl_privkey.cc +76 -106
  734. data/third_party/boringssl/ssl/ssl_session.cc +3 -3
  735. data/third_party/boringssl/ssl/ssl_stat.cc +3 -3
  736. data/third_party/boringssl/ssl/ssl_transcript.cc +38 -22
  737. data/third_party/boringssl/ssl/ssl_versions.cc +64 -31
  738. data/third_party/boringssl/ssl/t1_enc.cc +137 -154
  739. data/third_party/boringssl/ssl/t1_lib.cc +463 -478
  740. data/third_party/boringssl/ssl/tls13_both.cc +57 -58
  741. data/third_party/boringssl/ssl/tls13_client.cc +256 -121
  742. data/third_party/boringssl/ssl/tls13_enc.cc +187 -72
  743. data/third_party/boringssl/ssl/tls13_server.cc +187 -86
  744. data/third_party/boringssl/ssl/tls_method.cc +20 -30
  745. data/third_party/boringssl/ssl/tls_record.cc +77 -40
  746. data/third_party/boringssl/third_party/fiat/curve25519.c +5062 -0
  747. data/third_party/boringssl/{crypto/curve25519 → third_party/fiat}/internal.h +40 -27
  748. data/third_party/nanopb/pb.h +1 -1
  749. metadata +147 -45
  750. data/src/core/lib/gpr/thd.cc +0 -49
  751. data/src/core/lib/gpr/thd.h +0 -71
  752. data/src/core/lib/gpr/thd_posix.cc +0 -154
  753. data/src/core/lib/gpr/thd_windows.cc +0 -107
  754. data/src/core/lib/iomgr/iomgr_uv.h +0 -37
  755. data/src/core/lib/iomgr/pollset_set_uv.cc +0 -43
  756. data/src/core/lib/iomgr/resolve_address_uv.cc +0 -284
  757. data/src/core/lib/iomgr/tcp_client_uv.cc +0 -175
  758. data/src/core/lib/iomgr/tcp_server_uv.cc +0 -471
  759. data/src/core/lib/iomgr/tcp_uv.h +0 -51
  760. data/src/core/lib/security/transport/lb_targets_info.cc +0 -59
  761. data/src/core/lib/slice/slice_hash_table.cc +0 -145
  762. data/third_party/boringssl/crypto/curve25519/curve25519.c +0 -4938
@@ -21,6 +21,8 @@
21
21
  #define _GNU_SOURCE
22
22
  #endif
23
23
 
24
+ #include <grpc/support/port_platform.h>
25
+
24
26
  #include "src/core/lib/iomgr/port.h"
25
27
 
26
28
  #ifdef GRPC_POSIX_SOCKET
@@ -59,6 +61,11 @@ static bool has_so_reuseport = false;
59
61
  static void init(void) {
60
62
  #ifndef GPR_MANYLINUX1
61
63
  int s = socket(AF_INET, SOCK_STREAM, 0);
64
+ if (s < 0) {
65
+ /* This might be an ipv6-only environment in which case 'socket(AF_INET,..)'
66
+ call would fail. Try creating IPv6 socket in that case */
67
+ s = socket(AF_INET6, SOCK_STREAM, 0);
68
+ }
62
69
  if (s >= 0) {
63
70
  has_so_reuseport = GRPC_LOG_IF_ERROR("check for SO_REUSEPORT",
64
71
  grpc_set_socket_reuse_port(s, 1));
@@ -67,9 +74,9 @@ static void init(void) {
67
74
  #endif
68
75
  }
69
76
 
70
- grpc_error* grpc_tcp_server_create(grpc_closure* shutdown_complete,
71
- const grpc_channel_args* args,
72
- grpc_tcp_server** server) {
77
+ static grpc_error* tcp_server_create(grpc_closure* shutdown_complete,
78
+ const grpc_channel_args* args,
79
+ grpc_tcp_server** server) {
73
80
  gpr_once_init(&check_init, init);
74
81
 
75
82
  grpc_tcp_server* s =
@@ -211,7 +218,8 @@ static void on_read(void* arg, grpc_error* err) {
211
218
  grpc_resolved_address addr;
212
219
  char* addr_str;
213
220
  char* name;
214
- addr.len = sizeof(struct sockaddr_storage);
221
+ memset(&addr, 0, sizeof(addr));
222
+ addr.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
215
223
  /* Note: If we ever decide to return this address to the user, remember to
216
224
  strip off the ::ffff:0.0.0.0/96 prefix first. */
217
225
  int fd = grpc_accept4(sp->fd, &addr, 1, 1);
@@ -390,9 +398,9 @@ static grpc_error* clone_port(grpc_tcp_listener* listener, unsigned count) {
390
398
  return GRPC_ERROR_NONE;
391
399
  }
392
400
 
393
- grpc_error* grpc_tcp_server_add_port(grpc_tcp_server* s,
394
- const grpc_resolved_address* addr,
395
- int* out_port) {
401
+ static grpc_error* tcp_server_add_port(grpc_tcp_server* s,
402
+ const grpc_resolved_address* addr,
403
+ int* out_port) {
396
404
  grpc_tcp_listener* sp;
397
405
  grpc_resolved_address sockname_temp;
398
406
  grpc_resolved_address addr6_v4mapped;
@@ -410,11 +418,12 @@ grpc_error* grpc_tcp_server_add_port(grpc_tcp_server* s,
410
418
  as some previously created listener. */
411
419
  if (requested_port == 0) {
412
420
  for (sp = s->head; sp; sp = sp->next) {
413
- sockname_temp.len = sizeof(struct sockaddr_storage);
421
+ sockname_temp.len =
422
+ static_cast<socklen_t>(sizeof(struct sockaddr_storage));
414
423
  if (0 ==
415
424
  getsockname(sp->fd,
416
- reinterpret_cast<struct sockaddr*>(&sockname_temp.addr),
417
- reinterpret_cast<socklen_t*>(&sockname_temp.len))) {
425
+ reinterpret_cast<grpc_sockaddr*>(&sockname_temp.addr),
426
+ &sockname_temp.len)) {
418
427
  int used_port = grpc_sockaddr_get_port(&sockname_temp);
419
428
  if (used_port > 0) {
420
429
  memcpy(&sockname_temp, addr, sizeof(grpc_resolved_address));
@@ -456,8 +465,7 @@ static grpc_tcp_listener* get_port_index(grpc_tcp_server* s,
456
465
  return nullptr;
457
466
  }
458
467
 
459
- unsigned grpc_tcp_server_port_fd_count(grpc_tcp_server* s,
460
- unsigned port_index) {
468
+ unsigned tcp_server_port_fd_count(grpc_tcp_server* s, unsigned port_index) {
461
469
  unsigned num_fds = 0;
462
470
  gpr_mu_lock(&s->mu);
463
471
  grpc_tcp_listener* sp = get_port_index(s, port_index);
@@ -468,8 +476,8 @@ unsigned grpc_tcp_server_port_fd_count(grpc_tcp_server* s,
468
476
  return num_fds;
469
477
  }
470
478
 
471
- int grpc_tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
472
- unsigned fd_index) {
479
+ static int tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
480
+ unsigned fd_index) {
473
481
  gpr_mu_lock(&s->mu);
474
482
  grpc_tcp_listener* sp = get_port_index(s, port_index);
475
483
  for (; sp; sp = sp->sibling, --fd_index) {
@@ -482,10 +490,10 @@ int grpc_tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
482
490
  return -1;
483
491
  }
484
492
 
485
- void grpc_tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollsets,
486
- size_t pollset_count,
487
- grpc_tcp_server_cb on_accept_cb,
488
- void* on_accept_cb_arg) {
493
+ static void tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollsets,
494
+ size_t pollset_count,
495
+ grpc_tcp_server_cb on_accept_cb,
496
+ void* on_accept_cb_arg) {
489
497
  size_t i;
490
498
  grpc_tcp_listener* sp;
491
499
  GPR_ASSERT(on_accept_cb);
@@ -524,20 +532,20 @@ void grpc_tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollsets,
524
532
  gpr_mu_unlock(&s->mu);
525
533
  }
526
534
 
527
- grpc_tcp_server* grpc_tcp_server_ref(grpc_tcp_server* s) {
535
+ grpc_tcp_server* tcp_server_ref(grpc_tcp_server* s) {
528
536
  gpr_ref_non_zero(&s->refs);
529
537
  return s;
530
538
  }
531
539
 
532
- void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server* s,
533
- grpc_closure* shutdown_starting) {
540
+ static void tcp_server_shutdown_starting_add(grpc_tcp_server* s,
541
+ grpc_closure* shutdown_starting) {
534
542
  gpr_mu_lock(&s->mu);
535
543
  grpc_closure_list_append(&s->shutdown_starting, shutdown_starting,
536
544
  GRPC_ERROR_NONE);
537
545
  gpr_mu_unlock(&s->mu);
538
546
  }
539
547
 
540
- void grpc_tcp_server_unref(grpc_tcp_server* s) {
548
+ static void tcp_server_unref(grpc_tcp_server* s) {
541
549
  if (gpr_unref(&s->refs)) {
542
550
  grpc_tcp_server_shutdown_listeners(s);
543
551
  gpr_mu_lock(&s->mu);
@@ -547,7 +555,7 @@ void grpc_tcp_server_unref(grpc_tcp_server* s) {
547
555
  }
548
556
  }
549
557
 
550
- void grpc_tcp_server_shutdown_listeners(grpc_tcp_server* s) {
558
+ static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {
551
559
  gpr_mu_lock(&s->mu);
552
560
  s->shutdown_listeners = true;
553
561
  /* shutdown all fd's */
@@ -561,4 +569,14 @@ void grpc_tcp_server_shutdown_listeners(grpc_tcp_server* s) {
561
569
  gpr_mu_unlock(&s->mu);
562
570
  }
563
571
 
572
+ grpc_tcp_server_vtable grpc_posix_tcp_server_vtable = {
573
+ tcp_server_create,
574
+ tcp_server_start,
575
+ tcp_server_add_port,
576
+ tcp_server_port_fd_count,
577
+ tcp_server_port_fd,
578
+ tcp_server_ref,
579
+ tcp_server_shutdown_starting_add,
580
+ tcp_server_unref,
581
+ tcp_server_shutdown_listeners};
564
582
  #endif
@@ -19,6 +19,8 @@
19
19
  #ifndef GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
20
20
  #define GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
21
21
 
22
+ #include <grpc/support/port_platform.h>
23
+
22
24
  #include "src/core/lib/iomgr/ev_posix.h"
23
25
  #include "src/core/lib/iomgr/resolve_address.h"
24
26
  #include "src/core/lib/iomgr/socket_utils_posix.h"
@@ -16,6 +16,8 @@
16
16
  *
17
17
  */
18
18
 
19
+ #include <grpc/support/port_platform.h>
20
+
19
21
  #include "src/core/lib/iomgr/port.h"
20
22
 
21
23
  #ifdef GRPC_POSIX_SOCKET
@@ -168,10 +170,8 @@ grpc_error* grpc_tcp_server_prepare_socket(int fd,
168
170
  err = grpc_set_socket_no_sigpipe_if_possible(fd);
169
171
  if (err != GRPC_ERROR_NONE) goto error;
170
172
 
171
- GPR_ASSERT(addr->len < ~(socklen_t)0);
172
- if (bind(fd,
173
- reinterpret_cast<struct sockaddr*>(const_cast<char*>(addr->addr)),
174
- static_cast<socklen_t>(addr->len)) < 0) {
173
+ if (bind(fd, reinterpret_cast<grpc_sockaddr*>(const_cast<char*>(addr->addr)),
174
+ addr->len) < 0) {
175
175
  err = GRPC_OS_ERROR(errno, "bind");
176
176
  goto error;
177
177
  }
@@ -181,10 +181,10 @@ grpc_error* grpc_tcp_server_prepare_socket(int fd,
181
181
  goto error;
182
182
  }
183
183
 
184
- sockname_temp.len = sizeof(struct sockaddr_storage);
184
+ sockname_temp.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
185
185
 
186
- if (getsockname(fd, reinterpret_cast<struct sockaddr*>(sockname_temp.addr),
187
- reinterpret_cast<socklen_t*>(&sockname_temp.len)) < 0) {
186
+ if (getsockname(fd, reinterpret_cast<grpc_sockaddr*>(sockname_temp.addr),
187
+ &sockname_temp.len) < 0) {
188
188
  err = GRPC_OS_ERROR(errno, "getsockname");
189
189
  goto error;
190
190
  }
@@ -16,6 +16,8 @@
16
16
  *
17
17
  */
18
18
 
19
+ #include <grpc/support/port_platform.h>
20
+
19
21
  #include "src/core/lib/iomgr/port.h"
20
22
 
21
23
  #ifdef GRPC_HAVE_IFADDRS
@@ -66,14 +68,14 @@ static grpc_error* get_unused_port(int* port) {
66
68
  if (dsmode == GRPC_DSMODE_IPV4) {
67
69
  grpc_sockaddr_make_wildcard4(0, &wild);
68
70
  }
69
- if (bind(fd, reinterpret_cast<const struct sockaddr*>(wild.addr),
70
- static_cast<socklen_t>(wild.len)) != 0) {
71
+ if (bind(fd, reinterpret_cast<const grpc_sockaddr*>(wild.addr), wild.len) !=
72
+ 0) {
71
73
  err = GRPC_OS_ERROR(errno, "bind");
72
74
  close(fd);
73
75
  return err;
74
76
  }
75
- if (getsockname(fd, reinterpret_cast<struct sockaddr*>(wild.addr),
76
- reinterpret_cast<socklen_t*>(&wild.len)) != 0) {
77
+ if (getsockname(fd, reinterpret_cast<grpc_sockaddr*>(wild.addr), &wild.len) !=
78
+ 0) {
77
79
  err = GRPC_OS_ERROR(errno, "getsockname");
78
80
  close(fd);
79
81
  return err;
@@ -117,9 +119,9 @@ grpc_error* grpc_tcp_server_add_all_local_addrs(grpc_tcp_server* s,
117
119
  if (ifa_it->ifa_addr == nullptr) {
118
120
  continue;
119
121
  } else if (ifa_it->ifa_addr->sa_family == AF_INET) {
120
- addr.len = sizeof(struct sockaddr_in);
122
+ addr.len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
121
123
  } else if (ifa_it->ifa_addr->sa_family == AF_INET6) {
122
- addr.len = sizeof(struct sockaddr_in6);
124
+ addr.len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
123
125
  } else {
124
126
  continue;
125
127
  }
@@ -16,6 +16,8 @@
16
16
  *
17
17
  */
18
18
 
19
+ #include <grpc/support/port_platform.h>
20
+
19
21
  #include "src/core/lib/iomgr/port.h"
20
22
 
21
23
  #if defined(GRPC_POSIX_SOCKET) && !defined(GRPC_HAVE_IFADDRS)
@@ -16,6 +16,8 @@
16
16
  *
17
17
  */
18
18
 
19
+ #include <grpc/support/port_platform.h>
20
+
19
21
  #include "src/core/lib/iomgr/port.h"
20
22
 
21
23
  #ifdef GRPC_WINSOCK_SOCKET
@@ -48,7 +50,7 @@ typedef struct grpc_tcp_listener grpc_tcp_listener;
48
50
  struct grpc_tcp_listener {
49
51
  /* This seemingly magic number comes from AcceptEx's documentation. each
50
52
  address buffer needs to have at least 16 more bytes at their end. */
51
- uint8_t addresses[(sizeof(struct sockaddr_in6) + 16) * 2];
53
+ uint8_t addresses[(sizeof(grpc_sockaddr_in6) + 16) * 2];
52
54
  /* This will hold the socket for the next accept. */
53
55
  SOCKET new_socket;
54
56
  /* The listener winsocket. */
@@ -94,9 +96,9 @@ struct grpc_tcp_server {
94
96
 
95
97
  /* Public function. Allocates the proper data structures to hold a
96
98
  grpc_tcp_server. */
97
- grpc_error* grpc_tcp_server_create(grpc_closure* shutdown_complete,
98
- const grpc_channel_args* args,
99
- grpc_tcp_server** server) {
99
+ static grpc_error* tcp_server_create(grpc_closure* shutdown_complete,
100
+ const grpc_channel_args* args,
101
+ grpc_tcp_server** server) {
100
102
  grpc_tcp_server* s = (grpc_tcp_server*)gpr_malloc(sizeof(grpc_tcp_server));
101
103
  s->channel_args = grpc_channel_args_copy(args);
102
104
  gpr_ref_init(&s->refs, 1);
@@ -140,13 +142,13 @@ static void finish_shutdown_locked(grpc_tcp_server* s) {
140
142
  GRPC_ERROR_NONE);
141
143
  }
142
144
 
143
- grpc_tcp_server* grpc_tcp_server_ref(grpc_tcp_server* s) {
145
+ static grpc_tcp_server* tcp_server_ref(grpc_tcp_server* s) {
144
146
  gpr_ref_non_zero(&s->refs);
145
147
  return s;
146
148
  }
147
149
 
148
- void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server* s,
149
- grpc_closure* shutdown_starting) {
150
+ static void tcp_server_shutdown_starting_add(grpc_tcp_server* s,
151
+ grpc_closure* shutdown_starting) {
150
152
  gpr_mu_lock(&s->mu);
151
153
  grpc_closure_list_append(&s->shutdown_starting, shutdown_starting,
152
154
  GRPC_ERROR_NONE);
@@ -170,7 +172,7 @@ static void tcp_server_destroy(grpc_tcp_server* s) {
170
172
  gpr_mu_unlock(&s->mu);
171
173
  }
172
174
 
173
- void grpc_tcp_server_unref(grpc_tcp_server* s) {
175
+ static void tcp_server_unref(grpc_tcp_server* s) {
174
176
  if (gpr_unref(&s->refs)) {
175
177
  grpc_tcp_server_shutdown_listeners(s);
176
178
  gpr_mu_lock(&s->mu);
@@ -193,7 +195,7 @@ static grpc_error* prepare_socket(SOCKET sock,
193
195
  goto failure;
194
196
  }
195
197
 
196
- if (bind(sock, (const struct sockaddr*)addr->addr, (int)addr->len) ==
198
+ if (bind(sock, (const grpc_sockaddr*)addr->addr, (int)addr->len) ==
197
199
  SOCKET_ERROR) {
198
200
  error = GRPC_WSA_ERROR(WSAGetLastError(), "bind");
199
201
  goto failure;
@@ -205,7 +207,7 @@ static grpc_error* prepare_socket(SOCKET sock,
205
207
  }
206
208
 
207
209
  sockname_temp_len = sizeof(struct sockaddr_storage);
208
- if (getsockname(sock, (struct sockaddr*)sockname_temp.addr,
210
+ if (getsockname(sock, (grpc_sockaddr*)sockname_temp.addr,
209
211
  &sockname_temp_len) == SOCKET_ERROR) {
210
212
  error = GRPC_WSA_ERROR(WSAGetLastError(), "getsockname");
211
213
  goto failure;
@@ -243,7 +245,7 @@ static void decrement_active_ports_and_notify_locked(grpc_tcp_listener* sp) {
243
245
  static grpc_error* start_accept_locked(grpc_tcp_listener* port) {
244
246
  SOCKET sock = INVALID_SOCKET;
245
247
  BOOL success;
246
- DWORD addrlen = sizeof(struct sockaddr_in6) + 16;
248
+ DWORD addrlen = sizeof(grpc_sockaddr_in6) + 16;
247
249
  DWORD bytes_received = 0;
248
250
  grpc_error* error = GRPC_ERROR_NONE;
249
251
 
@@ -341,7 +343,7 @@ static void on_accept(void* arg, grpc_error* error) {
341
343
  gpr_free(utf8_message);
342
344
  }
343
345
  int peer_name_len = (int)peer_name.len;
344
- err = getpeername(sock, (struct sockaddr*)peer_name.addr, &peer_name_len);
346
+ err = getpeername(sock, (grpc_sockaddr*)peer_name.addr, &peer_name_len);
345
347
  peer_name.len = (size_t)peer_name_len;
346
348
  if (!err) {
347
349
  peer_name_string = grpc_sockaddr_to_uri(&peer_name);
@@ -440,9 +442,9 @@ static grpc_error* add_socket_to_server(grpc_tcp_server* s, SOCKET sock,
440
442
  return GRPC_ERROR_NONE;
441
443
  }
442
444
 
443
- grpc_error* grpc_tcp_server_add_port(grpc_tcp_server* s,
444
- const grpc_resolved_address* addr,
445
- int* port) {
445
+ static grpc_error* tcp_server_add_port(grpc_tcp_server* s,
446
+ const grpc_resolved_address* addr,
447
+ int* port) {
446
448
  grpc_tcp_listener* sp = NULL;
447
449
  SOCKET sock;
448
450
  grpc_resolved_address addr6_v4mapped;
@@ -462,7 +464,7 @@ grpc_error* grpc_tcp_server_add_port(grpc_tcp_server* s,
462
464
  for (sp = s->head; sp; sp = sp->next) {
463
465
  int sockname_temp_len = sizeof(struct sockaddr_storage);
464
466
  if (0 == getsockname(sp->socket->socket,
465
- (struct sockaddr*)sockname_temp.addr,
467
+ (grpc_sockaddr*)sockname_temp.addr,
466
468
  &sockname_temp_len)) {
467
469
  sockname_temp.len = (size_t)sockname_temp_len;
468
470
  *port = grpc_sockaddr_get_port(&sockname_temp);
@@ -514,10 +516,10 @@ done:
514
516
  return error;
515
517
  }
516
518
 
517
- void grpc_tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollset,
518
- size_t pollset_count,
519
- grpc_tcp_server_cb on_accept_cb,
520
- void* on_accept_cb_arg) {
519
+ static void tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollset,
520
+ size_t pollset_count,
521
+ grpc_tcp_server_cb on_accept_cb,
522
+ void* on_accept_cb_arg) {
521
523
  grpc_tcp_listener* sp;
522
524
  GPR_ASSERT(on_accept_cb);
523
525
  gpr_mu_lock(&s->mu);
@@ -532,6 +534,26 @@ void grpc_tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollset,
532
534
  gpr_mu_unlock(&s->mu);
533
535
  }
534
536
 
535
- void grpc_tcp_server_shutdown_listeners(grpc_tcp_server* s) {}
537
+ static unsigned tcp_server_port_fd_count(grpc_tcp_server* s,
538
+ unsigned port_index) {
539
+ return 0;
540
+ }
541
+
542
+ static int tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
543
+ unsigned fd_index) {
544
+ return -1;
545
+ }
536
546
 
547
+ static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {}
548
+
549
+ grpc_tcp_server_vtable grpc_windows_tcp_server_vtable = {
550
+ tcp_server_create,
551
+ tcp_server_start,
552
+ tcp_server_add_port,
553
+ tcp_server_port_fd_count,
554
+ tcp_server_port_fd,
555
+ tcp_server_ref,
556
+ tcp_server_shutdown_starting_add,
557
+ tcp_server_unref,
558
+ tcp_server_shutdown_listeners};
537
559
  #endif /* GRPC_WINSOCK_SOCKET */
@@ -16,10 +16,11 @@
16
16
  *
17
17
  */
18
18
 
19
+ #include <grpc/support/port_platform.h>
20
+
19
21
  #include "src/core/lib/iomgr/port.h"
20
22
 
21
23
  #ifdef GRPC_UV
22
-
23
24
  #include <limits.h>
24
25
  #include <string.h>
25
26
 
@@ -31,393 +32,386 @@
31
32
 
32
33
  #include "src/core/lib/gpr/string.h"
33
34
  #include "src/core/lib/iomgr/error.h"
34
- #include "src/core/lib/iomgr/iomgr_uv.h"
35
+ #include "src/core/lib/iomgr/iomgr_custom.h"
35
36
  #include "src/core/lib/iomgr/network_status_tracker.h"
37
+ #include "src/core/lib/iomgr/resolve_address_custom.h"
36
38
  #include "src/core/lib/iomgr/resource_quota.h"
37
- #include "src/core/lib/iomgr/tcp_uv.h"
39
+ #include "src/core/lib/iomgr/tcp_custom.h"
38
40
  #include "src/core/lib/slice/slice_internal.h"
39
41
  #include "src/core/lib/slice/slice_string_helpers.h"
40
42
 
41
- grpc_core::TraceFlag grpc_tcp_trace(false, "tcp");
43
+ #include <uv.h>
42
44
 
43
- typedef struct {
44
- grpc_endpoint base;
45
- gpr_refcount refcount;
45
+ #define IGNORE_CONST(addr) ((grpc_sockaddr*)(uintptr_t)(addr))
46
46
 
47
+ typedef struct uv_socket_t {
48
+ uv_connect_t connect_req;
47
49
  uv_write_t write_req;
48
50
  uv_shutdown_t shutdown_req;
49
-
50
51
  uv_tcp_t* handle;
51
-
52
- grpc_closure* read_cb;
53
- grpc_closure* write_cb;
54
-
55
- grpc_slice_buffer* read_slices;
56
- grpc_slice_buffer* write_slices;
57
52
  uv_buf_t* write_buffers;
58
53
 
59
- grpc_resource_user* resource_user;
60
- grpc_resource_user_slice_allocator slice_allocator;
54
+ char* read_buf;
55
+ size_t read_len;
61
56
 
62
- bool shutting_down;
57
+ bool pending_connection;
58
+ grpc_custom_socket* accept_socket;
59
+ grpc_error* accept_error;
63
60
 
64
- char* peer_string;
65
- grpc_pollset* pollset;
66
- } grpc_tcp;
61
+ grpc_custom_connect_callback connect_cb;
62
+ grpc_custom_write_callback write_cb;
63
+ grpc_custom_read_callback read_cb;
64
+ grpc_custom_accept_callback accept_cb;
65
+ grpc_custom_close_callback close_cb;
67
66
 
68
- static grpc_error* tcp_annotate_error(grpc_error* src_error, grpc_tcp* tcp) {
69
- return grpc_error_set_str(
70
- grpc_error_set_int(
71
- src_error,
72
- /* All tcp errors are marked with UNAVAILABLE so that application may
73
- * choose to retry. */
74
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
75
- GRPC_ERROR_STR_TARGET_ADDRESS,
76
- grpc_slice_from_copied_string(tcp->peer_string));
77
- }
67
+ } uv_socket_t;
78
68
 
79
- static void tcp_free(grpc_tcp* tcp) {
80
- grpc_resource_user_unref(tcp->resource_user);
81
- gpr_free(tcp->handle);
82
- gpr_free(tcp->peer_string);
83
- gpr_free(tcp);
84
- }
85
-
86
- #ifndef NDEBUG
87
- #define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), __FILE__, __LINE__)
88
- #define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
89
- static void tcp_unref(grpc_tcp* tcp, const char* reason, const char* file,
90
- int line) {
91
- if (grpc_tcp_trace.enabled()) {
92
- gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
93
- gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
94
- "TCP unref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
95
- val - 1);
96
- }
97
- if (gpr_unref(&tcp->refcount)) {
98
- tcp_free(tcp);
99
- }
100
- }
101
-
102
- static void tcp_ref(grpc_tcp* tcp, const char* reason, const char* file,
103
- int line) {
104
- if (grpc_tcp_trace.enabled()) {
105
- gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
106
- gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
107
- "TCP ref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
108
- val + 1);
109
- }
110
- gpr_ref(&tcp->refcount);
111
- }
112
- #else
113
- #define TCP_UNREF(tcp, reason) tcp_unref((tcp))
114
- #define TCP_REF(tcp, reason) tcp_ref((tcp))
115
- static void tcp_unref(grpc_tcp* tcp) {
116
- if (gpr_unref(&tcp->refcount)) {
117
- tcp_free(tcp);
69
+ static grpc_error* tcp_error_create(const char* desc, int status) {
70
+ if (status == 0) {
71
+ return GRPC_ERROR_NONE;
118
72
  }
73
+ grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc);
74
+ /* All tcp errors are marked with UNAVAILABLE so that application may
75
+ * choose to retry. */
76
+ error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
77
+ GRPC_STATUS_UNAVAILABLE);
78
+ return grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR,
79
+ grpc_slice_from_static_string(uv_strerror(status)));
119
80
  }
120
81
 
121
- static void tcp_ref(grpc_tcp* tcp) { gpr_ref(&tcp->refcount); }
122
- #endif
123
-
124
- static void uv_close_callback(uv_handle_t* handle) {
125
- grpc_core::ExecCtx exec_ctx;
126
- grpc_tcp* tcp = (grpc_tcp*)handle->data;
127
- TCP_UNREF(tcp, "destroy");
82
+ static void uv_socket_destroy(grpc_custom_socket* socket) {
83
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
84
+ gpr_free(uv_socket->handle);
85
+ gpr_free(uv_socket);
128
86
  }
129
87
 
130
88
  static void alloc_uv_buf(uv_handle_t* handle, size_t suggested_size,
131
89
  uv_buf_t* buf) {
132
- grpc_core::ExecCtx exec_ctx;
133
- grpc_tcp* tcp = (grpc_tcp*)handle->data;
90
+ uv_socket_t* uv_socket =
91
+ (uv_socket_t*)((grpc_custom_socket*)handle->data)->impl;
134
92
  (void)suggested_size;
135
- /* Before calling uv_read_start, we allocate a buffer with exactly one slice
136
- * to tcp->read_slices and wait for the callback indicating that the
137
- * allocation was successful. So slices[0] should always exist here */
138
- buf->base = (char*)GRPC_SLICE_START_PTR(tcp->read_slices->slices[0]);
139
- buf->len = GRPC_SLICE_LENGTH(tcp->read_slices->slices[0]);
140
- }
141
-
142
- static void call_read_cb(grpc_tcp* tcp, grpc_error* error) {
143
- grpc_closure* cb = tcp->read_cb;
144
- if (grpc_tcp_trace.enabled()) {
145
- gpr_log(GPR_DEBUG, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
146
- size_t i;
147
- const char* str = grpc_error_string(error);
148
- gpr_log(GPR_DEBUG, "read: error=%s", str);
149
-
150
- for (i = 0; i < tcp->read_slices->count; i++) {
151
- char* dump = grpc_dump_slice(tcp->read_slices->slices[i],
152
- GPR_DUMP_HEX | GPR_DUMP_ASCII);
153
- gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump);
154
- gpr_free(dump);
155
- }
156
- }
157
- tcp->read_slices = NULL;
158
- tcp->read_cb = NULL;
159
- GRPC_CLOSURE_RUN(cb, error);
93
+ buf->base = uv_socket->read_buf;
94
+ buf->len = uv_socket->read_len;
160
95
  }
161
96
 
162
- static void read_callback(uv_stream_t* stream, ssize_t nread,
163
- const uv_buf_t* buf) {
164
- grpc_error* error;
165
- grpc_core::ExecCtx exec_ctx;
166
- grpc_tcp* tcp = (grpc_tcp*)stream->data;
167
- grpc_slice_buffer garbage;
97
+ static void uv_read_callback(uv_stream_t* stream, ssize_t nread,
98
+ const uv_buf_t* buf) {
99
+ grpc_error* error = GRPC_ERROR_NONE;
168
100
  if (nread == 0) {
169
101
  // Nothing happened. Wait for the next callback
170
102
  return;
171
103
  }
172
- TCP_UNREF(tcp, "read");
173
104
  // TODO(murgatroid99): figure out what the return value here means
174
105
  uv_read_stop(stream);
175
106
  if (nread == UV_EOF) {
176
- error =
177
- tcp_annotate_error(GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF"), tcp);
178
- grpc_slice_buffer_reset_and_unref_internal(tcp->read_slices);
179
- } else if (nread > 0) {
180
- // Successful read
181
- error = GRPC_ERROR_NONE;
182
- if ((size_t)nread < tcp->read_slices->length) {
183
- /* TODO(murgatroid99): Instead of discarding the unused part of the read
184
- * buffer, reuse it as the next read buffer. */
185
- grpc_slice_buffer_init(&garbage);
186
- grpc_slice_buffer_trim_end(
187
- tcp->read_slices, tcp->read_slices->length - (size_t)nread, &garbage);
188
- grpc_slice_buffer_reset_and_unref_internal(&garbage);
189
- }
190
- } else {
191
- // nread < 0: Error
192
- error = tcp_annotate_error(
193
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP Read failed"), tcp);
194
- grpc_slice_buffer_reset_and_unref_internal(tcp->read_slices);
107
+ error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF");
108
+ } else if (nread < 0) {
109
+ error = tcp_error_create("TCP Read failed", nread);
195
110
  }
196
- call_read_cb(tcp, error);
111
+ grpc_custom_socket* socket = (grpc_custom_socket*)stream->data;
112
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
113
+ uv_socket->read_cb(socket, (size_t)nread, error);
197
114
  }
198
115
 
199
- static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
200
- int status;
201
- grpc_tcp* tcp = (grpc_tcp*)tcpp;
202
- if (grpc_tcp_trace.enabled()) {
203
- gpr_log(GPR_DEBUG, "TCP:%p read_allocation_done: %s", tcp,
204
- grpc_error_string(error));
205
- }
206
- if (error == GRPC_ERROR_NONE) {
207
- status =
208
- uv_read_start((uv_stream_t*)tcp->handle, alloc_uv_buf, read_callback);
209
- if (status != 0) {
210
- error = tcp_annotate_error(
211
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP Read failed at start"),
212
- tcp);
213
- error = grpc_error_set_str(
214
- error, GRPC_ERROR_STR_OS_ERROR,
215
- grpc_slice_from_static_string(uv_strerror(status)));
216
- }
217
- }
218
- if (error != GRPC_ERROR_NONE) {
219
- grpc_slice_buffer_reset_and_unref_internal(tcp->read_slices);
220
- call_read_cb(tcp, GRPC_ERROR_REF(error));
221
- TCP_UNREF(tcp, "read");
116
+ static void uv_close_callback(uv_handle_t* handle) {
117
+ grpc_custom_socket* socket = (grpc_custom_socket*)handle->data;
118
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
119
+ if (uv_socket->accept_socket) {
120
+ uv_socket->accept_cb(socket, uv_socket->accept_socket,
121
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("socket closed"));
222
122
  }
223
- if (grpc_tcp_trace.enabled()) {
224
- const char* str = grpc_error_string(error);
225
- gpr_log(GPR_DEBUG, "Initiating read on %p: error=%s", tcp, str);
123
+ uv_socket->close_cb(socket);
124
+ }
125
+
126
+ static void uv_socket_read(grpc_custom_socket* socket, char* buffer,
127
+ size_t length, grpc_custom_read_callback read_cb) {
128
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
129
+ int status;
130
+ grpc_error* error;
131
+ uv_socket->read_cb = read_cb;
132
+ uv_socket->read_buf = buffer;
133
+ uv_socket->read_len = length;
134
+ // TODO(murgatroid99): figure out what the return value here means
135
+ status =
136
+ uv_read_start((uv_stream_t*)uv_socket->handle, (uv_alloc_cb)alloc_uv_buf,
137
+ (uv_read_cb)uv_read_callback);
138
+ if (status != 0) {
139
+ error = tcp_error_create("TCP Read failed at start", status);
140
+ uv_socket->read_cb(socket, 0, error);
226
141
  }
227
142
  }
228
143
 
229
- static void uv_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
230
- grpc_closure* cb) {
231
- grpc_tcp* tcp = (grpc_tcp*)ep;
232
- GRPC_UV_ASSERT_SAME_THREAD();
233
- GPR_ASSERT(tcp->read_cb == NULL);
234
- tcp->read_cb = cb;
235
- tcp->read_slices = read_slices;
236
- grpc_slice_buffer_reset_and_unref_internal(read_slices);
237
- TCP_REF(tcp, "read");
238
- grpc_resource_user_alloc_slices(&tcp->slice_allocator,
239
- GRPC_TCP_DEFAULT_READ_SLICE_SIZE, 1,
240
- tcp->read_slices);
144
+ static void uv_write_callback(uv_write_t* req, int status) {
145
+ grpc_custom_socket* socket = (grpc_custom_socket*)req->data;
146
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
147
+ gpr_free(uv_socket->write_buffers);
148
+ uv_socket->write_cb(socket, tcp_error_create("TCP Write failed", status));
241
149
  }
242
150
 
243
- static void write_callback(uv_write_t* req, int status) {
244
- grpc_tcp* tcp = (grpc_tcp*)req->data;
245
- grpc_error* error;
246
- grpc_core::ExecCtx exec_ctx;
247
- grpc_closure* cb = tcp->write_cb;
248
- tcp->write_cb = NULL;
249
- TCP_UNREF(tcp, "write");
250
- if (status == 0) {
251
- error = GRPC_ERROR_NONE;
252
- } else {
253
- error = tcp_annotate_error(
254
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP Write failed"), tcp);
255
- }
256
- if (grpc_tcp_trace.enabled()) {
257
- const char* str = grpc_error_string(error);
258
- gpr_log(GPR_DEBUG, "write complete on %p: error=%s", tcp, str);
151
+ void uv_socket_write(grpc_custom_socket* socket,
152
+ grpc_slice_buffer* write_slices,
153
+ grpc_custom_write_callback write_cb) {
154
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
155
+ uv_socket->write_cb = write_cb;
156
+ uv_buf_t* uv_buffers;
157
+ uv_write_t* write_req;
158
+
159
+ uv_buffers = (uv_buf_t*)gpr_malloc(sizeof(uv_buf_t) * write_slices->count);
160
+ for (size_t i = 0; i < write_slices->count; i++) {
161
+ uv_buffers[i].base = (char*)GRPC_SLICE_START_PTR(write_slices->slices[i]);
162
+ uv_buffers[i].len = GRPC_SLICE_LENGTH(write_slices->slices[i]);
259
163
  }
260
- gpr_free(tcp->write_buffers);
261
- GRPC_CLOSURE_SCHED(cb, error);
164
+
165
+ uv_socket->write_buffers = uv_buffers;
166
+ write_req = &uv_socket->write_req;
167
+ write_req->data = socket;
168
+ // TODO(murgatroid99): figure out what the return value here means
169
+ uv_write(write_req, (uv_stream_t*)uv_socket->handle, uv_buffers,
170
+ write_slices->count, uv_write_callback);
262
171
  }
263
172
 
264
- static void uv_endpoint_write(grpc_endpoint* ep,
265
- grpc_slice_buffer* write_slices,
266
- grpc_closure* cb) {
267
- grpc_tcp* tcp = (grpc_tcp*)ep;
268
- uv_buf_t* buffers;
269
- unsigned int buffer_count;
270
- unsigned int i;
271
- grpc_slice* slice;
272
- uv_write_t* write_req;
273
- GRPC_UV_ASSERT_SAME_THREAD();
173
+ static void shutdown_callback(uv_shutdown_t* req, int status) {}
274
174
 
275
- if (grpc_tcp_trace.enabled()) {
276
- size_t j;
175
+ static void uv_socket_shutdown(grpc_custom_socket* socket) {
176
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
177
+ uv_shutdown_t* req = &uv_socket->shutdown_req;
178
+ uv_shutdown(req, (uv_stream_t*)uv_socket->handle, shutdown_callback);
179
+ }
277
180
 
278
- for (j = 0; j < write_slices->count; j++) {
279
- char* data = grpc_dump_slice(write_slices->slices[j],
280
- GPR_DUMP_HEX | GPR_DUMP_ASCII);
281
- gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data);
282
- gpr_free(data);
283
- }
181
+ static void uv_socket_close(grpc_custom_socket* socket,
182
+ grpc_custom_close_callback close_cb) {
183
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
184
+ uv_socket->close_cb = close_cb;
185
+ uv_close((uv_handle_t*)uv_socket->handle, uv_close_callback);
186
+ }
187
+
188
+ static grpc_error* uv_socket_init_helper(uv_socket_t* uv_socket, int domain) {
189
+ uv_tcp_t* tcp = (uv_tcp_t*)gpr_malloc(sizeof(uv_tcp_t));
190
+ uv_socket->handle = tcp;
191
+ int status = uv_tcp_init_ex(uv_default_loop(), tcp, (unsigned int)domain);
192
+ if (status != 0) {
193
+ return tcp_error_create("Failed to initialize UV tcp handle", status);
194
+ }
195
+ #if defined(GPR_LINUX) && defined(SO_REUSEPORT)
196
+ if (domain == AF_INET || domain == AF_INET6) {
197
+ int enable = 1;
198
+ int fd;
199
+ uv_fileno((uv_handle_t*)tcp, &fd);
200
+ // TODO Handle error here.
201
+ setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &enable, sizeof(enable));
284
202
  }
203
+ #endif
204
+ uv_socket->write_buffers = nullptr;
205
+ uv_socket->read_len = 0;
206
+ uv_tcp_nodelay(uv_socket->handle, 1);
207
+ uv_socket->pending_connection = false;
208
+ uv_socket->accept_socket = nullptr;
209
+ uv_socket->accept_error = GRPC_ERROR_NONE;
210
+ return GRPC_ERROR_NONE;
211
+ }
285
212
 
286
- if (tcp->shutting_down) {
287
- GRPC_CLOSURE_SCHED(cb,
288
- tcp_annotate_error(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
289
- "TCP socket is shutting down"),
290
- tcp));
291
- return;
213
+ static grpc_error* uv_socket_init(grpc_custom_socket* socket, int domain) {
214
+ uv_socket_t* uv_socket = (uv_socket_t*)gpr_malloc(sizeof(uv_socket_t));
215
+ grpc_error* error = uv_socket_init_helper(uv_socket, domain);
216
+ if (error != GRPC_ERROR_NONE) {
217
+ return error;
292
218
  }
219
+ uv_socket->handle->data = socket;
220
+ socket->impl = uv_socket;
221
+ return GRPC_ERROR_NONE;
222
+ }
223
+
224
+ static grpc_error* uv_socket_getpeername(grpc_custom_socket* socket,
225
+ const grpc_sockaddr* addr,
226
+ int* addr_len) {
227
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
228
+ int err = uv_tcp_getpeername(uv_socket->handle,
229
+ (struct sockaddr*)IGNORE_CONST(addr), addr_len);
230
+ return tcp_error_create("getpeername failed", err);
231
+ }
293
232
 
294
- GPR_ASSERT(tcp->write_cb == NULL);
295
- tcp->write_slices = write_slices;
296
- GPR_ASSERT(tcp->write_slices->count <= UINT_MAX);
297
- if (tcp->write_slices->count == 0) {
298
- // No slices means we don't have to do anything,
299
- // and libuv doesn't like empty writes
300
- GRPC_CLOSURE_SCHED(cb, GRPC_ERROR_NONE);
233
+ static grpc_error* uv_socket_getsockname(grpc_custom_socket* socket,
234
+ const grpc_sockaddr* addr,
235
+ int* addr_len) {
236
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
237
+ int err = uv_tcp_getsockname(uv_socket->handle,
238
+ (struct sockaddr*)IGNORE_CONST(addr), addr_len);
239
+ return tcp_error_create("getsockname failed", err);
240
+ }
241
+
242
+ static void accept_new_connection(grpc_custom_socket* socket) {
243
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
244
+ if (!uv_socket->pending_connection || !uv_socket->accept_socket) {
301
245
  return;
302
246
  }
247
+ grpc_custom_socket* new_socket = uv_socket->accept_socket;
248
+ grpc_error* error = uv_socket->accept_error;
249
+ uv_socket->accept_socket = nullptr;
250
+ uv_socket->accept_error = GRPC_ERROR_NONE;
251
+ uv_socket->pending_connection = false;
252
+ if (uv_socket->accept_error != GRPC_ERROR_NONE) {
253
+ uv_stream_t dummy_handle;
254
+ uv_accept((uv_stream_t*)uv_socket->handle, &dummy_handle);
255
+ uv_socket->accept_cb(socket, new_socket, error);
256
+ } else {
257
+ uv_socket_t* uv_new_socket = (uv_socket_t*)gpr_malloc(sizeof(uv_socket_t));
258
+ uv_socket_init_helper(uv_new_socket, AF_UNSPEC);
259
+ // UV documentation says this is guaranteed to succeed
260
+ GPR_ASSERT(uv_accept((uv_stream_t*)uv_socket->handle,
261
+ (uv_stream_t*)uv_new_socket->handle) == 0);
262
+ new_socket->impl = uv_new_socket;
263
+ uv_new_socket->handle->data = new_socket;
264
+ uv_socket->accept_cb(socket, new_socket, error);
265
+ }
266
+ }
303
267
 
304
- tcp->write_cb = cb;
305
- buffer_count = (unsigned int)tcp->write_slices->count;
306
- buffers = (uv_buf_t*)gpr_malloc(sizeof(uv_buf_t) * buffer_count);
307
- for (i = 0; i < buffer_count; i++) {
308
- slice = &tcp->write_slices->slices[i];
309
- buffers[i].base = (char*)GRPC_SLICE_START_PTR(*slice);
310
- buffers[i].len = GRPC_SLICE_LENGTH(*slice);
268
+ static void uv_on_connect(uv_stream_t* server, int status) {
269
+ grpc_custom_socket* socket = (grpc_custom_socket*)server->data;
270
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
271
+ GPR_ASSERT(!uv_socket->pending_connection);
272
+ uv_socket->pending_connection = true;
273
+ if (status < 0) {
274
+ switch (status) {
275
+ case UV_EINTR:
276
+ case UV_EAGAIN:
277
+ return;
278
+ default:
279
+ uv_socket->accept_error = tcp_error_create("accept failed", status);
280
+ }
311
281
  }
312
- tcp->write_buffers = buffers;
313
- write_req = &tcp->write_req;
314
- write_req->data = tcp;
315
- TCP_REF(tcp, "write");
316
- // TODO(murgatroid99): figure out what the return value here means
317
- uv_write(write_req, (uv_stream_t*)tcp->handle, buffers, buffer_count,
318
- write_callback);
282
+ accept_new_connection(socket);
319
283
  }
320
284
 
321
- static void uv_add_to_pollset(grpc_endpoint* ep, grpc_pollset* pollset) {
322
- // No-op. We're ignoring pollsets currently
323
- (void)ep;
324
- (void)pollset;
325
- grpc_tcp* tcp = (grpc_tcp*)ep;
326
- tcp->pollset = pollset;
285
+ void uv_socket_accept(grpc_custom_socket* socket,
286
+ grpc_custom_socket* new_socket,
287
+ grpc_custom_accept_callback accept_cb) {
288
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
289
+ uv_socket->accept_cb = accept_cb;
290
+ GPR_ASSERT(uv_socket->accept_socket == nullptr);
291
+ uv_socket->accept_socket = new_socket;
292
+ accept_new_connection(socket);
327
293
  }
328
294
 
329
- static void uv_add_to_pollset_set(grpc_endpoint* ep,
330
- grpc_pollset_set* pollset) {
331
- // No-op. We're ignoring pollsets currently
332
- (void)ep;
333
- (void)pollset;
295
+ static grpc_error* uv_socket_bind(grpc_custom_socket* socket,
296
+ const grpc_sockaddr* addr, size_t len,
297
+ int flags) {
298
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
299
+ int status =
300
+ uv_tcp_bind((uv_tcp_t*)uv_socket->handle, (struct sockaddr*)addr, 0);
301
+ return tcp_error_create("Failed to bind to port", status);
334
302
  }
335
303
 
336
- static void uv_delete_from_pollset_set(grpc_endpoint* ep,
337
- grpc_pollset_set* pollset) {
338
- // No-op. We're ignoring pollsets currently
339
- (void)ep;
340
- (void)pollset;
304
+ static grpc_error* uv_socket_listen(grpc_custom_socket* socket) {
305
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
306
+ int status =
307
+ uv_listen((uv_stream_t*)uv_socket->handle, SOMAXCONN, uv_on_connect);
308
+ return tcp_error_create("Failed to listen to port", status);
341
309
  }
342
310
 
343
- static void shutdown_callback(uv_shutdown_t* req, int status) {}
311
+ static void uv_tc_on_connect(uv_connect_t* req, int status) {
312
+ grpc_custom_socket* socket = (grpc_custom_socket*)req->data;
313
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
314
+ grpc_error* error;
315
+ if (status == UV_ECANCELED) {
316
+ // This should only happen if the handle is already closed
317
+ error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Timeout occurred");
318
+ } else {
319
+ error = tcp_error_create("Failed to connect to remote host", status);
320
+ }
321
+ uv_socket->connect_cb(socket, error);
322
+ }
344
323
 
345
- static void uv_endpoint_shutdown(grpc_endpoint* ep, grpc_error* why) {
346
- grpc_tcp* tcp = (grpc_tcp*)ep;
347
- if (!tcp->shutting_down) {
348
- if (grpc_tcp_trace.enabled()) {
349
- const char* str = grpc_error_string(why);
350
- gpr_log(GPR_DEBUG, "TCP %p shutdown why=%s", tcp->handle, str);
351
- }
352
- tcp->shutting_down = true;
353
- uv_shutdown_t* req = &tcp->shutdown_req;
354
- uv_shutdown(req, (uv_stream_t*)tcp->handle, shutdown_callback);
355
- grpc_resource_user_shutdown(tcp->resource_user);
324
+ static void uv_socket_connect(grpc_custom_socket* socket,
325
+ const grpc_sockaddr* addr, size_t len,
326
+ grpc_custom_connect_callback connect_cb) {
327
+ uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
328
+ uv_socket->connect_cb = connect_cb;
329
+ uv_socket->connect_req.data = socket;
330
+ int status = uv_tcp_connect(&uv_socket->connect_req, uv_socket->handle,
331
+ (struct sockaddr*)addr, uv_tc_on_connect);
332
+ if (status != 0) {
333
+ // The callback will not be called
334
+ uv_socket->connect_cb(socket, tcp_error_create("connect failed", status));
356
335
  }
357
- GRPC_ERROR_UNREF(why);
358
336
  }
359
337
 
360
- static void uv_destroy(grpc_endpoint* ep) {
361
- grpc_network_status_unregister_endpoint(ep);
362
- grpc_tcp* tcp = (grpc_tcp*)ep;
363
- uv_close((uv_handle_t*)tcp->handle, uv_close_callback);
338
+ static grpc_resolved_addresses* handle_addrinfo_result(
339
+ struct addrinfo* result) {
340
+ struct addrinfo* resp;
341
+ size_t i;
342
+ grpc_resolved_addresses* addresses =
343
+ (grpc_resolved_addresses*)gpr_malloc(sizeof(grpc_resolved_addresses));
344
+ addresses->naddrs = 0;
345
+ for (resp = result; resp != nullptr; resp = resp->ai_next) {
346
+ addresses->naddrs++;
347
+ }
348
+ addresses->addrs = (grpc_resolved_address*)gpr_malloc(
349
+ sizeof(grpc_resolved_address) * addresses->naddrs);
350
+ for (resp = result, i = 0; resp != nullptr; resp = resp->ai_next, i++) {
351
+ memcpy(&addresses->addrs[i].addr, resp->ai_addr, resp->ai_addrlen);
352
+ addresses->addrs[i].len = resp->ai_addrlen;
353
+ }
354
+ // addrinfo objects are allocated by libuv (e.g. in uv_getaddrinfo)
355
+ // and not by gpr_malloc
356
+ uv_freeaddrinfo(result);
357
+ return addresses;
364
358
  }
365
359
 
366
- static char* uv_get_peer(grpc_endpoint* ep) {
367
- grpc_tcp* tcp = (grpc_tcp*)ep;
368
- return gpr_strdup(tcp->peer_string);
360
+ static void uv_resolve_callback(uv_getaddrinfo_t* req, int status,
361
+ struct addrinfo* res) {
362
+ grpc_custom_resolver* r = (grpc_custom_resolver*)req->data;
363
+ gpr_free(req);
364
+ grpc_resolved_addresses* result = nullptr;
365
+ if (status == 0) {
366
+ result = handle_addrinfo_result(res);
367
+ }
368
+ grpc_custom_resolve_callback(r, result,
369
+ tcp_error_create("getaddrinfo failed", status));
369
370
  }
370
371
 
371
- static grpc_resource_user* uv_get_resource_user(grpc_endpoint* ep) {
372
- grpc_tcp* tcp = (grpc_tcp*)ep;
373
- return tcp->resource_user;
372
+ static grpc_error* uv_resolve(char* host, char* port,
373
+ grpc_resolved_addresses** result) {
374
+ int status;
375
+ uv_getaddrinfo_t req;
376
+ struct addrinfo hints;
377
+ memset(&hints, 0, sizeof(struct addrinfo));
378
+ hints.ai_family = AF_UNSPEC; /* ipv4 or ipv6 */
379
+ hints.ai_socktype = SOCK_STREAM; /* stream socket */
380
+ hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */
381
+ status = uv_getaddrinfo(uv_default_loop(), &req, NULL, host, port, &hints);
382
+ if (status != 0) {
383
+ *result = nullptr;
384
+ } else {
385
+ *result = handle_addrinfo_result(req.addrinfo);
386
+ }
387
+ return tcp_error_create("getaddrinfo failed", status);
374
388
  }
375
389
 
376
- static int uv_get_fd(grpc_endpoint* ep) { return -1; }
377
-
378
- static grpc_endpoint_vtable vtable = {uv_endpoint_read,
379
- uv_endpoint_write,
380
- uv_add_to_pollset,
381
- uv_add_to_pollset_set,
382
- uv_delete_from_pollset_set,
383
- uv_endpoint_shutdown,
384
- uv_destroy,
385
- uv_get_resource_user,
386
- uv_get_peer,
387
- uv_get_fd};
388
-
389
- grpc_endpoint* grpc_tcp_create(uv_tcp_t* handle,
390
- grpc_resource_quota* resource_quota,
391
- char* peer_string) {
392
- grpc_tcp* tcp = (grpc_tcp*)gpr_malloc(sizeof(grpc_tcp));
393
- grpc_core::ExecCtx exec_ctx;
394
-
395
- if (grpc_tcp_trace.enabled()) {
396
- gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp);
390
+ static void uv_resolve_async(grpc_custom_resolver* r, char* host, char* port) {
391
+ int status;
392
+ uv_getaddrinfo_t* req =
393
+ (uv_getaddrinfo_t*)gpr_malloc(sizeof(uv_getaddrinfo_t));
394
+ req->data = r;
395
+ struct addrinfo hints;
396
+ memset(&hints, 0, sizeof(struct addrinfo));
397
+ hints.ai_family = GRPC_AF_UNSPEC; /* ipv4 or ipv6 */
398
+ hints.ai_socktype = GRPC_SOCK_STREAM; /* stream socket */
399
+ hints.ai_flags = GRPC_AI_PASSIVE; /* for wildcard IP address */
400
+ status = uv_getaddrinfo(uv_default_loop(), req, uv_resolve_callback, host,
401
+ port, &hints);
402
+ if (status != 0) {
403
+ gpr_free(req);
404
+ grpc_error* error = tcp_error_create("getaddrinfo failed", status);
405
+ grpc_custom_resolve_callback(r, NULL, error);
397
406
  }
407
+ }
398
408
 
399
- /* Disable Nagle's Algorithm */
400
- uv_tcp_nodelay(handle, 1);
401
-
402
- memset(tcp, 0, sizeof(grpc_tcp));
403
- tcp->base.vtable = &vtable;
404
- tcp->handle = handle;
405
- handle->data = tcp;
406
- gpr_ref_init(&tcp->refcount, 1);
407
- tcp->peer_string = gpr_strdup(peer_string);
408
- tcp->shutting_down = false;
409
- tcp->read_slices = NULL;
410
- tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
411
- grpc_resource_user_slice_allocator_init(
412
- &tcp->slice_allocator, tcp->resource_user, tcp_read_allocation_done, tcp);
413
- /* Tell network status tracking code about the new endpoint */
414
- grpc_network_status_register_endpoint(&tcp->base);
415
-
416
- #ifndef GRPC_UV_TCP_HOLD_LOOP
417
- uv_unref((uv_handle_t*)handle);
418
- #endif
409
+ grpc_custom_resolver_vtable uv_resolver_vtable = {uv_resolve, uv_resolve_async};
419
410
 
420
- return &tcp->base;
421
- }
411
+ grpc_socket_vtable grpc_uv_socket_vtable = {
412
+ uv_socket_init, uv_socket_connect, uv_socket_destroy,
413
+ uv_socket_shutdown, uv_socket_close, uv_socket_write,
414
+ uv_socket_read, uv_socket_getpeername, uv_socket_getsockname,
415
+ uv_socket_bind, uv_socket_listen, uv_socket_accept};
422
416
 
423
- #endif /* GRPC_UV */
417
+ #endif