grpc 1.18.0 → 1.22.0

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 (428) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +4731 -7404
  3. data/etc/roots.pem +146 -0
  4. data/include/grpc/grpc.h +11 -6
  5. data/include/grpc/grpc_security.h +297 -4
  6. data/include/grpc/grpc_security_constants.h +1 -1
  7. data/include/grpc/impl/codegen/byte_buffer.h +13 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +30 -7
  10. data/include/grpc/impl/codegen/port_platform.h +88 -7
  11. data/include/grpc/impl/codegen/slice.h +2 -22
  12. data/include/grpc/impl/codegen/status.h +2 -1
  13. data/include/grpc/impl/codegen/sync_posix.h +18 -0
  14. data/include/grpc/slice.h +3 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
  16. data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
  19. data/src/core/ext/filters/client_channel/client_channel.h +2 -10
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  26. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  27. data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
  28. data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
  29. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
  40. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
  41. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
  46. data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
  47. data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
  48. data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
  49. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
  50. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
  51. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  52. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
  53. data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
  65. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  66. data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
  67. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
  68. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
  69. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
  70. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
  71. data/src/core/ext/filters/client_channel/resolver.cc +54 -1
  72. data/src/core/ext/filters/client_channel/resolver.h +52 -23
  73. data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
  74. data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
  75. data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
  77. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
  78. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
  79. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
  80. data/src/core/ext/filters/client_channel/server_address.cc +4 -54
  81. data/src/core/ext/filters/client_channel/server_address.h +1 -13
  82. data/src/core/ext/filters/client_channel/service_config.cc +329 -0
  83. data/src/core/ext/filters/client_channel/service_config.h +205 -0
  84. data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
  85. data/src/core/ext/filters/client_channel/subchannel.h +295 -128
  86. data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
  87. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  88. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
  90. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  91. data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
  92. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  93. data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
  94. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
  95. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
  96. data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
  97. data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
  98. data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
  99. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
  102. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
  104. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
  106. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
  107. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
  109. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
  110. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
  111. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  112. data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
  113. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  114. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
  116. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
  118. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
  120. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  122. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
  131. data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
  136. data/src/core/lib/channel/channel_args.cc +2 -101
  137. data/src/core/lib/channel/channel_args.h +3 -37
  138. data/src/core/lib/channel/channel_stack.h +10 -6
  139. data/src/core/lib/channel/channel_trace.cc +4 -4
  140. data/src/core/lib/channel/channel_trace.h +4 -4
  141. data/src/core/lib/channel/channelz.cc +168 -38
  142. data/src/core/lib/channel/channelz.h +40 -44
  143. data/src/core/lib/channel/channelz_registry.cc +75 -107
  144. data/src/core/lib/channel/channelz_registry.h +10 -28
  145. data/src/core/lib/channel/connected_channel.cc +2 -2
  146. data/src/core/lib/channel/context.h +2 -2
  147. data/src/core/lib/channel/handshaker.cc +151 -218
  148. data/src/core/lib/channel/handshaker.h +110 -101
  149. data/src/core/lib/channel/handshaker_factory.h +11 -19
  150. data/src/core/lib/channel/handshaker_registry.cc +67 -51
  151. data/src/core/lib/channel/handshaker_registry.h +21 -16
  152. data/src/core/lib/compression/algorithm_metadata.h +3 -3
  153. data/src/core/lib/compression/compression.cc +14 -9
  154. data/src/core/lib/compression/compression_args.cc +127 -0
  155. data/src/core/lib/compression/compression_args.h +55 -0
  156. data/src/core/lib/compression/compression_internal.cc +16 -12
  157. data/src/core/lib/compression/compression_internal.h +1 -1
  158. data/src/core/lib/compression/stream_compression.cc +3 -2
  159. data/src/core/lib/compression/stream_compression.h +2 -2
  160. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  161. data/src/core/lib/debug/trace.cc +13 -7
  162. data/src/core/lib/debug/trace.h +14 -1
  163. data/src/core/lib/gpr/arena.h +13 -9
  164. data/src/core/lib/gpr/cpu_posix.cc +5 -3
  165. data/src/core/lib/gpr/env.h +3 -6
  166. data/src/core/lib/gpr/env_linux.cc +6 -1
  167. data/src/core/lib/gpr/env_posix.cc +5 -0
  168. data/src/core/lib/gpr/env_windows.cc +7 -5
  169. data/src/core/lib/gpr/log.cc +9 -13
  170. data/src/core/lib/gpr/log_posix.cc +2 -1
  171. data/src/core/lib/gpr/string.cc +20 -7
  172. data/src/core/lib/gpr/string.h +10 -3
  173. data/src/core/lib/gpr/sync_posix.cc +65 -4
  174. data/src/core/lib/gpr/time.cc +8 -0
  175. data/src/core/lib/gpr/time_posix.cc +21 -2
  176. data/src/core/lib/gprpp/arena.cc +103 -0
  177. data/src/core/lib/gprpp/arena.h +121 -0
  178. data/src/core/lib/gprpp/atomic.h +75 -5
  179. data/src/core/lib/gprpp/fork.cc +13 -32
  180. data/src/core/lib/gprpp/fork.h +5 -1
  181. data/src/core/lib/gprpp/global_config.h +96 -0
  182. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  183. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  184. data/src/core/lib/gprpp/global_config_env.h +131 -0
  185. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  186. data/src/core/lib/gprpp/inlined_vector.h +8 -0
  187. data/src/core/lib/gprpp/map.h +436 -0
  188. data/src/core/lib/gprpp/memory.h +2 -2
  189. data/src/core/lib/gprpp/optional.h +48 -0
  190. data/src/core/lib/gprpp/orphanable.h +6 -5
  191. data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
  192. data/src/core/lib/gprpp/ref_counted.h +36 -17
  193. data/src/core/lib/gprpp/sync.h +126 -0
  194. data/src/core/lib/gprpp/thd.h +42 -7
  195. data/src/core/lib/gprpp/thd_posix.cc +31 -13
  196. data/src/core/lib/gprpp/thd_windows.cc +47 -34
  197. data/src/core/lib/http/httpcli.cc +6 -5
  198. data/src/core/lib/http/httpcli_security_connector.cc +13 -15
  199. data/src/core/lib/http/parser.cc +3 -2
  200. data/src/core/lib/http/parser.h +2 -1
  201. data/src/core/lib/iomgr/buffer_list.cc +182 -24
  202. data/src/core/lib/iomgr/buffer_list.h +72 -10
  203. data/src/core/lib/iomgr/call_combiner.cc +84 -90
  204. data/src/core/lib/iomgr/call_combiner.h +75 -82
  205. data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
  206. data/src/core/lib/iomgr/cfstream_handle.h +86 -0
  207. data/src/core/lib/iomgr/combiner.cc +11 -3
  208. data/src/core/lib/iomgr/combiner.h +1 -1
  209. data/src/core/lib/iomgr/endpoint.cc +2 -2
  210. data/src/core/lib/iomgr/endpoint.h +3 -2
  211. data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
  212. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  213. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  214. data/src/core/lib/iomgr/error.cc +21 -17
  215. data/src/core/lib/iomgr/error.h +36 -6
  216. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  217. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  218. data/src/core/lib/iomgr/error_internal.h +1 -1
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
  222. data/src/core/lib/iomgr/ev_posix.cc +29 -19
  223. data/src/core/lib/iomgr/ev_posix.h +19 -3
  224. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  225. data/src/core/lib/iomgr/exec_ctx.cc +1 -0
  226. data/src/core/lib/iomgr/exec_ctx.h +137 -8
  227. data/src/core/lib/iomgr/executor.cc +147 -95
  228. data/src/core/lib/iomgr/executor.h +55 -49
  229. data/src/core/lib/iomgr/fork_posix.cc +6 -5
  230. data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
  231. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  232. data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
  233. data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
  234. data/src/core/lib/iomgr/internal_errqueue.h +105 -3
  235. data/src/core/lib/iomgr/iomgr.cc +20 -13
  236. data/src/core/lib/iomgr/iomgr.h +15 -0
  237. data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
  238. data/src/core/lib/iomgr/iomgr_custom.h +2 -0
  239. data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
  240. data/src/core/lib/iomgr/iomgr_internal.h +12 -0
  241. data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
  242. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
  243. data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
  244. data/src/core/lib/iomgr/lockfree_event.cc +4 -4
  245. data/src/core/lib/iomgr/port.h +35 -0
  246. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  247. data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
  248. data/src/core/lib/iomgr/resource_quota.cc +40 -37
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
  250. data/src/core/lib/iomgr/socket_windows.cc +19 -0
  251. data/src/core/lib/iomgr/socket_windows.h +8 -0
  252. data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
  253. data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
  254. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +10 -14
  257. data/src/core/lib/iomgr/tcp_posix.cc +256 -140
  258. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  259. data/src/core/lib/iomgr/tcp_server.h +24 -0
  260. data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
  261. data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
  262. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  263. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
  264. data/src/core/lib/iomgr/tcp_uv.cc +5 -7
  265. data/src/core/lib/iomgr/tcp_windows.cc +8 -14
  266. data/src/core/lib/iomgr/timer.h +2 -1
  267. data/src/core/lib/iomgr/timer_generic.cc +16 -16
  268. data/src/core/lib/iomgr/timer_manager.cc +20 -11
  269. data/src/core/lib/iomgr/udp_server.cc +8 -6
  270. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
  271. data/src/core/lib/json/json.cc +1 -4
  272. data/src/core/lib/profiling/basic_timers.cc +10 -4
  273. data/src/core/lib/security/context/security_context.cc +6 -7
  274. data/src/core/lib/security/context/security_context.h +3 -4
  275. data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
  276. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  277. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
  278. data/src/core/lib/security/credentials/credentials.h +9 -1
  279. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
  280. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
  281. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  282. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
  284. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
  285. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
  286. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
  287. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
  288. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  289. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
  290. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
  291. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
  292. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
  293. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
  294. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
  295. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
  296. data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
  297. data/src/core/lib/security/security_connector/security_connector.cc +0 -1
  298. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  299. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
  300. data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
  301. data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
  302. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
  303. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
  304. data/src/core/lib/security/transport/auth_filters.h +5 -2
  305. data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
  306. data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
  307. data/src/core/lib/security/transport/security_handshaker.cc +271 -303
  308. data/src/core/lib/security/transport/security_handshaker.h +11 -2
  309. data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
  310. data/src/core/lib/slice/b64.h +2 -2
  311. data/src/core/lib/slice/percent_encoding.cc +3 -3
  312. data/src/core/lib/slice/percent_encoding.h +3 -3
  313. data/src/core/lib/slice/slice.cc +174 -122
  314. data/src/core/lib/slice/slice_buffer.cc +54 -21
  315. data/src/core/lib/slice/slice_hash_table.h +4 -4
  316. data/src/core/lib/slice/slice_intern.cc +49 -107
  317. data/src/core/lib/slice/slice_internal.h +264 -3
  318. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  319. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  320. data/src/core/lib/slice/slice_utils.h +50 -0
  321. data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
  322. data/src/core/lib/surface/api_trace.h +1 -1
  323. data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
  324. data/src/core/lib/surface/call.cc +67 -46
  325. data/src/core/lib/surface/call.h +7 -2
  326. data/src/core/lib/surface/call_details.cc +0 -1
  327. data/src/core/lib/surface/channel.cc +89 -97
  328. data/src/core/lib/surface/channel.h +60 -6
  329. data/src/core/lib/surface/channel_init.h +5 -0
  330. data/src/core/lib/surface/completion_queue.cc +221 -216
  331. data/src/core/lib/surface/completion_queue.h +2 -1
  332. data/src/core/lib/surface/init.cc +82 -33
  333. data/src/core/lib/surface/init.h +1 -0
  334. data/src/core/lib/surface/init_secure.cc +1 -1
  335. data/src/core/lib/surface/lame_client.cc +5 -7
  336. data/src/core/lib/surface/server.cc +42 -47
  337. data/src/core/lib/surface/validate_metadata.cc +14 -8
  338. data/src/core/lib/surface/validate_metadata.h +13 -2
  339. data/src/core/lib/surface/version.cc +1 -1
  340. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  341. data/src/core/lib/transport/bdp_estimator.h +2 -2
  342. data/src/core/lib/transport/connectivity_state.cc +10 -40
  343. data/src/core/lib/transport/connectivity_state.h +0 -8
  344. data/src/core/lib/transport/error_utils.cc +12 -0
  345. data/src/core/lib/transport/metadata.cc +258 -267
  346. data/src/core/lib/transport/metadata.h +227 -16
  347. data/src/core/lib/transport/metadata_batch.cc +1 -1
  348. data/src/core/lib/transport/metadata_batch.h +1 -1
  349. data/src/core/lib/transport/static_metadata.cc +477 -399
  350. data/src/core/lib/transport/static_metadata.h +273 -182
  351. data/src/core/lib/transport/status_metadata.cc +3 -3
  352. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  353. data/src/core/lib/transport/timeout_encoding.h +1 -1
  354. data/src/core/lib/transport/transport.cc +39 -72
  355. data/src/core/lib/transport/transport.h +59 -24
  356. data/src/core/lib/transport/transport_impl.h +1 -1
  357. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  358. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  359. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  360. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
  361. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  362. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
  363. data/src/core/tsi/fake_transport_security.cc +4 -4
  364. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
  365. data/src/core/tsi/ssl_transport_security.cc +12 -10
  366. data/src/core/tsi/ssl_transport_security.h +24 -4
  367. data/src/ruby/bin/math_pb.rb +18 -16
  368. data/src/ruby/ext/grpc/extconf.rb +12 -4
  369. data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
  370. data/src/ruby/ext/grpc/rb_channel.c +14 -10
  371. data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
  372. data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
  373. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  374. data/src/ruby/ext/grpc/rb_grpc.c +23 -24
  375. data/src/ruby/ext/grpc/rb_grpc.h +4 -2
  376. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
  377. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
  378. data/src/ruby/ext/grpc/rb_server.c +8 -4
  379. data/src/ruby/lib/grpc/errors.rb +22 -3
  380. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  381. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
  382. data/src/ruby/lib/grpc/version.rb +1 -1
  383. data/src/ruby/pb/README.md +1 -1
  384. data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
  385. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
  386. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
  388. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
  389. data/src/ruby/spec/errors_spec.rb +141 -0
  390. data/third_party/cares/cares/ares.h +12 -0
  391. data/third_party/cares/cares/ares_create_query.c +5 -1
  392. data/third_party/cares/cares/ares_data.c +74 -73
  393. data/third_party/cares/cares/ares_destroy.c +6 -1
  394. data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
  395. data/third_party/cares/cares/ares_gethostbyname.c +15 -4
  396. data/third_party/cares/cares/ares_getnameinfo.c +11 -0
  397. data/third_party/cares/cares/ares_init.c +274 -173
  398. data/third_party/cares/cares/ares_library_init.c +21 -3
  399. data/third_party/cares/cares/ares_options.c +6 -2
  400. data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
  401. data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
  402. data/third_party/cares/cares/ares_platform.c +7 -0
  403. data/third_party/cares/cares/ares_private.h +19 -11
  404. data/third_party/cares/cares/ares_process.c +27 -2
  405. data/third_party/cares/cares/ares_rules.h +1 -1
  406. data/third_party/cares/cares/ares_search.c +7 -0
  407. data/third_party/cares/cares/ares_send.c +6 -0
  408. data/third_party/cares/cares/ares_strsplit.c +174 -0
  409. data/third_party/cares/cares/ares_strsplit.h +43 -0
  410. data/third_party/cares/cares/ares_version.h +4 -4
  411. data/third_party/cares/cares/config-win32.h +1 -1
  412. data/third_party/cares/cares/inet_ntop.c +2 -3
  413. data/third_party/cares/config_darwin/ares_config.h +3 -0
  414. data/third_party/cares/config_freebsd/ares_config.h +3 -0
  415. data/third_party/cares/config_linux/ares_config.h +3 -0
  416. data/third_party/cares/config_openbsd/ares_config.h +3 -0
  417. metadata +83 -48
  418. data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
  419. data/src/core/ext/filters/client_channel/request_routing.h +0 -177
  420. data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
  421. data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
  422. data/src/core/lib/channel/handshaker_factory.cc +0 -42
  423. data/src/core/lib/gpr/arena.cc +0 -192
  424. data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
  425. data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
  426. data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
  427. data/src/core/lib/transport/service_config.cc +0 -106
  428. data/src/core/lib/transport/service_config.h +0 -249
