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
@@ -30,15 +30,29 @@ fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses = ZERO_NULL;
30
30
  fpGetBestRoute2_t ares_fpGetBestRoute2 = ZERO_NULL;
31
31
  #endif
32
32
 
33
+ #if defined(ANDROID) || defined(__ANDROID__)
34
+ #include "ares_android.h"
35
+ #endif
36
+
33
37
  /* library-private global vars with source visibility restricted to this file */
34
38
 
35
39
  static unsigned int ares_initialized;
36
40
  static int ares_init_flags;
37
41
 
38
42
  /* library-private global vars with visibility across the whole library */
39
- void *(*ares_malloc)(size_t size) = malloc;
40
- void *(*ares_realloc)(void *ptr, size_t size) = realloc;
41
- void (*ares_free)(void *ptr) = free;
43
+ #if defined(WIN32)
44
+ /* We need indirections to handle Windows DLL rules. */
45
+ static void *default_malloc(size_t size) { return malloc(size); }
46
+ static void *default_realloc(void *p, size_t size) { return realloc(p, size); }
47
+ static void default_free(void *p) { free(p); }
48
+ #else
49
+ # define default_malloc malloc
50
+ # define default_realloc realloc
51
+ # define default_free free
52
+ #endif
53
+ void *(*ares_malloc)(size_t size) = default_malloc;
54
+ void *(*ares_realloc)(void *ptr, size_t size) = default_realloc;
55
+ void (*ares_free)(void *ptr) = default_free;
42
56
 
43
57
  #ifdef USE_WINSOCK
44
58
  static HMODULE hnd_iphlpapi;
@@ -160,6 +174,10 @@ void ares_library_cleanup(void)
160
174
  if (ares_init_flags & ARES_LIB_INIT_WIN32)
161
175
  ares_win32_cleanup();
162
176
 
177
+ #if defined(ANDROID) || defined(__ANDROID__)
178
+ ares_library_cleanup_android();
179
+ #endif
180
+
163
181
  ares_init_flags = ARES_LIB_INIT_NONE;
164
182
  ares_malloc = malloc;
165
183
  ares_realloc = realloc;