@@ -4,16 +4,19 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "grpc.health.v1.HealthCheckRequest" do
8
- optional :service, :string, 1
9
- end
10
- add_message "grpc.health.v1.HealthCheckResponse" do
11
- optional :status, :enum, 1, "grpc.health.v1.HealthCheckResponse.ServingStatus"
12
- end
13
- add_enum "grpc.health.v1.HealthCheckResponse.ServingStatus" do
14
- value :UNKNOWN, 0
15
- value :SERVING, 1
16
- value :NOT_SERVING, 2
7
+ add_file("grpc/health/v1/health.proto", :syntax => :proto3) do
8
+ add_message "grpc.health.v1.HealthCheckRequest" do
9
+ optional :service, :string, 1
10
+ end
11
+ add_message "grpc.health.v1.HealthCheckResponse" do
12
+ optional :status, :enum, 1, "grpc.health.v1.HealthCheckResponse.ServingStatus"
13
+ end
14
+ add_enum "grpc.health.v1.HealthCheckResponse.ServingStatus" do
15
+ value :UNKNOWN, 0
16
+ value :SERVING, 1
17
+ value :NOT_SERVING, 2
18
+ value :SERVICE_UNKNOWN, 3
19
+ end
17
20
  end
18
21
  end
19
22
 
@@ -34,7 +34,25 @@ module Grpc
34
34
  self.unmarshal_class_method = :decode