@@ -153,6 +153,9 @@ int ares_set_servers(ares_channel channel,
153
153
  if (!channel)
154
154
  return ARES_ENODATA;
155
155
 
156
+ if (!ares__is_list_empty(&channel->all_queries))
157
+ return ARES_ENOTIMP;
158
+
156
159
  ares__destroy_servers_state(channel);
157
160
 
158
161
  for (srvr = servers; srvr; srvr = srvr->next)
@@ -202,6 +205,9 @@ int ares_set_servers_ports(ares_channel channel,
202
205
  if (!channel)
203
206
  return ARES_ENODATA;
204
207
 
208
+ if (!ares__is_list_empty(&channel->all_queries))
209
+ return ARES_ENOTIMP;
210
+
205
211
  ares__destroy_servers_state(channel);
206
212
 
207
213
  for (srvr = servers; srvr; srvr = srvr->next)
@@ -258,8 +264,6 @@ static int set_servers_csv(ares_channel channel,
258
264
  if (!channel)
259
265
  return ARES_ENODATA;
260
266
 
261
- ares__destroy_servers_state(channel);
262
-
263
267
  i = strlen(_csv);
264
268
  if (i == 0)
265
269
  return ARES_SUCCESS; /* blank all servers */
@@ -110,18 +110,19 @@ ares_parse_naptr_reply (const unsigned char *abuf, int alen,
110
110
  status = ARES_EBADRESP;
111
111
  break;
112
112
  }
113
- /* RR must contain at least 7 bytes = 2 x int16 + 3 x name */
114
- if (rr_len < 7)
115
- {
116
- status = ARES_EBADRESP;
117
- break;
118
- }
119
113
 
120
114
  /* Check if we are really looking at a NAPTR record */
121
115
  if (rr_class == C_IN && rr_type == T_NAPTR)
122
116
  {
123
117
  /* parse the NAPTR record itself */
124
118
 
119
+ /* RR must contain at least 7 bytes = 2 x int16 + 3 x name */
120
+ if (rr_len < 7)
121
+ {
122
+ status = ARES_EBADRESP;
123
+ break;
124
+ }
125
+
125
126
  /* Allocate storage for this NAPTR answer appending it to the list */
126
127
  naptr_curr = ares_malloc_data(ARES_DATATYPE_NAPTR_REPLY);
127
128
  if (!naptr_curr)
@@ -52,6 +52,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
52
52
  int aliascnt = 0;
53
53
  int alias_alloc = 8;
54
54
  char ** aliases;
55
+ size_t rr_data_len;
55
56
 
56
57
  /* Set *host to NULL for all failure cases. */
57
58
  *host = NULL;
@@ -124,14 +125,15 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
124
125
  if (hostname)
125
126
  ares_free(hostname);
126
127
  hostname = rr_data;
127
- aliases[aliascnt] = ares_malloc((strlen(rr_data)+1) * sizeof(char));
128
+ rr_data_len = strlen(rr_data)+1;
129
+ aliases[aliascnt] = ares_malloc(rr_data_len * sizeof(char));
128
130
  if (!aliases[aliascnt])
129
131
  {
130
132
  ares_free(rr_name);
131
133
  status = ARES_ENOMEM;
132
134
  break;
133
135
  }
134
- strncpy(aliases[aliascnt], rr_data, strlen(rr_data)+1);
136
+ strncpy(aliases[aliascnt], rr_data, rr_data_len);
135
137
  aliascnt++;
136
138
  if (aliascnt >= alias_alloc) {
137
139
  char **ptr;
@@ -36,6 +36,10 @@ win_platform ares__getplatform(void)
36
36
 
37
37
  memset(&OsvEx, 0, sizeof(OsvEx));
38
38
  OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
39
+ #ifdef _MSC_VER
40
+ #pragma warning(push)
41
+ #pragma warning(disable:4996) /* warning C4996: 'GetVersionExW': was declared deprecated */
42
+ #endif
39
43
  if (!GetVersionEx((void *)&OsvEx))
40
44
  {
41
45
  memset(&OsvEx, 0, sizeof(OsvEx));
@@ -43,6 +47,9 @@ win_platform ares__getplatform(void)
43
47
  if (!GetVersionEx((void *)&OsvEx))
44
48
  return WIN_UNKNOWN;
45
49
  }
50
+ #ifdef _MSC_VER
51
+ #pragma warning(pop)
52
+ #endif
46
53
 
47
54
  switch(OsvEx.dwPlatformId)
48
55
  {
@@ -52,18 +52,19 @@
52
52
 
53
53
  #if defined(WIN32) && !defined(WATT32)
54
54
 
55
- #define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
56
- #define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
57
- #define WIN_DNSCLIENT "Software\\Policies\\Microsoft\\System\\DNSClient"
58
- #define NAMESERVER "NameServer"
59
- #define DHCPNAMESERVER "DhcpNameServer"
60
- #define DATABASEPATH "DatabasePath"
61
- #define WIN_PATH_HOSTS "\\hosts"
62
- #define SEARCHLIST_KEY "SearchList"
55
+ #define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
56
+ #define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
57
+ #define WIN_DNSCLIENT "Software\\Policies\\Microsoft\\System\\DNSClient"
58
+ #define WIN_NT_DNSCLIENT "Software\\Policies\\Microsoft\\Windows NT\\DNSClient"
59
+ #define NAMESERVER "NameServer"
60
+ #define DHCPNAMESERVER "DhcpNameServer"
61
+ #define DATABASEPATH "DatabasePath"
62
+ #define WIN_PATH_HOSTS "\\hosts"
63
+ #define SEARCHLIST_KEY "SearchList"
63
64
  #define PRIMARYDNSSUFFIX_KEY "PrimaryDNSSuffix"
64
- #define INTERFACES_KEY "Interfaces"
65
- #define DOMAIN_KEY "Domain"
66
- #define DHCPDOMAIN_KEY "DhcpDomain"
65
+ #define INTERFACES_KEY "Interfaces"
66
+ #define DOMAIN_KEY "Domain"
67
+ #define DHCPDOMAIN_KEY "DhcpDomain"
67
68
 
68
69
  #elif defined(WATT32)
69
70
 
@@ -100,6 +101,7 @@
100
101
  #endif
101
102
 
102
103
  #include "ares_strdup.h"
104
+ #include "ares_strsplit.h"
103
105
 
104
106
  #ifndef HAVE_STRCASECMP
105
107
  # include "ares_strcasecmp.h"
@@ -323,8 +325,14 @@ struct ares_channeldata {
323
325
 
324
326
  const struct ares_socket_functions * sock_funcs;
325
327
  void *sock_func_cb_data;
328
+
329
+ /* Path for resolv.conf file, configurable via ares_options */
330
+ char *resolvconf_path;
326
331
  };
327
332
 
333
+ /* Does the domain end in ".onion" or ".onion."? Case-insensitive. */
334
+ int ares__is_onion_domain(const char *name);
335
+
328
336
  /* Memory management functions */
329
337
  extern void *(*ares_malloc)(size_t size);
330
338
  extern void *(*ares_realloc)(void *ptr, size_t size);
@@ -53,6 +53,7 @@
53
53
 
54
54
  #include <assert.h>
55
55
  #include <fcntl.h>
56
+ #include <limits.h>
56
57
 
57
58
  #include "ares.h"
58
59
  #include "ares_dns.h"
@@ -871,8 +872,32 @@ void ares__send_query(ares_channel channel, struct query *query,
871
872
  return;
872
873
  }
873
874
  }
874
- timeplus = channel->timeout << (query->try_count / channel->nservers);
875
- timeplus = (timeplus * (9 + (rand () & 7))) / 16;
875
+
876
+ /* For each trip through the entire server list, double the channel's
877
+ * assigned timeout, avoiding overflow. If channel->timeout is negative,
878
+ * leave it as-is, even though that should be impossible here.
879
+ */
880
+ timeplus = channel->timeout;
881
+ {
882
+ /* How many times do we want to double it? Presume sane values here. */
883
+ const int shift = query->try_count / channel->nservers;
884
+
885
+ /* Is there enough room to shift timeplus left that many times?
886
+ *
887
+ * To find out, confirm that all of the bits we'll shift away are zero.
888
+ * Stop considering a shift if we get to the point where we could shift
889
+ * a 1 into the sign bit (i.e. when shift is within two of the bit
890
+ * count).
891
+ *
892
+ * This has the side benefit of leaving negative numbers unchanged.
893
+ */
894
+ if(shift <= (int)(sizeof(int) * CHAR_BIT - 1)
895
+ && (timeplus >> (sizeof(int) * CHAR_BIT - 1 - shift)) == 0)
896
+ {
897
+ timeplus <<= shift;
898
+ }
899
+ }
900
+
876
901
  query->timeout = *now;
877
902
  timeadd(&query->timeout, timeplus);
878
903
  /* Keep track of queries bucketed by timeout, so we can process
@@ -83,7 +83,7 @@
83
83
 
84
84
  /*
85
85
  * Verify that the size previously defined and expected for
86
- * ares_socklen_t is actually the the same as the one reported
86
+ * ares_socklen_t is actually the same as the one reported
87
87
  * by sizeof() at compile time.
88
88
  */
89
89
 
@@ -54,6 +54,13 @@ void ares_search(ares_channel channel, const char *name, int dnsclass,
54
54
  const char *p;
55
55
  int status, ndots;
56
56
 
57
+ /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */
58
+ if (ares__is_onion_domain(name))
59
+ {
60
+ callback(arg, ARES_ENOTFOUND, 0, NULL, 0);
61
+ return;
62
+ }
63
+
57
64
  /* If name only yields one domain to search, then we don't have
58
65
  * to keep extra state, so just do an ares_query().
59
66
  */
@@ -60,6 +60,12 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
60
60
  callback(arg, ARES_ENOMEM, 0, NULL, 0);
61
61
  return;
62
62
  }
63
+ if (channel->nservers < 1)
64
+ {
65
+ ares_free(query);
66
+ callback(arg, ARES_ESERVFAIL, 0, NULL, 0);
67
+ return;
68
+ }
63
69
  query->server_info = ares_malloc(channel->nservers *
64
70
  sizeof(query->server_info[0]));
65
71
  if (!query->server_info)
@@ -0,0 +1,174 @@
1
+ /* Copyright (C) 2018 by John Schember <john@nachtimwald.com>
2
+ *
3
+ * Permission to use, copy, modify, and distribute this
4
+ * software and its documentation for any purpose and without
5
+ * fee is hereby granted, provided that the above copyright
6
+ * notice appear in all copies and that both that copyright
7
+ * notice and this permission notice appear in supporting
8
+ * documentation, and that the name of M.I.T. not be used in
9
+ * advertising or publicity pertaining to distribution of the
10
+ * software without specific, written prior permission.
11
+ * M.I.T. makes no representations about the suitability of
12
+ * this software for any purpose. It is provided "as is"
13
+ * without express or implied warranty.
14
+ */
15
+
16
+ #include "ares_setup.h"
17
+ #include "ares_strsplit.h"
18
+ #include "ares.h"
19
+ #include "ares_private.h"
20
+
21
+ static int list_contains(char * const *list, size_t num_elem, const char *str, int insensitive)
22
+ {
23
+ size_t len;
24
+ size_t i;
25
+
26
+ len = strlen(str);
27
+ for (i=0; i<num_elem; i++)
28
+ {
29
+ if (insensitive)
30
+ {
31
+ #ifdef WIN32
32
+ if (strnicmp(list[i], str, len) == 0)
33
+ #else
34
+ if (strncasecmp(list[i], str, len) == 0)
35
+ #endif
36
+ return 1;
37
+ }
38
+ else
39
+ {
40
+ if (strncmp(list[i], str, len) == 0)
41
+ return 1;
42
+ }
43
+ }
44
+
45
+ return 0;
46
+ }
47
+
48
+ static int is_delim(char c, const char *delims, size_t num_delims)
49
+ {
50
+ size_t i;
51
+
52
+ for (i=0; i<num_delims; i++)
53
+ {
54
+ if (c == delims[i])
55
+ return 1;
56
+ }
57
+ return 0;
58
+ }
59
+
60
+
61
+ void ares_strsplit_free(char **elms, size_t num_elm)
62
+ {
63
+ size_t i;
64
+
65
+ if (elms == NULL)
66
+ return;
67
+
68
+ for (i=0; i<num_elm; i++)
69
+ ares_free(elms[i]);
70
+ ares_free(elms);
71
+ }
72
+
73
+
74
+ char **ares_strsplit(const char *in, const char *delms, int make_set, size_t *num_elm)
75
+ {
76
+ char *parsestr;
77
+ char **temp;
78
+ char **out;
79
+ size_t cnt;
80
+ size_t nelms;
81
+ size_t in_len;
82
+ size_t num_delims;
83
+ size_t i;
84
+
85
+ if (in == NULL || delms == NULL || num_elm == NULL)
86
+ return NULL;
87
+
88
+ *num_elm = 0;
89
+
90
+ in_len = strlen(in);
91
+ num_delims = strlen(delms);
92
+
93
+ /* Figure out how many elements. */
94
+ nelms = 1;
95
+ for (i=0; i<in_len; i++)
96
+ {
97
+ if (is_delim(in[i], delms, num_delims))
98
+ {
99
+ nelms++;
100
+ }
101
+ }
102
+
103
+ /* Copy of input so we can cut it up. */
104
+ parsestr = ares_strdup(in);
105
+ if (parsestr == NULL)
106
+ return NULL;
107
+
108
+ /* Temporary array to store locations of start of each element
109
+ * within parsestr. */
110
+ temp = ares_malloc(nelms * sizeof(*temp));
111
+ if (temp == NULL)
112
+ {
113
+ ares_free(parsestr);
114
+ return NULL;
115
+ }
116
+ temp[0] = parsestr;
117
+ cnt = 1;
118
+ for (i=0; i<in_len && cnt<nelms; i++)
119
+ {
120
+ if (!is_delim(parsestr[i], delms, num_delims))
121
+ continue;
122
+
123
+ /* Replace sep with NULL. */
124
+ parsestr[i] = '\0';
125
+ /* Add the pointer to the array of elements */
126
+ temp[cnt] = parsestr+i+1;
127
+ cnt++;
128
+ }
129
+
130
+ /* Copy each element to our output array. */
131
+ out = ares_malloc(nelms * sizeof(*out));
132
+ if (out == NULL)
133
+ {
134
+ ares_free(parsestr);
135
+ ares_free(temp);
136
+ return NULL;
137
+ }
138
+
139
+ nelms = 0;
140
+ for (i=0; i<cnt; i++)
141
+ {
142
+ if (temp[i][0] == '\0')
143
+ continue;
144
+
145
+ if (make_set && list_contains(out, nelms, temp[i], 1))
146
+ continue;
147
+
148
+ out[nelms] = ares_strdup(temp[i]);
149
+ if (out[nelms] == NULL)
150
+ {
151
+ ares_strsplit_free(out, nelms);
152
+ ares_free(parsestr);
153
+ ares_free(temp);
154
+ return NULL;
155
+ }
156
+ nelms++;
157
+ }
158
+
159
+
160
+ /* If there are no elements don't return an empty allocated
161
+ * array. */
162
+ if (nelms == 0)
163
+ {
164
+ ares_strsplit_free(out, nelms);
165
+ out = NULL;
166
+ }
167
+
168
+ /* Get the true number of elements (recalculated because of make_set) */
169
+ *num_elm = nelms;
170
+
171
+ ares_free(parsestr);
172
+ ares_free(temp);
173
+ return out;
174
+ }
@@ -0,0 +1,43 @@
1
+ #ifndef HEADER_CARES_STRSPLIT_H
2
+ #define HEADER_CARES_STRSPLIT_H
3
+
4
+ /* Copyright (C) 2018 by John Schember <john@nachtimwald.com>
5
+ *
6
+ * Permission to use, copy, modify, and distribute this
7
+ * software and its documentation for any purpose and without
8
+ * fee is hereby granted, provided that the above copyright
9
+ * notice appear in all copies and that both that copyright
10
+ * notice and this permission notice appear in supporting
11
+ * documentation, and that the name of M.I.T. not be used in
12
+ * advertising or publicity pertaining to distribution of the
13
+ * software without specific, written prior permission.
14
+ * M.I.T. makes no representations about the suitability of
15
+ * this software for any purpose. It is provided "as is"
16
+ * without express or implied warranty.
17
+ */
18
+
19
+ #include "ares_setup.h"
20
+
21
+ /* Split a string on delem skipping empty elements.
22
+ *
23
+ * param in String to split.
24
+ * param delims String of characters to treat as a delimitor.
25
+ * Each character in the string is a delimitor so
26
+ * there can be multiple delimitors to split on.
27
+ * E.g. ", " will split on all comma's and spaces.
28
+ * param make_set Have the list be a Set where there are no
29
+ * duplicate entries. 1 for true, 0 or false.
30
+ * param num_elm Return parameter of the number of elements
31
+ * in the result array.
32
+ *
33
+ * returns an allocated array of allocated string elements.
34
+ *
35
+ */
36
+ char **ares_strsplit(const char *in, const char *delms, int make_set, size_t *num_elm);
37
+
38
+ /* Frees the result returned from ares_strsplit(). */
39
+ void ares_strsplit_free(char **elms, size_t num_elm);
40
+
41
+
42
+ #endif /* HEADER_CARES_STRSPLIT_H */
43
+
@@ -3,15 +3,15 @@
3
3
  #define ARES__VERSION_H
4
4
 
5
5
  /* This is the global package copyright */
6
- #define ARES_COPYRIGHT "2004 - 2016 Daniel Stenberg, <daniel@haxx.se>."
6
+ #define ARES_COPYRIGHT "2004 - 2017 Daniel Stenberg, <daniel@haxx.se>."
7
7
 
8
8
  #define ARES_VERSION_MAJOR 1
9
- #define ARES_VERSION_MINOR 12
10
- #define ARES_VERSION_PATCH 1
9
+ #define ARES_VERSION_MINOR 14
10
+ #define ARES_VERSION_PATCH 0
11
11
  #define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
12
12
  (ARES_VERSION_MINOR<<8)|\
13
13
  (ARES_VERSION_PATCH))
14
- #define ARES_VERSION_STR "1.12.1-DEV"
14
+ #define ARES_VERSION_STR "1.14.0"
15
15
 
16
16
  #if (ARES_VERSION >= 0x010700)
17
17
  # define CARES_HAVE_ARES_LIBRARY_INIT 1
@@ -245,7 +245,7 @@
245
245
  # define _CRT_NONSTDC_NO_DEPRECATE 1
246
246
  #endif
247
247
 
248
- /* Set the Target to Vista. However, any symbols required above Win2000
248
+ /* Set the Target to Vista. However, any symbols required above Win2000
249
249
  * should be loaded via LoadLibrary() */
250
250
  #if defined(_MSC_VER) && (_MSC_VER >= 1500)
251
251
  # define VS2008_MIN_TARGET 0x0600
@@ -54,7 +54,7 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
54
54
  * On Windows we store the error in the thread errno, not
55
55
  * in the winsock error code. This is to avoid loosing the
56
56
  * actual last winsock error. So use macro ERRNO to fetch the
57
- * errno this funtion sets when returning NULL, not SOCKERRNO.
57
+ * errno this function sets when returning NULL, not SOCKERRNO.
58
58
  * author:
59
59
  * Paul Vixie, 1996.
60
60
  */
@@ -180,8 +180,7 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
180
180
  tp += sprintf(tp, "%x", words[i]);
181
181
  }
182
182
  /* Was it a trailing run of 0x00's? */
183
- if (best.base != -1 && (best.base + best.len) ==
184
- (NS_IN6ADDRSZ / NS_INT16SZ))
183
+ if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
185
184
  *tp++ = ':';
186
185
  *tp++ = '\0';
187
186
 
@@ -333,6 +333,9 @@
333
333
  /* Define to 1 if you have the ws2tcpip.h header file. */
334
334
  /* #undef HAVE_WS2TCPIP_H */
335
335
 
336
+ /* Define if __system_property_get exists. */
337
+ /* #undef HAVE___SYSTEM_PROPERTY_GET */
338
+
336
339
  /* Define to 1 if you need the malloc.h header file even with stdlib.h */
337
340
  /* #undef NEED_MALLOC_H */
338
341
 
@@ -338,6 +338,9 @@
338
338
  /* Define to 1 if you have the ws2tcpip.h header file. */
339
339
  /* #undef HAVE_WS2TCPIP_H */
340
340
 
341
+ /* Define if __system_property_get exists. */
342
+ /* #undef HAVE___SYSTEM_PROPERTY_GET */
343
+
341
344
  /* Define to the sub-directory where libtool stores uninstalled libraries. */
342
345
  #define LT_OBJDIR ".libs/"
343
346
 
@@ -338,6 +338,9 @@
338
338
  /* Define to 1 if you have the ws2tcpip.h header file. */
339
339
  /* #undef HAVE_WS2TCPIP_H */
340
340
 
341
+ /* Define if __system_property_get exists. */
342
+ /* #undef HAVE___SYSTEM_PROPERTY_GET */
343
+
341
344
  /* Define to 1 if you need the malloc.h header file even with stdlib.h */
342
345
  /* #undef NEED_MALLOC_H */
343
346
 
@@ -338,6 +338,9 @@
338
338
  /* Define to 1 if you have the ws2tcpip.h header file. */
339
339
  /* #undef HAVE_WS2TCPIP_H */
340
340
 
341
+ /* Define if __system_property_get exists. */
342
+ /* #undef HAVE___SYSTEM_PROPERTY_GET */
343
+
341
344
  /* Define to the sub-directory where libtool stores uninstalled libraries. */
342
345
  #define LT_OBJDIR ".libs/"
343
346