35
35
  self.service_name = 'grpc.health.v1.Health'
36
36
 
37
+ # If the requested service is unknown, the call will fail with status
38
+ # NOT_FOUND.
37
39
  rpc :Check, HealthCheckRequest, HealthCheckResponse
40
+ # Performs a watch for the serving status of the requested service.
41
+ # The server will immediately send back a message indicating the current
42
+ # serving status. It will then subsequently send a new message whenever
43
+ # the service's serving status changes.
44
+ #
45
+ # If the requested service is unknown when the call is received, the
46
+ # server will send a message setting the serving status to
47
+ # SERVICE_UNKNOWN but will *not* terminate the call. If at some
48
+ # future point, the serving status of the service becomes known, the
49
+ # server will send a new message with the service's serving status.
50
+ #
51
+ # If the call terminates with status UNIMPLEMENTED, then clients
52
+ # should assume this method is not supported and should not retry the
53
+ # call. If the call terminates with any other status (including OK),
54
+ # clients should retry the call with appropriate exponential backoff.
55
+ rpc :Watch, HealthCheckRequest, stream(HealthCheckResponse)
38
56
  end
39
57
 
40
58
  Stub = Service.rpc_stub_class
@@ -4,7 +4,9 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "grpc.testing.Empty" do
7
+ add_file("src/proto/grpc/testing/empty.proto", :syntax => :proto3) do
8
+ add_message "grpc.testing.Empty" do
9
+ end
8
10
  end
9
11
  end
10
12
 
@@ -4,62 +4,64 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "grpc.testing.BoolValue" do
8
- optional :value, :bool, 1
9
- end
10
- add_message "grpc.testing.Payload" do
11
- optional :type, :enum, 1, "grpc.testing.PayloadType"
12
- optional :body, :bytes, 2
13
- end
14
- add_message "grpc.testing.EchoStatus" do
15
- optional :code, :int32, 1
16
- optional :message, :string, 2
17
- end
18
- add_message "grpc.testing.SimpleRequest" do
19
- optional :response_type, :enum, 1, "grpc.testing.PayloadType"
20
- optional :response_size, :int32, 2
21
- optional :payload, :message, 3, "grpc.testing.Payload"
22
- optional :fill_username, :bool, 4
23
- optional :fill_oauth_scope, :bool, 5
24
- optional :response_compressed, :message, 6, "grpc.testing.BoolValue"
25
- optional :response_status, :message, 7, "grpc.testing.EchoStatus"
26
- optional :expect_compressed, :message, 8, "grpc.testing.BoolValue"
27
- end
28
- add_message "grpc.testing.SimpleResponse" do
29
- optional :payload, :message, 1, "grpc.testing.Payload"
30
- optional :username, :string, 2
31
- optional :oauth_scope, :string, 3
32
- end
33
- add_message "grpc.testing.StreamingInputCallRequest" do
34
- optional :payload, :message, 1, "grpc.testing.Payload"
35
- optional :expect_compressed, :message, 2, "grpc.testing.BoolValue"
36
- end
37
- add_message "grpc.testing.StreamingInputCallResponse" do
38
- optional :aggregated_payload_size, :int32, 1
39
- end
40
- add_message "grpc.testing.ResponseParameters" do
41
- optional :size, :int32, 1
42
- optional :interval_us, :int32, 2
43
- optional :compressed, :message, 3, "grpc.testing.BoolValue"
44
- end
45
- add_message "grpc.testing.StreamingOutputCallRequest" do
46
- optional :response_type, :enum, 1, "grpc.testing.PayloadType"
47
- repeated :response_parameters, :message, 2, "grpc.testing.ResponseParameters"
48
- optional :payload, :message, 3, "grpc.testing.Payload"
49
- optional :response_status, :message, 7, "grpc.testing.EchoStatus"
50
- end
51
- add_message "grpc.testing.StreamingOutputCallResponse" do
52
- optional :payload, :message, 1, "grpc.testing.Payload"
53
- end
54
- add_message "grpc.testing.ReconnectParams" do
55
- optional :max_reconnect_backoff_ms, :int32, 1
56
- end
57
- add_message "grpc.testing.ReconnectInfo" do
58
- optional :passed, :bool, 1
59
- repeated :backoff_ms, :int32, 2
60
- end
61
- add_enum "grpc.testing.PayloadType" do
62
- value :COMPRESSABLE, 0
7
+ add_file("src/proto/grpc/testing/messages.proto", :syntax => :proto3) do
8
+ add_message "grpc.testing.BoolValue" do
9
+ optional :value, :bool, 1
10
+ end
11
+ add_message "grpc.testing.Payload" do
12
+ optional :type, :enum, 1, "grpc.testing.PayloadType"
13
+ optional :body, :bytes, 2
14
+ end
15
+ add_message "grpc.testing.EchoStatus" do
16
+ optional :code, :int32, 1
17
+ optional :message, :string, 2
18
+ end
19
+ add_message "grpc.testing.SimpleRequest" do
20
+ optional :response_type, :enum, 1, "grpc.testing.PayloadType"
21
+ optional :response_size, :int32, 2
22
+ optional :payload, :message, 3, "grpc.testing.Payload"
23
+ optional :fill_username, :bool, 4
24
+ optional :fill_oauth_scope, :bool, 5
25
+ optional :response_compressed, :message, 6, "grpc.testing.BoolValue"
26
+ optional :response_status, :message, 7, "grpc.testing.EchoStatus"
27
+ optional :expect_compressed, :message, 8, "grpc.testing.BoolValue"
28
+ end
29
+ add_message "grpc.testing.SimpleResponse" do
30
+ optional :payload, :message, 1, "grpc.testing.Payload"
31
+ optional :username, :string, 2
32
+ optional :oauth_scope, :string, 3
33
+ end
34
+ add_message "grpc.testing.StreamingInputCallRequest" do
35
+ optional :payload, :message, 1, "grpc.testing.Payload"
36
+ optional :expect_compressed, :message, 2, "grpc.testing.BoolValue"
37
+ end
38
+ add_message "grpc.testing.StreamingInputCallResponse" do
39
+ optional :aggregated_payload_size, :int32, 1
40
+ end
41
+ add_message "grpc.testing.ResponseParameters" do
42
+ optional :size, :int32, 1
43
+ optional :interval_us, :int32, 2
44
+ optional :compressed, :message, 3, "grpc.testing.BoolValue"
45
+ end
46
+ add_message "grpc.testing.StreamingOutputCallRequest" do
47
+ optional :response_type, :enum, 1, "grpc.testing.PayloadType"
48
+ repeated :response_parameters, :message, 2, "grpc.testing.ResponseParameters"
49
+ optional :payload, :message, 3, "grpc.testing.Payload"
50
+ optional :response_status, :message, 7, "grpc.testing.EchoStatus"
51
+ end
52
+ add_message "grpc.testing.StreamingOutputCallResponse" do
53
+ optional :payload, :message, 1, "grpc.testing.Payload"
54
+ end
55
+ add_message "grpc.testing.ReconnectParams" do
56
+ optional :max_reconnect_backoff_ms, :int32, 1
57
+ end
58
+ add_message "grpc.testing.ReconnectInfo" do
59
+ optional :passed, :bool, 1
60
+ repeated :backoff_ms, :int32, 2
61
+ end
62
+ add_enum "grpc.testing.PayloadType" do
63
+ value :COMPRESSABLE, 0
64
+ end
63
65
  end
64
66
  end
65
67
 
@@ -6,6 +6,8 @@ require 'google/protobuf'
6
6
  require 'src/proto/grpc/testing/empty_pb'
7
7
  require 'src/proto/grpc/testing/messages_pb'
8
8
  Google::Protobuf::DescriptorPool.generated_pool.build do
9
+ add_file("src/proto/grpc/testing/test.proto", :syntax => :proto3) do
10
+ end
9
11
  end
10
12
 
11
13
  module Grpc
@@ -0,0 +1,141 @@
1
+ # Copyright 2015 gRPC authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'spec_helper'
16
+ require 'google/protobuf/well_known_types'
17
+ require_relative '../pb/src/proto/grpc/testing/messages_pb'
18
+
19
+ describe GRPC::BadStatus do
20
+ describe :attributes do
21
+ it 'has attributes' do
22
+ code = 1
23
+ details = 'details'
24
+ metadata = { 'key' => 'val' }
25
+
26
+ exception = GRPC::BadStatus.new(code, details, metadata)
27
+
28
+ expect(exception.code).to eq code
29
+ expect(exception.details).to eq details
30
+ expect(exception.metadata).to eq metadata
31
+ end
32
+ end
33
+
34
+ describe :new_status_exception do
35
+ let(:codes_and_classes) do
36
+ [
37
+ [GRPC::Core::StatusCodes::OK, GRPC::Ok],
38
+ [GRPC::Core::StatusCodes::CANCELLED, GRPC::Cancelled],
39
+ [GRPC::Core::StatusCodes::UNKNOWN, GRPC::Unknown],
40
+ [GRPC::Core::StatusCodes::INVALID_ARGUMENT, GRPC::InvalidArgument],
41
+ [GRPC::Core::StatusCodes::DEADLINE_EXCEEDED, GRPC::DeadlineExceeded],
42
+ [GRPC::Core::StatusCodes::NOT_FOUND, GRPC::NotFound],
43
+ [GRPC::Core::StatusCodes::ALREADY_EXISTS, GRPC::AlreadyExists],
44
+ [GRPC::Core::StatusCodes::PERMISSION_DENIED, GRPC::PermissionDenied],
45
+ [GRPC::Core::StatusCodes::UNAUTHENTICATED, GRPC::Unauthenticated],
46
+ [GRPC::Core::StatusCodes::RESOURCE_EXHAUSTED, GRPC::ResourceExhausted],
47
+ [GRPC::Core::StatusCodes::FAILED_PRECONDITION, GRPC::FailedPrecondition],
48
+ [GRPC::Core::StatusCodes::ABORTED, GRPC::Aborted],
49
+ [GRPC::Core::StatusCodes::OUT_OF_RANGE, GRPC::OutOfRange],
50
+ [GRPC::Core::StatusCodes::UNIMPLEMENTED, GRPC::Unimplemented],
51
+ [GRPC::Core::StatusCodes::INTERNAL, GRPC::Internal],
52
+ [GRPC::Core::StatusCodes::UNAVAILABLE, GRPC::Unavailable],
53
+ [GRPC::Core::StatusCodes::DATA_LOSS, GRPC::DataLoss],
54
+ [99, GRPC::BadStatus] # Unknown codes default to BadStatus
55
+ ]
56
+ end
57
+
58
+ it 'maps codes to the correct error class' do
59
+ codes_and_classes.each do |code, grpc_error_class|
60
+ exception = GRPC::BadStatus.new_status_exception(code)
61
+
62
+ expect(exception).to be_a grpc_error_class
63
+ end
64
+ end
65
+ end
66
+
67
+ describe :to_status do
68
+ it 'gets status' do
69
+ code = 1
70
+ details = 'details'
71
+ metadata = { 'key' => 'val' }
72
+
73
+ exception = GRPC::BadStatus.new(code, details, metadata)
74
+ status = Struct::Status.new(code, details, metadata)
75
+
76
+ expect(exception.to_status).to eq status
77
+ end
78
+ end
79
+
80
+ describe :to_rpc_status do
81
+ let(:simple_request_any) do
82
+ Google::Protobuf::Any.new.tap do |any|
83
+ any.pack(
84
+ Grpc::Testing::SimpleRequest.new(
85
+ payload: Grpc::Testing::Payload.new(body: 'request')
86
+ )
87
+ )
88
+ end
89
+ end
90
+ let(:simple_response_any) do
91
+ Google::Protobuf::Any.new.tap do |any|
92
+ any.pack(
93
+ Grpc::Testing::SimpleResponse.new(
94
+ payload: Grpc::Testing::Payload.new(body: 'response')
95
+ )
96
+ )
97
+ end
98
+ end
99
+ let(:payload_any) do
100
+ Google::Protobuf::Any.new.tap do |any|
101
+ any.pack(Grpc::Testing::Payload.new(body: 'payload'))
102
+ end
103
+ end
104
+
105
+ it 'decodes proto values' do
106
+ rpc_status = Google::Rpc::Status.new(
107
+ code: 1,
108
+ message: 'matching message',
109
+ details: [simple_request_any, simple_response_any, payload_any]
110
+ )
111
+ rpc_status_proto = Google::Rpc::Status.encode(rpc_status)
112
+
113
+ code = 1
114
+ details = 'details'
115
+ metadata = { 'grpc-status-details-bin' => rpc_status_proto }
116
+
117
+ exception = GRPC::BadStatus.new(code, details, metadata)
118
+
119
+ expect(exception.to_rpc_status).to eq rpc_status
120
+ end
121
+
122
+ it 'does not raise when decoding a bad proto' do
123
+ code = 1
124
+ details = 'details'
125
+ metadata = { 'grpc-status-details-bin' => 'notavalidprotostream' }
126
+
127
+ exception = GRPC::BadStatus.new(code, details, metadata)
128
+
129
+ expect(exception.to_rpc_status).to be nil
130
+
131
+ error_msg = 'parse error: to_rpc_status failed'
132
+ error_desc = '<Google::Protobuf::ParseError> ' \
133
+ 'Error occurred during parsing: Invalid wire type'
134
+
135
+ # Check that the parse error was logged correctly
136
+ log_contents = @log_output.read
137
+ expect(log_contents).to include "WARN GRPC : #{error_msg}"
138
+ expect(log_contents).to include "WARN GRPC : #{error_desc}"
139
+ end
140
+ end
141
+ end
@@ -68,6 +68,10 @@
68
68
  # include <netinet/in.h>
69
69
  #endif
70
70
 
71
+ #if defined(ANDROID) || defined(__ANDROID__)
72
+ #include <jni.h>
73
+ #endif
74
+
71
75
  #ifdef __cplusplus
72
76
  extern "C" {
73
77
  #endif
@@ -160,6 +164,7 @@ extern "C" {
160
164
  #define ARES_OPT_ROTATE (1 << 14)
161
165
  #define ARES_OPT_EDNSPSZ (1 << 15)
162
166
  #define ARES_OPT_NOROTATE (1 << 16)
167
+ #define ARES_OPT_RESOLVCONF (1 << 17)
163
168
 
164
169
  /* Nameinfo flag values */
165
170
  #define ARES_NI_NOFQDN (1 << 0)
@@ -266,6 +271,7 @@ struct ares_options {
266
271
  struct apattern *sortlist;
267
272
  int nsort;
268
273
  int ednspsz;
274
+ char *resolvconf_path;
269
275
  };
270
276
 
271
277
  struct hostent;
@@ -307,6 +313,12 @@ CARES_EXTERN int ares_library_init_mem(int flags,
307
313
  void (*afree)(void *ptr),
308
314
  void *(*arealloc)(void *ptr, size_t size));
309
315
 
316
+ #if defined(ANDROID) || defined(__ANDROID__)
317
+ CARES_EXTERN void ares_library_init_jvm(JavaVM *jvm);
318
+ CARES_EXTERN int ares_library_init_android(jobject connectivity_manager);
319
+ CARES_EXTERN int ares_library_android_initialized(void);
320
+ #endif
321
+
310
322
  CARES_EXTERN int ares_library_initialized(void);
311
323
 
312
324
  CARES_EXTERN void ares_library_cleanup(void);
@@ -94,6 +94,10 @@ int ares_create_query(const char *name, int dnsclass, int type,
94
94
  size_t buflen;
95
95
  unsigned char *buf;
96
96
 
97
+ /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */
98
+ if (ares__is_onion_domain(name))
99
+ return ARES_ENOTFOUND;
100
+
97
101
  /* Set our results early, in case we bail out early with an error. */
98
102
  *buflenp = 0;
99
103
  *bufp = NULL;
@@ -188,7 +192,7 @@ int ares_create_query(const char *name, int dnsclass, int type,
188
192
  * specified in RFC 1035 ("To simplify implementations, the total length of
189
193
  * a domain name (i.e., label octets and label length octets) is restricted
190
194
  * to 255 octets or less."). */
191
- if (buflen > (MAXCDNAME + HFIXEDSZ + QFIXEDSZ +
195
+ if (buflen > (size_t)(MAXCDNAME + HFIXEDSZ + QFIXEDSZ +
192
196
  (max_udp_size ? EDNSFIXEDSZ : 0))) {
193
197
  ares_free (buf);
194
198
  return ARES_EBADNAME;
@@ -40,10 +40,9 @@
40
40
 
41
41
  void ares_free_data(void *dataptr)
42
42
  {
43
- struct ares_data *ptr;
44
-
45
- if (!dataptr)
46
- return;
43
+ while (dataptr != NULL) {
44
+ struct ares_data *ptr;
45
+ void *next_data = NULL;
47
46
 
48
47
  #ifdef __INTEL_COMPILER
49
48
  # pragma warning(push)
@@ -51,80 +50,82 @@ void ares_free_data(void *dataptr)
51
50
  /* 1684: conversion from pointer to same-sized integral type */
52
51
  #endif
53
52
 
54
- ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
53
+ ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
55
54
 
56
55
  #ifdef __INTEL_COMPILER
57
56
  # pragma warning(pop)
58
57
  #endif
59
58
 
60
- if (ptr->mark != ARES_DATATYPE_MARK)
61
- return;
62
-
63
- switch (ptr->type)
64
- {
65
- case ARES_DATATYPE_MX_REPLY:
66
-
67
- if (ptr->data.mx_reply.next)
68
- ares_free_data(ptr->data.mx_reply.next);
69
- if (ptr->data.mx_reply.host)
70
- ares_free(ptr->data.mx_reply.host);
71
- break;
72
-
73
- case ARES_DATATYPE_SRV_REPLY:
74
-
75
- if (ptr->data.srv_reply.next)
76
- ares_free_data(ptr->data.srv_reply.next);
77
- if (ptr->data.srv_reply.host)
78
- ares_free(ptr->data.srv_reply.host);
79
- break;
80
-
81
- case ARES_DATATYPE_TXT_REPLY:
82
- case ARES_DATATYPE_TXT_EXT:
83
-
84
- if (ptr->data.txt_reply.next)
85
- ares_free_data(ptr->data.txt_reply.next);
86
- if (ptr->data.txt_reply.txt)
87
- ares_free(ptr->data.txt_reply.txt);
88
- break;
89
-
90
- case ARES_DATATYPE_ADDR_NODE:
91
-
92
- if (ptr->data.addr_node.next)
93
- ares_free_data(ptr->data.addr_node.next);
94
- break;
95
-
96
- case ARES_DATATYPE_ADDR_PORT_NODE:
97
-
98
- if (ptr->data.addr_port_node.next)
99
- ares_free_data(ptr->data.addr_port_node.next);
100
- break;
101
-
102
- case ARES_DATATYPE_NAPTR_REPLY:
103
-
104
- if (ptr->data.naptr_reply.next)
105
- ares_free_data(ptr->data.naptr_reply.next);
106
- if (ptr->data.naptr_reply.flags)
107
- ares_free(ptr->data.naptr_reply.flags);
108
- if (ptr->data.naptr_reply.service)
109
- ares_free(ptr->data.naptr_reply.service);
110
- if (ptr->data.naptr_reply.regexp)
111
- ares_free(ptr->data.naptr_reply.regexp);
112
- if (ptr->data.naptr_reply.replacement)
113
- ares_free(ptr->data.naptr_reply.replacement);
114
- break;
115
-
116
- case ARES_DATATYPE_SOA_REPLY:
117
- if (ptr->data.soa_reply.nsname)
118
- ares_free(ptr->data.soa_reply.nsname);
119
- if (ptr->data.soa_reply.hostmaster)
120
- ares_free(ptr->data.soa_reply.hostmaster);
121
- break;
122
-
123
- default:
124
- return;
125
- }
126
-
127
- ares_free(ptr);
59
+ if (ptr->mark != ARES_DATATYPE_MARK)
60
+ return;
61
+
62
+ switch (ptr->type)
63
+ {
64
+ case ARES_DATATYPE_MX_REPLY:
65
+
66
+ if (ptr->data.mx_reply.next)
67
+ next_data = ptr->data.mx_reply.next;
68
+ if (ptr->data.mx_reply.host)
69
+ ares_free(ptr->data.mx_reply.host);
70
+ break;
71
+
72
+ case ARES_DATATYPE_SRV_REPLY:
73
+
74
+ if (ptr->data.srv_reply.next)
75
+ next_data = ptr->data.srv_reply.next;
76
+ if (ptr->data.srv_reply.host)
77
+ ares_free(ptr->data.srv_reply.host);
78
+ break;
79
+
80
+ case ARES_DATATYPE_TXT_REPLY:
81
+ case ARES_DATATYPE_TXT_EXT:
82
+
83
+ if (ptr->data.txt_reply.next)
84
+ next_data = ptr->data.txt_reply.next;
85
+ if (ptr->data.txt_reply.txt)
86
+ ares_free(ptr->data.txt_reply.txt);
87
+ break;
88
+
89
+ case ARES_DATATYPE_ADDR_NODE:
90
+
91
+ if (ptr->data.addr_node.next)
92
+ next_data = ptr->data.addr_node.next;
93
+ break;
94
+
95
+ case ARES_DATATYPE_ADDR_PORT_NODE:
96
+
97
+ if (ptr->data.addr_port_node.next)
98
+ next_data = ptr->data.addr_port_node.next;
99
+ break;
100
+
101
+ case ARES_DATATYPE_NAPTR_REPLY:
102
+
103
+ if (ptr->data.naptr_reply.next)
104
+ next_data = ptr->data.naptr_reply.next;
105
+ if (ptr->data.naptr_reply.flags)
106
+ ares_free(ptr->data.naptr_reply.flags);
107
+ if (ptr->data.naptr_reply.service)
108
+ ares_free(ptr->data.naptr_reply.service);
109
+ if (ptr->data.naptr_reply.regexp)
110
+ ares_free(ptr->data.naptr_reply.regexp);
111
+ if (ptr->data.naptr_reply.replacement)
112
+ ares_free(ptr->data.naptr_reply.replacement);
113
+ break;
114
+
115
+ case ARES_DATATYPE_SOA_REPLY:
116
+ if (ptr->data.soa_reply.nsname)
117
+ ares_free(ptr->data.soa_reply.nsname);
118
+ if (ptr->data.soa_reply.hostmaster)
119
+ ares_free(ptr->data.soa_reply.hostmaster);
120
+ break;
121
+
122
+ default:
123
+ return;
124
+ }
125
+
126
+ ares_free(ptr);
127
+ dataptr = next_data;
128
+ }
128
129
  }
129
130
 
130
131
 
@@ -36,6 +36,8 @@ void ares_destroy_options(struct ares_options *options)
36
36
  ares_free(options->sortlist);
37
37
  if(options->lookups)
38
38
  ares_free(options->lookups);
39
+ if(options->resolvconf_path)
40
+ ares_free(options->resolvconf_path);
39
41
  }
40
42
 
41
43
  void ares_destroy(ares_channel channel)
@@ -44,7 +46,7 @@ void ares_destroy(ares_channel channel)
44
46
  struct query *query;
45
47
  struct list_node* list_head;
46
48
  struct list_node* list_node;
47
-
49
+
48
50
  if (!channel)
49
51
  return;
50
52
 
@@ -85,6 +87,9 @@ void ares_destroy(ares_channel channel)
85
87
  if (channel->lookups)
86
88
  ares_free(channel->lookups);
87
89
 
90
+ if (channel->resolvconf_path)
91
+ ares_free(channel->resolvconf_path);
92
+
88
93
  ares_free(channel);
89
94
  }
90
95
 
@@ -157,7 +157,7 @@ static void addr_callback(void *arg, int status, int timeouts,
157
157
  }
158
158
  end_aquery(aquery, status, host);
159
159
  }
160
- else if (status == ARES_EDESTRUCTION)
160
+ else if (status == ARES_EDESTRUCTION || status == ARES_ECANCELLED)
161
161
  end_aquery(aquery, status, NULL);
162
162
  else
163
163
  next_lookup(aquery);
@@ -190,18 +190,18 @@ static int file_lookup(struct ares_addr *addr, struct hostent **host)
190
190
  char tmp[MAX_PATH];
191
191
  HKEY hkeyHosts;
192
192
 
193
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
193
+ if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
194
194
  &hkeyHosts) == ERROR_SUCCESS)
195
195
  {
196
196
  DWORD dwLength = MAX_PATH;
197
- RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
197
+ RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
198
198
  &dwLength);
199
- ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
199
+ ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH);
200
200
  RegCloseKey(hkeyHosts);
201
201
  }
202
202
  }
203
203
  else if (platform == WIN_9X)
204
- GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
204
+ GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH);
205
205
  else
206
206
  return ARES_ENOTFOUND;
207
207