grpc-z 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1318) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/Makefile +23896 -0
  4. data/etc/roots.pem +4475 -0
  5. data/include/grpc/byte_buffer.h +27 -0
  6. data/include/grpc/byte_buffer_reader.h +26 -0
  7. data/include/grpc/census.h +40 -0
  8. data/include/grpc/compression.h +75 -0
  9. data/include/grpc/fork.h +26 -0
  10. data/include/grpc/grpc.h +469 -0
  11. data/include/grpc/grpc_cronet.h +38 -0
  12. data/include/grpc/grpc_posix.h +67 -0
  13. data/include/grpc/grpc_security.h +495 -0
  14. data/include/grpc/grpc_security_constants.h +107 -0
  15. data/include/grpc/impl/codegen/atm.h +95 -0
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +91 -0
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +83 -0
  18. data/include/grpc/impl/codegen/atm_windows.h +126 -0
  19. data/include/grpc/impl/codegen/byte_buffer.h +88 -0
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +42 -0
  21. data/include/grpc/impl/codegen/compression_types.h +107 -0
  22. data/include/grpc/impl/codegen/connectivity_state.h +44 -0
  23. data/include/grpc/impl/codegen/fork.h +48 -0
  24. data/include/grpc/impl/codegen/gpr_slice.h +69 -0
  25. data/include/grpc/impl/codegen/gpr_types.h +59 -0
  26. data/include/grpc/impl/codegen/grpc_types.h +669 -0
  27. data/include/grpc/impl/codegen/port_platform.h +507 -0
  28. data/include/grpc/impl/codegen/propagation_bits.h +52 -0
  29. data/include/grpc/impl/codegen/slice.h +147 -0
  30. data/include/grpc/impl/codegen/status.h +153 -0
  31. data/include/grpc/impl/codegen/sync.h +63 -0
  32. data/include/grpc/impl/codegen/sync_custom.h +38 -0
  33. data/include/grpc/impl/codegen/sync_generic.h +48 -0
  34. data/include/grpc/impl/codegen/sync_posix.h +34 -0
  35. data/include/grpc/impl/codegen/sync_windows.h +36 -0
  36. data/include/grpc/load_reporting.h +48 -0
  37. data/include/grpc/module.modulemap +74 -0
  38. data/include/grpc/slice.h +172 -0
  39. data/include/grpc/slice_buffer.h +84 -0
  40. data/include/grpc/status.h +26 -0
  41. data/include/grpc/support/alloc.h +68 -0
  42. data/include/grpc/support/atm.h +26 -0
  43. data/include/grpc/support/atm_gcc_atomic.h +26 -0
  44. data/include/grpc/support/atm_gcc_sync.h +26 -0
  45. data/include/grpc/support/atm_windows.h +26 -0
  46. data/include/grpc/support/cpu.h +44 -0
  47. data/include/grpc/support/log.h +104 -0
  48. data/include/grpc/support/log_windows.h +38 -0
  49. data/include/grpc/support/port_platform.h +24 -0
  50. data/include/grpc/support/string_util.h +49 -0
  51. data/include/grpc/support/sync.h +298 -0
  52. data/include/grpc/support/sync_custom.h +26 -0
  53. data/include/grpc/support/sync_generic.h +26 -0
  54. data/include/grpc/support/sync_posix.h +26 -0
  55. data/include/grpc/support/sync_windows.h +26 -0
  56. data/include/grpc/support/thd_id.h +44 -0
  57. data/include/grpc/support/time.h +92 -0
  58. data/include/grpc/support/workaround_list.h +31 -0
  59. data/src/boringssl/err_data.c +1348 -0
  60. data/src/core/ext/census/grpc_context.cc +38 -0
  61. data/src/core/ext/filters/client_channel/backup_poller.cc +174 -0
  62. data/src/core/ext/filters/client_channel/backup_poller.h +35 -0
  63. data/src/core/ext/filters/client_channel/channel_connectivity.cc +248 -0
  64. data/src/core/ext/filters/client_channel/client_channel.cc +3209 -0
  65. data/src/core/ext/filters/client_channel/client_channel.h +57 -0
  66. data/src/core/ext/filters/client_channel/client_channel_factory.cc +67 -0
  67. data/src/core/ext/filters/client_channel/client_channel_factory.h +74 -0
  68. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +62 -0
  69. data/src/core/ext/filters/client_channel/connector.cc +41 -0
  70. data/src/core/ext/filters/client_channel/connector.h +73 -0
  71. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +370 -0
  72. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +34 -0
  73. data/src/core/ext/filters/client_channel/http_proxy.cc +195 -0
  74. data/src/core/ext/filters/client_channel/http_proxy.h +24 -0
  75. data/src/core/ext/filters/client_channel/lb_policy.cc +59 -0
  76. data/src/core/ext/filters/client_channel/lb_policy.h +201 -0
  77. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +138 -0
  78. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +29 -0
  79. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1906 -0
  80. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +36 -0
  81. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +108 -0
  82. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +152 -0
  83. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +67 -0
  84. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +304 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +88 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +102 -0
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +190 -0
  88. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +591 -0
  89. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +687 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +253 -0
  91. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +136 -0
  92. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +155 -0
  93. data/src/core/ext/filters/client_channel/lb_policy_factory.h +127 -0
  94. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +97 -0
  95. data/src/core/ext/filters/client_channel/lb_policy_registry.h +54 -0
  96. data/src/core/ext/filters/client_channel/method_params.cc +178 -0
  97. data/src/core/ext/filters/client_channel/method_params.h +74 -0
  98. data/src/core/ext/filters/client_channel/parse_address.cc +192 -0
  99. data/src/core/ext/filters/client_channel/parse_address.h +50 -0
  100. data/src/core/ext/filters/client_channel/proxy_mapper.cc +48 -0
  101. data/src/core/ext/filters/client_channel/proxy_mapper.h +74 -0
  102. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +122 -0
  103. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +44 -0
  104. data/src/core/ext/filters/client_channel/resolver.cc +35 -0
  105. data/src/core/ext/filters/client_channel/resolver.h +134 -0
  106. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +493 -0
  107. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +53 -0
  108. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +351 -0
  109. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +593 -0
  110. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +74 -0
  111. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +59 -0
  112. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +340 -0
  113. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +297 -0
  114. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +83 -0
  115. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +214 -0
  116. data/src/core/ext/filters/client_channel/resolver_factory.h +71 -0
  117. data/src/core/ext/filters/client_channel/resolver_registry.cc +178 -0
  118. data/src/core/ext/filters/client_channel/resolver_registry.h +83 -0
  119. data/src/core/ext/filters/client_channel/retry_throttle.cc +191 -0
  120. data/src/core/ext/filters/client_channel/retry_throttle.h +77 -0
  121. data/src/core/ext/filters/client_channel/subchannel.cc +815 -0
  122. data/src/core/ext/filters/client_channel/subchannel.h +183 -0
  123. data/src/core/ext/filters/client_channel/subchannel_index.cc +254 -0
  124. data/src/core/ext/filters/client_channel/subchannel_index.h +79 -0
  125. data/src/core/ext/filters/client_channel/uri_parser.cc +314 -0
  126. data/src/core/ext/filters/client_channel/uri_parser.h +50 -0
  127. data/src/core/ext/filters/deadline/deadline_filter.cc +386 -0
  128. data/src/core/ext/filters/deadline/deadline_filter.h +93 -0
  129. data/src/core/ext/filters/http/client/http_client_filter.cc +558 -0
  130. data/src/core/ext/filters/http/client/http_client_filter.h +31 -0
  131. data/src/core/ext/filters/http/client_authority_filter.cc +156 -0
  132. data/src/core/ext/filters/http/client_authority_filter.h +34 -0
  133. data/src/core/ext/filters/http/http_filters_plugin.cc +89 -0
  134. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +499 -0
  135. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +53 -0
  136. data/src/core/ext/filters/http/server/http_server_filter.cc +434 -0
  137. data/src/core/ext/filters/http/server/http_server_filter.h +29 -0
  138. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +222 -0
  139. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +30 -0
  140. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +71 -0
  141. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +61 -0
  142. data/src/core/ext/filters/max_age/max_age_filter.cc +543 -0
  143. data/src/core/ext/filters/max_age/max_age_filter.h +26 -0
  144. data/src/core/ext/filters/message_size/message_size_filter.cc +324 -0
  145. data/src/core/ext/filters/message_size/message_size_filter.h +26 -0
  146. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +208 -0
  147. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +27 -0
  148. data/src/core/ext/filters/workarounds/workaround_utils.cc +53 -0
  149. data/src/core/ext/filters/workarounds/workaround_utils.h +39 -0
  150. data/src/core/ext/transport/chttp2/alpn/alpn.cc +44 -0
  151. data/src/core/ext/transport/chttp2/alpn/alpn.h +36 -0
  152. data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
  153. data/src/core/ext/transport/chttp2/client/authority.h +36 -0
  154. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +229 -0
  155. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -0
  156. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +110 -0
  157. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +79 -0
  158. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +230 -0
  159. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +353 -0
  160. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  161. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +45 -0
  162. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +74 -0
  163. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +89 -0
  164. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +249 -0
  165. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +56 -0
  166. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +231 -0
  167. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +41 -0
  168. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +35 -0
  169. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3102 -0
  170. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +45 -0
  171. data/src/core/ext/transport/chttp2/transport/flow_control.cc +405 -0
  172. data/src/core/ext/transport/chttp2/transport/flow_control.h +482 -0
  173. data/src/core/ext/transport/chttp2/transport/frame.h +47 -0
  174. data/src/core/ext/transport/chttp2/transport/frame_data.cc +314 -0
  175. data/src/core/ext/transport/chttp2/transport/frame_data.h +84 -0
  176. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +186 -0
  177. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +62 -0
  178. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +131 -0
  179. data/src/core/ext/transport/chttp2/transport/frame_ping.h +45 -0
  180. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +112 -0
  181. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +43 -0
  182. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +238 -0
  183. data/src/core/ext/transport/chttp2/transport/frame_settings.h +60 -0
  184. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +122 -0
  185. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +45 -0
  186. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +699 -0
  187. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
  188. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1680 -0
  189. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +109 -0
  190. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +368 -0
  191. data/src/core/ext/transport/chttp2/transport/hpack_table.h +95 -0
  192. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +62 -0
  193. data/src/core/ext/transport/chttp2/transport/http2_settings.h +62 -0
  194. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +92 -0
  195. data/src/core/ext/transport/chttp2/transport/huffsyms.h +33 -0
  196. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +73 -0
  197. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +49 -0
  198. data/src/core/ext/transport/chttp2/transport/internal.h +799 -0
  199. data/src/core/ext/transport/chttp2/transport/parsing.cc +745 -0
  200. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +216 -0
  201. data/src/core/ext/transport/chttp2/transport/stream_map.cc +167 -0
  202. data/src/core/ext/transport/chttp2/transport/stream_map.h +68 -0
  203. data/src/core/ext/transport/chttp2/transport/varint.cc +56 -0
  204. data/src/core/ext/transport/chttp2/transport/varint.h +60 -0
  205. data/src/core/ext/transport/chttp2/transport/writing.cc +641 -0
  206. data/src/core/ext/transport/inproc/inproc_plugin.cc +28 -0
  207. data/src/core/ext/transport/inproc/inproc_transport.cc +1240 -0
  208. data/src/core/ext/transport/inproc/inproc_transport.h +35 -0
  209. data/src/core/lib/avl/avl.cc +306 -0
  210. data/src/core/lib/avl/avl.h +94 -0
  211. data/src/core/lib/backoff/backoff.cc +78 -0
  212. data/src/core/lib/backoff/backoff.h +89 -0
  213. data/src/core/lib/channel/channel_args.cc +413 -0
  214. data/src/core/lib/channel/channel_args.h +127 -0
  215. data/src/core/lib/channel/channel_stack.cc +258 -0
  216. data/src/core/lib/channel/channel_stack.h +280 -0
  217. data/src/core/lib/channel/channel_stack_builder.cc +314 -0
  218. data/src/core/lib/channel/channel_stack_builder.h +160 -0
  219. data/src/core/lib/channel/channel_trace.cc +239 -0
  220. data/src/core/lib/channel/channel_trace.h +133 -0
  221. data/src/core/lib/channel/channel_trace_registry.cc +80 -0
  222. data/src/core/lib/channel/channel_trace_registry.h +43 -0
  223. data/src/core/lib/channel/connected_channel.cc +236 -0
  224. data/src/core/lib/channel/connected_channel.h +34 -0
  225. data/src/core/lib/channel/context.h +49 -0
  226. data/src/core/lib/channel/handshaker.cc +259 -0
  227. data/src/core/lib/channel/handshaker.h +166 -0
  228. data/src/core/lib/channel/handshaker_factory.cc +41 -0
  229. data/src/core/lib/channel/handshaker_factory.h +50 -0
  230. data/src/core/lib/channel/handshaker_registry.cc +97 -0
  231. data/src/core/lib/channel/handshaker_registry.h +48 -0
  232. data/src/core/lib/channel/status_util.cc +100 -0
  233. data/src/core/lib/channel/status_util.h +58 -0
  234. data/src/core/lib/compression/algorithm_metadata.h +61 -0
  235. data/src/core/lib/compression/compression.cc +174 -0
  236. data/src/core/lib/compression/compression_internal.cc +276 -0
  237. data/src/core/lib/compression/compression_internal.h +88 -0
  238. data/src/core/lib/compression/message_compress.cc +187 -0
  239. data/src/core/lib/compression/message_compress.h +40 -0
  240. data/src/core/lib/compression/stream_compression.cc +79 -0
  241. data/src/core/lib/compression/stream_compression.h +116 -0
  242. data/src/core/lib/compression/stream_compression_gzip.cc +230 -0
  243. data/src/core/lib/compression/stream_compression_gzip.h +28 -0
  244. data/src/core/lib/compression/stream_compression_identity.cc +94 -0
  245. data/src/core/lib/compression/stream_compression_identity.h +29 -0
  246. data/src/core/lib/debug/stats.cc +178 -0
  247. data/src/core/lib/debug/stats.h +61 -0
  248. data/src/core/lib/debug/stats_data.cc +682 -0
  249. data/src/core/lib/debug/stats_data.h +435 -0
  250. data/src/core/lib/debug/trace.cc +144 -0
  251. data/src/core/lib/debug/trace.h +104 -0
  252. data/src/core/lib/gpr/alloc.cc +99 -0
  253. data/src/core/lib/gpr/arena.cc +152 -0
  254. data/src/core/lib/gpr/arena.h +41 -0
  255. data/src/core/lib/gpr/atm.cc +35 -0
  256. data/src/core/lib/gpr/cpu_iphone.cc +36 -0
  257. data/src/core/lib/gpr/cpu_linux.cc +82 -0
  258. data/src/core/lib/gpr/cpu_posix.cc +81 -0
  259. data/src/core/lib/gpr/cpu_windows.cc +33 -0
  260. data/src/core/lib/gpr/env.h +43 -0
  261. data/src/core/lib/gpr/env_linux.cc +82 -0
  262. data/src/core/lib/gpr/env_posix.cc +47 -0
  263. data/src/core/lib/gpr/env_windows.cc +72 -0
  264. data/src/core/lib/gpr/fork.cc +78 -0
  265. data/src/core/lib/gpr/fork.h +35 -0
  266. data/src/core/lib/gpr/host_port.cc +98 -0
  267. data/src/core/lib/gpr/host_port.h +43 -0
  268. data/src/core/lib/gpr/log.cc +96 -0
  269. data/src/core/lib/gpr/log_android.cc +72 -0
  270. data/src/core/lib/gpr/log_linux.cc +93 -0
  271. data/src/core/lib/gpr/log_posix.cc +90 -0
  272. data/src/core/lib/gpr/log_windows.cc +97 -0
  273. data/src/core/lib/gpr/mpscq.cc +117 -0
  274. data/src/core/lib/gpr/mpscq.h +86 -0
  275. data/src/core/lib/gpr/murmur_hash.cc +80 -0
  276. data/src/core/lib/gpr/murmur_hash.h +29 -0
  277. data/src/core/lib/gpr/spinlock.h +46 -0
  278. data/src/core/lib/gpr/string.cc +319 -0
  279. data/src/core/lib/gpr/string.h +109 -0
  280. data/src/core/lib/gpr/string_posix.cc +72 -0
  281. data/src/core/lib/gpr/string_util_windows.cc +82 -0
  282. data/src/core/lib/gpr/string_windows.cc +69 -0
  283. data/src/core/lib/gpr/string_windows.h +32 -0
  284. data/src/core/lib/gpr/sync.cc +124 -0
  285. data/src/core/lib/gpr/sync_posix.cc +107 -0
  286. data/src/core/lib/gpr/sync_windows.cc +118 -0
  287. data/src/core/lib/gpr/time.cc +251 -0
  288. data/src/core/lib/gpr/time_posix.cc +167 -0
  289. data/src/core/lib/gpr/time_precise.cc +78 -0
  290. data/src/core/lib/gpr/time_precise.h +29 -0
  291. data/src/core/lib/gpr/time_windows.cc +98 -0
  292. data/src/core/lib/gpr/tls.h +68 -0
  293. data/src/core/lib/gpr/tls_gcc.h +52 -0
  294. data/src/core/lib/gpr/tls_msvc.h +52 -0
  295. data/src/core/lib/gpr/tls_pthread.cc +30 -0
  296. data/src/core/lib/gpr/tls_pthread.h +56 -0
  297. data/src/core/lib/gpr/tmpfile.h +32 -0
  298. data/src/core/lib/gpr/tmpfile_msys.cc +58 -0
  299. data/src/core/lib/gpr/tmpfile_posix.cc +70 -0
  300. data/src/core/lib/gpr/tmpfile_windows.cc +69 -0
  301. data/src/core/lib/gpr/useful.h +65 -0
  302. data/src/core/lib/gpr/wrap_memcpy.cc +42 -0
  303. data/src/core/lib/gprpp/abstract.h +34 -0
  304. data/src/core/lib/gprpp/atomic.h +30 -0
  305. data/src/core/lib/gprpp/atomic_with_atm.h +57 -0
  306. data/src/core/lib/gprpp/atomic_with_std.h +35 -0
  307. data/src/core/lib/gprpp/debug_location.h +52 -0
  308. data/src/core/lib/gprpp/inlined_vector.h +136 -0
  309. data/src/core/lib/gprpp/manual_constructor.h +213 -0
  310. data/src/core/lib/gprpp/memory.h +111 -0
  311. data/src/core/lib/gprpp/orphanable.h +199 -0
  312. data/src/core/lib/gprpp/ref_counted.h +169 -0
  313. data/src/core/lib/gprpp/ref_counted_ptr.h +112 -0
  314. data/src/core/lib/gprpp/thd.h +135 -0
  315. data/src/core/lib/gprpp/thd_posix.cc +209 -0
  316. data/src/core/lib/gprpp/thd_windows.cc +162 -0
  317. data/src/core/lib/http/format_request.cc +122 -0
  318. data/src/core/lib/http/format_request.h +34 -0
  319. data/src/core/lib/http/httpcli.cc +303 -0
  320. data/src/core/lib/http/httpcli.h +127 -0
  321. data/src/core/lib/http/httpcli_security_connector.cc +202 -0
  322. data/src/core/lib/http/parser.cc +371 -0
  323. data/src/core/lib/http/parser.h +113 -0
  324. data/src/core/lib/iomgr/block_annotate.h +57 -0
  325. data/src/core/lib/iomgr/call_combiner.cc +212 -0
  326. data/src/core/lib/iomgr/call_combiner.h +112 -0
  327. data/src/core/lib/iomgr/closure.h +351 -0
  328. data/src/core/lib/iomgr/combiner.cc +358 -0
  329. data/src/core/lib/iomgr/combiner.h +66 -0
  330. data/src/core/lib/iomgr/endpoint.cc +63 -0
  331. data/src/core/lib/iomgr/endpoint.h +98 -0
  332. data/src/core/lib/iomgr/endpoint_pair.h +34 -0
  333. data/src/core/lib/iomgr/endpoint_pair_posix.cc +73 -0
  334. data/src/core/lib/iomgr/endpoint_pair_uv.cc +40 -0
  335. data/src/core/lib/iomgr/endpoint_pair_windows.cc +87 -0
  336. data/src/core/lib/iomgr/error.cc +793 -0
  337. data/src/core/lib/iomgr/error.h +207 -0
  338. data/src/core/lib/iomgr/error_internal.h +63 -0
  339. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1248 -0
  340. data/src/core/lib/iomgr/ev_epoll1_linux.h +31 -0
  341. data/src/core/lib/iomgr/ev_epollex_linux.cc +1494 -0
  342. data/src/core/lib/iomgr/ev_epollex_linux.h +30 -0
  343. data/src/core/lib/iomgr/ev_epollsig_linux.cc +1735 -0
  344. data/src/core/lib/iomgr/ev_epollsig_linux.h +35 -0
  345. data/src/core/lib/iomgr/ev_poll_posix.cc +1758 -0
  346. data/src/core/lib/iomgr/ev_poll_posix.h +29 -0
  347. data/src/core/lib/iomgr/ev_posix.cc +330 -0
  348. data/src/core/lib/iomgr/ev_posix.h +145 -0
  349. data/src/core/lib/iomgr/ev_windows.cc +30 -0
  350. data/src/core/lib/iomgr/exec_ctx.cc +147 -0
  351. data/src/core/lib/iomgr/exec_ctx.h +210 -0
  352. data/src/core/lib/iomgr/executor.cc +301 -0
  353. data/src/core/lib/iomgr/executor.h +50 -0
  354. data/src/core/lib/iomgr/fork_posix.cc +89 -0
  355. data/src/core/lib/iomgr/fork_windows.cc +41 -0
  356. data/src/core/lib/iomgr/gethostname.h +26 -0
  357. data/src/core/lib/iomgr/gethostname_fallback.cc +30 -0
  358. data/src/core/lib/iomgr/gethostname_host_name_max.cc +40 -0
  359. data/src/core/lib/iomgr/gethostname_sysconf.cc +40 -0
  360. data/src/core/lib/iomgr/iocp_windows.cc +152 -0
  361. data/src/core/lib/iomgr/iocp_windows.h +48 -0
  362. data/src/core/lib/iomgr/iomgr.cc +178 -0
  363. data/src/core/lib/iomgr/iomgr.h +36 -0
  364. data/src/core/lib/iomgr/iomgr_custom.cc +63 -0
  365. data/src/core/lib/iomgr/iomgr_custom.h +47 -0
  366. data/src/core/lib/iomgr/iomgr_internal.cc +43 -0
  367. data/src/core/lib/iomgr/iomgr_internal.h +57 -0
  368. data/src/core/lib/iomgr/iomgr_posix.cc +67 -0
  369. data/src/core/lib/iomgr/iomgr_posix.h +26 -0
  370. data/src/core/lib/iomgr/iomgr_uv.cc +40 -0
  371. data/src/core/lib/iomgr/iomgr_windows.cc +87 -0
  372. data/src/core/lib/iomgr/is_epollexclusive_available.cc +104 -0
  373. data/src/core/lib/iomgr/is_epollexclusive_available.h +36 -0
  374. data/src/core/lib/iomgr/load_file.cc +80 -0
  375. data/src/core/lib/iomgr/load_file.h +35 -0
  376. data/src/core/lib/iomgr/lockfree_event.cc +250 -0
  377. data/src/core/lib/iomgr/lockfree_event.h +72 -0
  378. data/src/core/lib/iomgr/nameser.h +106 -0
  379. data/src/core/lib/iomgr/network_status_tracker.cc +36 -0
  380. data/src/core/lib/iomgr/network_status_tracker.h +32 -0
  381. data/src/core/lib/iomgr/polling_entity.cc +87 -0
  382. data/src/core/lib/iomgr/polling_entity.h +68 -0
  383. data/src/core/lib/iomgr/pollset.cc +56 -0
  384. data/src/core/lib/iomgr/pollset.h +99 -0
  385. data/src/core/lib/iomgr/pollset_custom.cc +106 -0
  386. data/src/core/lib/iomgr/pollset_custom.h +35 -0
  387. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  388. data/src/core/lib/iomgr/pollset_set.h +55 -0
  389. data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
  390. data/src/core/lib/iomgr/pollset_set_custom.h +26 -0
  391. data/src/core/lib/iomgr/pollset_set_windows.cc +51 -0
  392. data/src/core/lib/iomgr/pollset_set_windows.h +26 -0
  393. data/src/core/lib/iomgr/pollset_uv.cc +93 -0
  394. data/src/core/lib/iomgr/pollset_windows.cc +229 -0
  395. data/src/core/lib/iomgr/pollset_windows.h +70 -0
  396. data/src/core/lib/iomgr/port.h +147 -0
  397. data/src/core/lib/iomgr/resolve_address.cc +50 -0
  398. data/src/core/lib/iomgr/resolve_address.h +83 -0
  399. data/src/core/lib/iomgr/resolve_address_custom.cc +187 -0
  400. data/src/core/lib/iomgr/resolve_address_custom.h +43 -0
  401. data/src/core/lib/iomgr/resolve_address_posix.cc +180 -0
  402. data/src/core/lib/iomgr/resolve_address_windows.cc +165 -0
  403. data/src/core/lib/iomgr/resource_quota.cc +871 -0
  404. data/src/core/lib/iomgr/resource_quota.h +142 -0
  405. data/src/core/lib/iomgr/sockaddr.h +32 -0
  406. data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
  407. data/src/core/lib/iomgr/sockaddr_posix.h +55 -0
  408. data/src/core/lib/iomgr/sockaddr_utils.cc +298 -0
  409. data/src/core/lib/iomgr/sockaddr_utils.h +84 -0
  410. data/src/core/lib/iomgr/sockaddr_windows.h +55 -0
  411. data/src/core/lib/iomgr/socket_factory_posix.cc +94 -0
  412. data/src/core/lib/iomgr/socket_factory_posix.h +69 -0
  413. data/src/core/lib/iomgr/socket_mutator.cc +83 -0
  414. data/src/core/lib/iomgr/socket_mutator.h +61 -0
  415. data/src/core/lib/iomgr/socket_utils.h +38 -0
  416. data/src/core/lib/iomgr/socket_utils_common_posix.cc +327 -0
  417. data/src/core/lib/iomgr/socket_utils_linux.cc +43 -0
  418. data/src/core/lib/iomgr/socket_utils_posix.cc +59 -0
  419. data/src/core/lib/iomgr/socket_utils_posix.h +134 -0
  420. data/src/core/lib/iomgr/socket_utils_uv.cc +45 -0
  421. data/src/core/lib/iomgr/socket_utils_windows.cc +43 -0
  422. data/src/core/lib/iomgr/socket_windows.cc +151 -0
  423. data/src/core/lib/iomgr/socket_windows.h +113 -0
  424. data/src/core/lib/iomgr/sys_epoll_wrapper.h +30 -0
  425. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  426. data/src/core/lib/iomgr/tcp_client.h +52 -0
  427. data/src/core/lib/iomgr/tcp_client_custom.cc +151 -0
  428. data/src/core/lib/iomgr/tcp_client_posix.cc +359 -0
  429. data/src/core/lib/iomgr/tcp_client_posix.h +68 -0
  430. data/src/core/lib/iomgr/tcp_client_windows.cc +231 -0
  431. data/src/core/lib/iomgr/tcp_custom.cc +365 -0
  432. data/src/core/lib/iomgr/tcp_custom.h +81 -0
  433. data/src/core/lib/iomgr/tcp_posix.cc +814 -0
  434. data/src/core/lib/iomgr/tcp_posix.h +57 -0
  435. data/src/core/lib/iomgr/tcp_server.cc +73 -0
  436. data/src/core/lib/iomgr/tcp_server.h +122 -0
  437. data/src/core/lib/iomgr/tcp_server_custom.cc +472 -0
  438. data/src/core/lib/iomgr/tcp_server_posix.cc +582 -0
  439. data/src/core/lib/iomgr/tcp_server_utils_posix.h +122 -0
  440. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +208 -0
  441. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +184 -0
  442. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +36 -0
  443. data/src/core/lib/iomgr/tcp_server_windows.cc +559 -0
  444. data/src/core/lib/iomgr/tcp_uv.cc +417 -0
  445. data/src/core/lib/iomgr/tcp_windows.cc +455 -0
  446. data/src/core/lib/iomgr/tcp_windows.h +51 -0
  447. data/src/core/lib/iomgr/time_averaged_stats.cc +64 -0
  448. data/src/core/lib/iomgr/time_averaged_stats.h +73 -0
  449. data/src/core/lib/iomgr/timer.cc +45 -0
  450. data/src/core/lib/iomgr/timer.h +125 -0
  451. data/src/core/lib/iomgr/timer_custom.cc +93 -0
  452. data/src/core/lib/iomgr/timer_custom.h +43 -0
  453. data/src/core/lib/iomgr/timer_generic.cc +663 -0
  454. data/src/core/lib/iomgr/timer_heap.cc +135 -0
  455. data/src/core/lib/iomgr/timer_heap.h +44 -0
  456. data/src/core/lib/iomgr/timer_manager.cc +347 -0
  457. data/src/core/lib/iomgr/timer_manager.h +39 -0
  458. data/src/core/lib/iomgr/timer_uv.cc +63 -0
  459. data/src/core/lib/iomgr/udp_server.cc +692 -0
  460. data/src/core/lib/iomgr/udp_server.h +103 -0
  461. data/src/core/lib/iomgr/unix_sockets_posix.cc +104 -0
  462. data/src/core/lib/iomgr/unix_sockets_posix.h +43 -0
  463. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +49 -0
  464. data/src/core/lib/iomgr/wakeup_fd_cv.cc +107 -0
  465. data/src/core/lib/iomgr/wakeup_fd_cv.h +69 -0
  466. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +83 -0
  467. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +38 -0
  468. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +100 -0
  469. data/src/core/lib/iomgr/wakeup_fd_pipe.h +28 -0
  470. data/src/core/lib/iomgr/wakeup_fd_posix.cc +87 -0
  471. data/src/core/lib/iomgr/wakeup_fd_posix.h +96 -0
  472. data/src/core/lib/json/json.cc +86 -0
  473. data/src/core/lib/json/json.h +94 -0
  474. data/src/core/lib/json/json_common.h +34 -0
  475. data/src/core/lib/json/json_reader.cc +663 -0
  476. data/src/core/lib/json/json_reader.h +146 -0
  477. data/src/core/lib/json/json_string.cc +367 -0
  478. data/src/core/lib/json/json_writer.cc +245 -0
  479. data/src/core/lib/json/json_writer.h +84 -0
  480. data/src/core/lib/profiling/basic_timers.cc +286 -0
  481. data/src/core/lib/profiling/stap_timers.cc +50 -0
  482. data/src/core/lib/profiling/timers.h +94 -0
  483. data/src/core/lib/security/context/security_context.cc +348 -0
  484. data/src/core/lib/security/context/security_context.h +115 -0
  485. data/src/core/lib/security/credentials/alts/alts_credentials.cc +119 -0
  486. data/src/core/lib/security/credentials/alts/alts_credentials.h +102 -0
  487. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  488. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  489. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +67 -0
  490. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  491. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +114 -0
  492. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +126 -0
  493. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  494. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +112 -0
  495. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +58 -0
  496. data/src/core/lib/security/credentials/composite/composite_credentials.cc +269 -0
  497. data/src/core/lib/security/credentials/composite/composite_credentials.h +59 -0
  498. data/src/core/lib/security/credentials/credentials.cc +286 -0
  499. data/src/core/lib/security/credentials/credentials.h +246 -0
  500. data/src/core/lib/security/credentials/credentials_metadata.cc +62 -0
  501. data/src/core/lib/security/credentials/fake/fake_credentials.cc +136 -0
  502. data/src/core/lib/security/credentials/fake/fake_credentials.h +64 -0
  503. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +41 -0
  504. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +322 -0
  505. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +45 -0
  506. data/src/core/lib/security/credentials/iam/iam_credentials.cc +86 -0
  507. data/src/core/lib/security/credentials/iam/iam_credentials.h +31 -0
  508. data/src/core/lib/security/credentials/jwt/json_token.cc +314 -0
  509. data/src/core/lib/security/credentials/jwt/json_token.h +75 -0
  510. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +190 -0
  511. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +49 -0
  512. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +934 -0
  513. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +123 -0
  514. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +532 -0
  515. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +106 -0
  516. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +271 -0
  517. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +46 -0
  518. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +349 -0
  519. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +54 -0
  520. data/src/core/lib/security/security_connector/alts_security_connector.cc +287 -0
  521. data/src/core/lib/security/security_connector/alts_security_connector.h +69 -0
  522. data/src/core/lib/security/security_connector/security_connector.cc +1200 -0
  523. data/src/core/lib/security/security_connector/security_connector.h +283 -0
  524. data/src/core/lib/security/transport/auth_filters.h +37 -0
  525. data/src/core/lib/security/transport/client_auth_filter.cc +418 -0
  526. data/src/core/lib/security/transport/secure_endpoint.cc +429 -0
  527. data/src/core/lib/security/transport/secure_endpoint.h +41 -0
  528. data/src/core/lib/security/transport/security_handshaker.cc +526 -0
  529. data/src/core/lib/security/transport/security_handshaker.h +34 -0
  530. data/src/core/lib/security/transport/server_auth_filter.cc +269 -0
  531. data/src/core/lib/security/transport/target_authority_table.cc +75 -0
  532. data/src/core/lib/security/transport/target_authority_table.h +40 -0
  533. data/src/core/lib/security/transport/tsi_error.cc +29 -0
  534. data/src/core/lib/security/transport/tsi_error.h +29 -0
  535. data/src/core/lib/security/util/json_util.cc +48 -0
  536. data/src/core/lib/security/util/json_util.h +42 -0
  537. data/src/core/lib/slice/b64.cc +240 -0
  538. data/src/core/lib/slice/b64.h +51 -0
  539. data/src/core/lib/slice/percent_encoding.cc +169 -0
  540. data/src/core/lib/slice/percent_encoding.h +65 -0
  541. data/src/core/lib/slice/slice.cc +489 -0
  542. data/src/core/lib/slice/slice_buffer.cc +359 -0
  543. data/src/core/lib/slice/slice_hash_table.h +201 -0
  544. data/src/core/lib/slice/slice_intern.cc +332 -0
  545. data/src/core/lib/slice/slice_internal.h +49 -0
  546. data/src/core/lib/slice/slice_string_helpers.cc +118 -0
  547. data/src/core/lib/slice/slice_string_helpers.h +47 -0
  548. data/src/core/lib/slice/slice_weak_hash_table.h +105 -0
  549. data/src/core/lib/surface/api_trace.cc +24 -0
  550. data/src/core/lib/surface/api_trace.h +52 -0
  551. data/src/core/lib/surface/byte_buffer.cc +92 -0
  552. data/src/core/lib/surface/byte_buffer_reader.cc +129 -0
  553. data/src/core/lib/surface/call.cc +2002 -0
  554. data/src/core/lib/surface/call.h +109 -0
  555. data/src/core/lib/surface/call_details.cc +42 -0
  556. data/src/core/lib/surface/call_log_batch.cc +120 -0
  557. data/src/core/lib/surface/call_test_only.h +43 -0
  558. data/src/core/lib/surface/channel.cc +450 -0
  559. data/src/core/lib/surface/channel.h +83 -0
  560. data/src/core/lib/surface/channel_init.cc +109 -0
  561. data/src/core/lib/surface/channel_init.h +73 -0
  562. data/src/core/lib/surface/channel_ping.cc +65 -0
  563. data/src/core/lib/surface/channel_stack_type.cc +58 -0
  564. data/src/core/lib/surface/channel_stack_type.h +47 -0
  565. data/src/core/lib/surface/completion_queue.cc +1262 -0
  566. data/src/core/lib/surface/completion_queue.h +93 -0
  567. data/src/core/lib/surface/completion_queue_factory.cc +79 -0
  568. data/src/core/lib/surface/completion_queue_factory.h +38 -0
  569. data/src/core/lib/surface/event_string.cc +68 -0
  570. data/src/core/lib/surface/event_string.h +29 -0
  571. data/src/core/lib/surface/init.cc +196 -0
  572. data/src/core/lib/surface/init.h +27 -0
  573. data/src/core/lib/surface/init_secure.cc +81 -0
  574. data/src/core/lib/surface/lame_client.cc +180 -0
  575. data/src/core/lib/surface/lame_client.h +28 -0
  576. data/src/core/lib/surface/metadata_array.cc +36 -0
  577. data/src/core/lib/surface/server.cc +1445 -0
  578. data/src/core/lib/surface/server.h +58 -0
  579. data/src/core/lib/surface/validate_metadata.cc +95 -0
  580. data/src/core/lib/surface/validate_metadata.h +30 -0
  581. data/src/core/lib/surface/version.cc +28 -0
  582. data/src/core/lib/transport/bdp_estimator.cc +87 -0
  583. data/src/core/lib/transport/bdp_estimator.h +94 -0
  584. data/src/core/lib/transport/byte_stream.cc +160 -0
  585. data/src/core/lib/transport/byte_stream.h +164 -0
  586. data/src/core/lib/transport/connectivity_state.cc +196 -0
  587. data/src/core/lib/transport/connectivity_state.h +87 -0
  588. data/src/core/lib/transport/error_utils.cc +118 -0
  589. data/src/core/lib/transport/error_utils.h +46 -0
  590. data/src/core/lib/transport/http2_errors.h +41 -0
  591. data/src/core/lib/transport/metadata.cc +539 -0
  592. data/src/core/lib/transport/metadata.h +165 -0
  593. data/src/core/lib/transport/metadata_batch.cc +329 -0
  594. data/src/core/lib/transport/metadata_batch.h +150 -0
  595. data/src/core/lib/transport/pid_controller.cc +51 -0
  596. data/src/core/lib/transport/pid_controller.h +116 -0
  597. data/src/core/lib/transport/service_config.cc +106 -0
  598. data/src/core/lib/transport/service_config.h +249 -0
  599. data/src/core/lib/transport/static_metadata.cc +601 -0
  600. data/src/core/lib/transport/static_metadata.h +603 -0
  601. data/src/core/lib/transport/status_conversion.cc +100 -0
  602. data/src/core/lib/transport/status_conversion.h +38 -0
  603. data/src/core/lib/transport/status_metadata.cc +54 -0
  604. data/src/core/lib/transport/status_metadata.h +30 -0
  605. data/src/core/lib/transport/timeout_encoding.cc +144 -0
  606. data/src/core/lib/transport/timeout_encoding.h +37 -0
  607. data/src/core/lib/transport/transport.cc +278 -0
  608. data/src/core/lib/transport/transport.h +378 -0
  609. data/src/core/lib/transport/transport_impl.h +71 -0
  610. data/src/core/lib/transport/transport_op_string.cc +214 -0
  611. data/src/core/plugin_registry/grpc_plugin_registry.cc +97 -0
  612. data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
  613. data/src/core/tsi/alts/crypt/gsec.cc +189 -0
  614. data/src/core/tsi/alts/crypt/gsec.h +454 -0
  615. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  616. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  617. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  618. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  619. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
  620. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  621. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  622. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  623. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  624. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  625. data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
  626. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  627. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +316 -0
  628. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +137 -0
  629. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +520 -0
  630. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +323 -0
  631. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +143 -0
  632. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +149 -0
  633. data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +73 -0
  634. data/src/core/tsi/alts/handshaker/alts_tsi_event.h +93 -0
  635. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +483 -0
  636. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +83 -0
  637. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +52 -0
  638. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +58 -0
  639. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +52 -0
  640. data/src/core/tsi/alts/handshaker/altscontext.pb.c +48 -0
  641. data/src/core/tsi/alts/handshaker/altscontext.pb.h +64 -0
  642. data/src/core/tsi/alts/handshaker/handshaker.pb.c +123 -0
  643. data/src/core/tsi/alts/handshaker/handshaker.pb.h +255 -0
  644. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +50 -0
  645. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +78 -0
  646. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +196 -0
  647. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +163 -0
  648. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +180 -0
  649. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +52 -0
  650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  652. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  653. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  654. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +100 -0
  655. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
  656. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  657. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +296 -0
  658. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +52 -0
  659. data/src/core/tsi/alts_transport_security.cc +63 -0
  660. data/src/core/tsi/alts_transport_security.h +47 -0
  661. data/src/core/tsi/fake_transport_security.cc +787 -0
  662. data/src/core/tsi/fake_transport_security.h +45 -0
  663. data/src/core/tsi/ssl/session_cache/ssl_session.h +73 -0
  664. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +58 -0
  665. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +211 -0
  666. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +93 -0
  667. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +76 -0
  668. data/src/core/tsi/ssl_transport_security.cc +1831 -0
  669. data/src/core/tsi/ssl_transport_security.h +314 -0
  670. data/src/core/tsi/ssl_types.h +42 -0
  671. data/src/core/tsi/transport_security.cc +326 -0
  672. data/src/core/tsi/transport_security.h +127 -0
  673. data/src/core/tsi/transport_security_adapter.cc +235 -0
  674. data/src/core/tsi/transport_security_adapter.h +41 -0
  675. data/src/core/tsi/transport_security_grpc.cc +66 -0
  676. data/src/core/tsi/transport_security_grpc.h +74 -0
  677. data/src/core/tsi/transport_security_interface.h +454 -0
  678. data/src/ruby/bin/apis/google/protobuf/empty.rb +29 -0
  679. data/src/ruby/bin/apis/pubsub_demo.rb +241 -0
  680. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +159 -0
  681. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +88 -0
  682. data/src/ruby/bin/math_client.rb +132 -0
  683. data/src/ruby/bin/math_pb.rb +32 -0
  684. data/src/ruby/bin/math_server.rb +191 -0
  685. data/src/ruby/bin/math_services_pb.rb +51 -0
  686. data/src/ruby/bin/noproto_client.rb +93 -0
  687. data/src/ruby/bin/noproto_server.rb +97 -0
  688. data/src/ruby/ext/grpc/extconf.rb +118 -0
  689. data/src/ruby/ext/grpc/rb_byte_buffer.c +64 -0
  690. data/src/ruby/ext/grpc/rb_byte_buffer.h +35 -0
  691. data/src/ruby/ext/grpc/rb_call.c +1041 -0
  692. data/src/ruby/ext/grpc/rb_call.h +53 -0
  693. data/src/ruby/ext/grpc/rb_call_credentials.c +290 -0
  694. data/src/ruby/ext/grpc/rb_call_credentials.h +31 -0
  695. data/src/ruby/ext/grpc/rb_channel.c +828 -0
  696. data/src/ruby/ext/grpc/rb_channel.h +34 -0
  697. data/src/ruby/ext/grpc/rb_channel_args.c +155 -0
  698. data/src/ruby/ext/grpc/rb_channel_args.h +38 -0
  699. data/src/ruby/ext/grpc/rb_channel_credentials.c +263 -0
  700. data/src/ruby/ext/grpc/rb_channel_credentials.h +32 -0
  701. data/src/ruby/ext/grpc/rb_completion_queue.c +100 -0
  702. data/src/ruby/ext/grpc/rb_completion_queue.h +36 -0
  703. data/src/ruby/ext/grpc/rb_compression_options.c +468 -0
  704. data/src/ruby/ext/grpc/rb_compression_options.h +29 -0
  705. data/src/ruby/ext/grpc/rb_event_thread.c +141 -0
  706. data/src/ruby/ext/grpc/rb_event_thread.h +21 -0
  707. data/src/ruby/ext/grpc/rb_grpc.c +340 -0
  708. data/src/ruby/ext/grpc/rb_grpc.h +72 -0
  709. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +507 -0
  710. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +766 -0
  711. data/src/ruby/ext/grpc/rb_loader.c +57 -0
  712. data/src/ruby/ext/grpc/rb_loader.h +25 -0
  713. data/src/ruby/ext/grpc/rb_server.c +366 -0
  714. data/src/ruby/ext/grpc/rb_server.h +32 -0
  715. data/src/ruby/ext/grpc/rb_server_credentials.c +243 -0
  716. data/src/ruby/ext/grpc/rb_server_credentials.h +32 -0
  717. data/src/ruby/lib/grpc.rb +35 -0
  718. data/src/ruby/lib/grpc/core/time_consts.rb +56 -0
  719. data/src/ruby/lib/grpc/errors.rb +201 -0
  720. data/src/ruby/lib/grpc/generic/active_call.rb +674 -0
  721. data/src/ruby/lib/grpc/generic/bidi_call.rb +233 -0
  722. data/src/ruby/lib/grpc/generic/client_stub.rb +501 -0
  723. data/src/ruby/lib/grpc/generic/interceptor_registry.rb +53 -0
  724. data/src/ruby/lib/grpc/generic/interceptors.rb +186 -0
  725. data/src/ruby/lib/grpc/generic/rpc_desc.rb +204 -0
  726. data/src/ruby/lib/grpc/generic/rpc_server.rb +490 -0
  727. data/src/ruby/lib/grpc/generic/service.rb +210 -0
  728. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +35 -0
  729. data/src/ruby/lib/grpc/grpc.rb +24 -0
  730. data/src/ruby/lib/grpc/logconfig.rb +44 -0
  731. data/src/ruby/lib/grpc/notifier.rb +45 -0
  732. data/src/ruby/lib/grpc/version.rb +18 -0
  733. data/src/ruby/pb/README.md +42 -0
  734. data/src/ruby/pb/generate_proto_ruby.sh +43 -0
  735. data/src/ruby/pb/grpc/health/checker.rb +76 -0
  736. data/src/ruby/pb/grpc/health/v1/health_pb.rb +28 -0
  737. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +41 -0
  738. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +44 -0
  739. data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
  740. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +49 -0
  741. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +15 -0
  742. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +82 -0
  743. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +14 -0
  744. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +102 -0
  745. data/src/ruby/pb/test/client.rb +764 -0
  746. data/src/ruby/pb/test/server.rb +252 -0
  747. data/src/ruby/spec/call_credentials_spec.rb +42 -0
  748. data/src/ruby/spec/call_spec.rb +180 -0
  749. data/src/ruby/spec/channel_connection_spec.rb +126 -0
  750. data/src/ruby/spec/channel_credentials_spec.rb +82 -0
  751. data/src/ruby/spec/channel_spec.rb +190 -0
  752. data/src/ruby/spec/client_auth_spec.rb +137 -0
  753. data/src/ruby/spec/client_server_spec.rb +664 -0
  754. data/src/ruby/spec/compression_options_spec.rb +149 -0
  755. data/src/ruby/spec/error_sanity_spec.rb +49 -0
  756. data/src/ruby/spec/generic/active_call_spec.rb +672 -0
  757. data/src/ruby/spec/generic/client_interceptors_spec.rb +153 -0
  758. data/src/ruby/spec/generic/client_stub_spec.rb +1067 -0
  759. data/src/ruby/spec/generic/interceptor_registry_spec.rb +65 -0
  760. data/src/ruby/spec/generic/rpc_desc_spec.rb +374 -0
  761. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +127 -0
  762. data/src/ruby/spec/generic/rpc_server_spec.rb +726 -0
  763. data/src/ruby/spec/generic/server_interceptors_spec.rb +218 -0
  764. data/src/ruby/spec/generic/service_spec.rb +261 -0
  765. data/src/ruby/spec/google_rpc_status_utils_spec.rb +293 -0
  766. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +56 -0
  767. data/src/ruby/spec/pb/health/checker_spec.rb +236 -0
  768. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +54 -0
  769. data/src/ruby/spec/pb/package_with_underscore/data.proto +23 -0
  770. data/src/ruby/spec/pb/package_with_underscore/service.proto +23 -0
  771. data/src/ruby/spec/server_credentials_spec.rb +79 -0
  772. data/src/ruby/spec/server_spec.rb +209 -0
  773. data/src/ruby/spec/spec_helper.rb +60 -0
  774. data/src/ruby/spec/support/helpers.rb +107 -0
  775. data/src/ruby/spec/support/services.rb +147 -0
  776. data/src/ruby/spec/testdata/README +1 -0
  777. data/src/ruby/spec/testdata/ca.pem +15 -0
  778. data/src/ruby/spec/testdata/client.key +16 -0
  779. data/src/ruby/spec/testdata/client.pem +14 -0
  780. data/src/ruby/spec/testdata/server1.key +16 -0
  781. data/src/ruby/spec/testdata/server1.pem +16 -0
  782. data/src/ruby/spec/time_consts_spec.rb +74 -0
  783. data/third_party/address_sorting/address_sorting.c +369 -0
  784. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  785. data/third_party/address_sorting/address_sorting_posix.c +97 -0
  786. data/third_party/address_sorting/address_sorting_windows.c +55 -0
  787. data/third_party/address_sorting/include/address_sorting/address_sorting.h +110 -0
  788. data/third_party/boringssl/crypto/asn1/a_bitstr.c +271 -0
  789. data/third_party/boringssl/crypto/asn1/a_bool.c +110 -0
  790. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +297 -0
  791. data/third_party/boringssl/crypto/asn1/a_dup.c +111 -0
  792. data/third_party/boringssl/crypto/asn1/a_enum.c +195 -0
  793. data/third_party/boringssl/crypto/asn1/a_gentm.c +261 -0
  794. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +150 -0
  795. data/third_party/boringssl/crypto/asn1/a_int.c +474 -0
  796. data/third_party/boringssl/crypto/asn1/a_mbstr.c +409 -0
  797. data/third_party/boringssl/crypto/asn1/a_object.c +275 -0
  798. data/third_party/boringssl/crypto/asn1/a_octet.c +77 -0
  799. data/third_party/boringssl/crypto/asn1/a_print.c +93 -0
  800. data/third_party/boringssl/crypto/asn1/a_strnid.c +312 -0
  801. data/third_party/boringssl/crypto/asn1/a_time.c +213 -0
  802. data/third_party/boringssl/crypto/asn1/a_type.c +151 -0
  803. data/third_party/boringssl/crypto/asn1/a_utctm.c +303 -0
  804. data/third_party/boringssl/crypto/asn1/a_utf8.c +234 -0
  805. data/third_party/boringssl/crypto/asn1/asn1_lib.c +442 -0
  806. data/third_party/boringssl/crypto/asn1/asn1_locl.h +101 -0
  807. data/third_party/boringssl/crypto/asn1/asn1_par.c +80 -0
  808. data/third_party/boringssl/crypto/asn1/asn_pack.c +105 -0
  809. data/third_party/boringssl/crypto/asn1/f_enum.c +93 -0
  810. data/third_party/boringssl/crypto/asn1/f_int.c +97 -0
  811. data/third_party/boringssl/crypto/asn1/f_string.c +91 -0
  812. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1223 -0
  813. data/third_party/boringssl/crypto/asn1/tasn_enc.c +662 -0
  814. data/third_party/boringssl/crypto/asn1/tasn_fre.c +244 -0
  815. data/third_party/boringssl/crypto/asn1/tasn_new.c +387 -0
  816. data/third_party/boringssl/crypto/asn1/tasn_typ.c +131 -0
  817. data/third_party/boringssl/crypto/asn1/tasn_utl.c +280 -0
  818. data/third_party/boringssl/crypto/asn1/time_support.c +206 -0
  819. data/third_party/boringssl/crypto/base64/base64.c +466 -0
  820. data/third_party/boringssl/crypto/bio/bio.c +636 -0
  821. data/third_party/boringssl/crypto/bio/bio_mem.c +330 -0
  822. data/third_party/boringssl/crypto/bio/connect.c +542 -0
  823. data/third_party/boringssl/crypto/bio/fd.c +275 -0
  824. data/third_party/boringssl/crypto/bio/file.c +313 -0
  825. data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
  826. data/third_party/boringssl/crypto/bio/internal.h +111 -0
  827. data/third_party/boringssl/crypto/bio/pair.c +489 -0
  828. data/third_party/boringssl/crypto/bio/printf.c +115 -0
  829. data/third_party/boringssl/crypto/bio/socket.c +202 -0
  830. data/third_party/boringssl/crypto/bio/socket_helper.c +114 -0
  831. data/third_party/boringssl/crypto/bn_extra/bn_asn1.c +64 -0
  832. data/third_party/boringssl/crypto/bn_extra/convert.c +465 -0
  833. data/third_party/boringssl/crypto/buf/buf.c +231 -0
  834. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +52 -0
  835. data/third_party/boringssl/crypto/bytestring/ber.c +264 -0
  836. data/third_party/boringssl/crypto/bytestring/cbb.c +568 -0
  837. data/third_party/boringssl/crypto/bytestring/cbs.c +487 -0
  838. data/third_party/boringssl/crypto/bytestring/internal.h +75 -0
  839. data/third_party/boringssl/crypto/chacha/chacha.c +167 -0
  840. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +114 -0
  841. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +152 -0
  842. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
  843. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
  844. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
  845. data/third_party/boringssl/crypto/cipher_extra/e_null.c +85 -0
  846. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +460 -0
  847. data/third_party/boringssl/crypto/cipher_extra/e_rc4.c +87 -0
  848. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +460 -0
  849. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +681 -0
  850. data/third_party/boringssl/crypto/cipher_extra/internal.h +128 -0
  851. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
  852. data/third_party/boringssl/crypto/cmac/cmac.c +241 -0
  853. data/third_party/boringssl/crypto/conf/conf.c +803 -0
  854. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  855. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  856. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  857. data/third_party/boringssl/crypto/cpu-arm-linux.c +363 -0
  858. data/third_party/boringssl/crypto/cpu-arm.c +38 -0
  859. data/third_party/boringssl/crypto/cpu-intel.c +288 -0
  860. data/third_party/boringssl/crypto/cpu-ppc64le.c +38 -0
  861. data/third_party/boringssl/crypto/crypto.c +198 -0
  862. data/third_party/boringssl/crypto/curve25519/spake25519.c +539 -0
  863. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +247 -0
  864. data/third_party/boringssl/crypto/dh/check.c +217 -0
  865. data/third_party/boringssl/crypto/dh/dh.c +519 -0
  866. data/third_party/boringssl/crypto/dh/dh_asn1.c +160 -0
  867. data/third_party/boringssl/crypto/dh/params.c +93 -0
  868. data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
  869. data/third_party/boringssl/crypto/dsa/dsa.c +984 -0
  870. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +339 -0
  871. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +563 -0
  872. data/third_party/boringssl/crypto/ecdh/ecdh.c +161 -0
  873. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +275 -0
  874. data/third_party/boringssl/crypto/engine/engine.c +98 -0
  875. data/third_party/boringssl/crypto/err/err.c +847 -0
  876. data/third_party/boringssl/crypto/err/internal.h +58 -0
  877. data/third_party/boringssl/crypto/evp/digestsign.c +231 -0
  878. data/third_party/boringssl/crypto/evp/evp.c +362 -0
  879. data/third_party/boringssl/crypto/evp/evp_asn1.c +337 -0
  880. data/third_party/boringssl/crypto/evp/evp_ctx.c +446 -0
  881. data/third_party/boringssl/crypto/evp/internal.h +252 -0
  882. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +268 -0
  883. data/third_party/boringssl/crypto/evp/p_ec.c +239 -0
  884. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +256 -0
  885. data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
  886. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
  887. data/third_party/boringssl/crypto/evp/p_rsa.c +634 -0
  888. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +189 -0
  889. data/third_party/boringssl/crypto/evp/pbkdf.c +146 -0
  890. data/third_party/boringssl/crypto/evp/print.c +489 -0
  891. data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
  892. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  893. data/third_party/boringssl/crypto/ex_data.c +261 -0
  894. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +1100 -0
  895. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
  896. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +138 -0
  897. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +112 -0
  898. data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
  899. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +371 -0
  900. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +540 -0
  901. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +370 -0
  902. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +269 -0
  903. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +254 -0
  904. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +303 -0
  905. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +733 -0
  906. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +1390 -0
  907. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +627 -0
  908. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +710 -0
  909. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +413 -0
  910. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +146 -0
  911. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +483 -0
  912. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +207 -0
  913. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +902 -0
  914. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +894 -0
  915. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +299 -0
  916. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +254 -0
  917. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +53 -0
  918. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +305 -0
  919. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +502 -0
  920. data/third_party/boringssl/crypto/fipsmodule/cipher/aead.c +284 -0
  921. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +615 -0
  922. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +1437 -0
  923. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +233 -0
  924. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +129 -0
  925. data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
  926. data/third_party/boringssl/crypto/fipsmodule/des/des.c +785 -0
  927. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +238 -0
  928. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +256 -0
  929. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +280 -0
  930. data/third_party/boringssl/crypto/fipsmodule/digest/internal.h +112 -0
  931. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +268 -0
  932. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +943 -0
  933. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +517 -0
  934. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +277 -0
  935. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +316 -0
  936. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +404 -0
  937. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +1131 -0
  938. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +1674 -0
  939. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9543 -0
  940. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +456 -0
  941. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +113 -0
  942. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +1052 -0
  943. data/third_party/boringssl/crypto/fipsmodule/ec/util-64.c +109 -0
  944. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +474 -0
  945. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +442 -0
  946. data/third_party/boringssl/crypto/fipsmodule/hmac/hmac.c +228 -0
  947. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +27 -0
  948. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +254 -0
  949. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +298 -0
  950. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +211 -0
  951. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +234 -0
  952. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +220 -0
  953. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +1063 -0
  954. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +384 -0
  955. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +95 -0
  956. data/third_party/boringssl/crypto/fipsmodule/modes/polyval.c +91 -0
  957. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +200 -0
  958. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
  959. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +358 -0
  960. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +302 -0
  961. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +263 -0
  962. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +131 -0
  963. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +692 -0
  964. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +857 -0
  965. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +1051 -0
  966. data/third_party/boringssl/crypto/fipsmodule/sha/sha1-altivec.c +361 -0
  967. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +375 -0
  968. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +337 -0
  969. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +608 -0
  970. data/third_party/boringssl/crypto/hkdf/hkdf.c +112 -0
  971. data/third_party/boringssl/crypto/internal.h +676 -0
  972. data/third_party/boringssl/crypto/lhash/lhash.c +336 -0
  973. data/third_party/boringssl/crypto/mem.c +237 -0
  974. data/third_party/boringssl/crypto/obj/obj.c +621 -0
  975. data/third_party/boringssl/crypto/obj/obj_dat.h +6244 -0
  976. data/third_party/boringssl/crypto/obj/obj_xref.c +122 -0
  977. data/third_party/boringssl/crypto/pem/pem_all.c +262 -0
  978. data/third_party/boringssl/crypto/pem/pem_info.c +379 -0
  979. data/third_party/boringssl/crypto/pem/pem_lib.c +776 -0
  980. data/third_party/boringssl/crypto/pem/pem_oth.c +88 -0
  981. data/third_party/boringssl/crypto/pem/pem_pk8.c +258 -0
  982. data/third_party/boringssl/crypto/pem/pem_pkey.c +227 -0
  983. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  984. data/third_party/boringssl/crypto/pem/pem_xaux.c +65 -0
  985. data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
  986. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
  987. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +233 -0
  988. data/third_party/boringssl/crypto/pkcs8/internal.h +120 -0
  989. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +307 -0
  990. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +513 -0
  991. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
  992. data/third_party/boringssl/crypto/poly1305/internal.h +41 -0
  993. data/third_party/boringssl/crypto/poly1305/poly1305.c +318 -0
  994. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +304 -0
  995. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +839 -0
  996. data/third_party/boringssl/crypto/pool/internal.h +45 -0
  997. data/third_party/boringssl/crypto/pool/pool.c +200 -0
  998. data/third_party/boringssl/crypto/rand_extra/deterministic.c +48 -0
  999. data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
  1000. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +43 -0
  1001. data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
  1002. data/third_party/boringssl/crypto/rand_extra/windows.c +53 -0
  1003. data/third_party/boringssl/crypto/rc4/rc4.c +98 -0
  1004. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  1005. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  1006. data/third_party/boringssl/crypto/rsa_extra/rsa_asn1.c +325 -0
  1007. data/third_party/boringssl/crypto/stack/stack.c +380 -0
  1008. data/third_party/boringssl/crypto/thread.c +110 -0
  1009. data/third_party/boringssl/crypto/thread_none.c +59 -0
  1010. data/third_party/boringssl/crypto/thread_pthread.c +176 -0
  1011. data/third_party/boringssl/crypto/thread_win.c +237 -0
  1012. data/third_party/boringssl/crypto/x509/a_digest.c +96 -0
  1013. data/third_party/boringssl/crypto/x509/a_sign.c +128 -0
  1014. data/third_party/boringssl/crypto/x509/a_strex.c +633 -0
  1015. data/third_party/boringssl/crypto/x509/a_verify.c +115 -0
  1016. data/third_party/boringssl/crypto/x509/algorithm.c +153 -0
  1017. data/third_party/boringssl/crypto/x509/asn1_gen.c +841 -0
  1018. data/third_party/boringssl/crypto/x509/by_dir.c +451 -0
  1019. data/third_party/boringssl/crypto/x509/by_file.c +274 -0
  1020. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  1021. data/third_party/boringssl/crypto/x509/i2d_pr.c +83 -0
  1022. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  1023. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  1024. data/third_party/boringssl/crypto/x509/t_crl.c +128 -0
  1025. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  1026. data/third_party/boringssl/crypto/x509/t_x509.c +547 -0
  1027. data/third_party/boringssl/crypto/x509/t_x509a.c +111 -0
  1028. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  1029. data/third_party/boringssl/crypto/x509/x509.c +157 -0
  1030. data/third_party/boringssl/crypto/x509/x509_att.c +381 -0
  1031. data/third_party/boringssl/crypto/x509/x509_cmp.c +477 -0
  1032. data/third_party/boringssl/crypto/x509/x509_d2.c +106 -0
  1033. data/third_party/boringssl/crypto/x509/x509_def.c +103 -0
  1034. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  1035. data/third_party/boringssl/crypto/x509/x509_lu.c +725 -0
  1036. data/third_party/boringssl/crypto/x509/x509_obj.c +198 -0
  1037. data/third_party/boringssl/crypto/x509/x509_r2x.c +117 -0
  1038. data/third_party/boringssl/crypto/x509/x509_req.c +322 -0
  1039. data/third_party/boringssl/crypto/x509/x509_set.c +164 -0
  1040. data/third_party/boringssl/crypto/x509/x509_trs.c +326 -0
  1041. data/third_party/boringssl/crypto/x509/x509_txt.c +205 -0
  1042. data/third_party/boringssl/crypto/x509/x509_v3.c +278 -0
  1043. data/third_party/boringssl/crypto/x509/x509_vfy.c +2472 -0
  1044. data/third_party/boringssl/crypto/x509/x509_vpm.c +648 -0
  1045. data/third_party/boringssl/crypto/x509/x509cset.c +170 -0
  1046. data/third_party/boringssl/crypto/x509/x509name.c +389 -0
  1047. data/third_party/boringssl/crypto/x509/x509rset.c +81 -0
  1048. data/third_party/boringssl/crypto/x509/x509spki.c +137 -0
  1049. data/third_party/boringssl/crypto/x509/x_algor.c +151 -0
  1050. data/third_party/boringssl/crypto/x509/x_all.c +501 -0
  1051. data/third_party/boringssl/crypto/x509/x_attrib.c +111 -0
  1052. data/third_party/boringssl/crypto/x509/x_crl.c +541 -0
  1053. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  1054. data/third_party/boringssl/crypto/x509/x_info.c +98 -0
  1055. data/third_party/boringssl/crypto/x509/x_name.c +541 -0
  1056. data/third_party/boringssl/crypto/x509/x_pkey.c +106 -0
  1057. data/third_party/boringssl/crypto/x509/x_pubkey.c +368 -0
  1058. data/third_party/boringssl/crypto/x509/x_req.c +109 -0
  1059. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  1060. data/third_party/boringssl/crypto/x509/x_spki.c +80 -0
  1061. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  1062. data/third_party/boringssl/crypto/x509/x_x509.c +328 -0
  1063. data/third_party/boringssl/crypto/x509/x_x509a.c +198 -0
  1064. data/third_party/boringssl/crypto/x509v3/ext_dat.h +143 -0
  1065. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +284 -0
  1066. data/third_party/boringssl/crypto/x509v3/pcy_data.c +130 -0
  1067. data/third_party/boringssl/crypto/x509v3/pcy_int.h +217 -0
  1068. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +155 -0
  1069. data/third_party/boringssl/crypto/x509v3/pcy_map.c +130 -0
  1070. data/third_party/boringssl/crypto/x509v3/pcy_node.c +188 -0
  1071. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +840 -0
  1072. data/third_party/boringssl/crypto/x509v3/v3_akey.c +204 -0
  1073. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +72 -0
  1074. data/third_party/boringssl/crypto/x509v3/v3_alt.c +623 -0
  1075. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +133 -0
  1076. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  1077. data/third_party/boringssl/crypto/x509v3/v3_conf.c +462 -0
  1078. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +502 -0
  1079. data/third_party/boringssl/crypto/x509v3/v3_crld.c +561 -0
  1080. data/third_party/boringssl/crypto/x509v3/v3_enum.c +100 -0
  1081. data/third_party/boringssl/crypto/x509v3/v3_extku.c +148 -0
  1082. data/third_party/boringssl/crypto/x509v3/v3_genn.c +251 -0
  1083. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +122 -0
  1084. data/third_party/boringssl/crypto/x509v3/v3_info.c +219 -0
  1085. data/third_party/boringssl/crypto/x509v3/v3_int.c +91 -0
  1086. data/third_party/boringssl/crypto/x509v3/v3_lib.c +370 -0
  1087. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +501 -0
  1088. data/third_party/boringssl/crypto/x509v3/v3_pci.c +287 -0
  1089. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +57 -0
  1090. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +139 -0
  1091. data/third_party/boringssl/crypto/x509v3/v3_pku.c +110 -0
  1092. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +154 -0
  1093. data/third_party/boringssl/crypto/x509v3/v3_prn.c +229 -0
  1094. data/third_party/boringssl/crypto/x509v3/v3_purp.c +866 -0
  1095. data/third_party/boringssl/crypto/x509v3/v3_skey.c +152 -0
  1096. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +274 -0
  1097. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1352 -0
  1098. data/third_party/boringssl/include/openssl/aead.h +423 -0
  1099. data/third_party/boringssl/include/openssl/aes.h +170 -0
  1100. data/third_party/boringssl/include/openssl/arm_arch.h +121 -0
  1101. data/third_party/boringssl/include/openssl/asn1.h +982 -0
  1102. data/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  1103. data/third_party/boringssl/include/openssl/asn1t.h +892 -0
  1104. data/third_party/boringssl/include/openssl/base.h +469 -0
  1105. data/third_party/boringssl/include/openssl/base64.h +187 -0
  1106. data/third_party/boringssl/include/openssl/bio.h +902 -0
  1107. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  1108. data/third_party/boringssl/include/openssl/bn.h +975 -0
  1109. data/third_party/boringssl/include/openssl/buf.h +137 -0
  1110. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  1111. data/third_party/boringssl/include/openssl/bytestring.h +480 -0
  1112. data/third_party/boringssl/include/openssl/cast.h +96 -0
  1113. data/third_party/boringssl/include/openssl/chacha.h +41 -0
  1114. data/third_party/boringssl/include/openssl/cipher.h +608 -0
  1115. data/third_party/boringssl/include/openssl/cmac.h +87 -0
  1116. data/third_party/boringssl/include/openssl/conf.h +183 -0
  1117. data/third_party/boringssl/include/openssl/cpu.h +196 -0
  1118. data/third_party/boringssl/include/openssl/crypto.h +118 -0
  1119. data/third_party/boringssl/include/openssl/curve25519.h +201 -0
  1120. data/third_party/boringssl/include/openssl/des.h +177 -0
  1121. data/third_party/boringssl/include/openssl/dh.h +298 -0
  1122. data/third_party/boringssl/include/openssl/digest.h +316 -0
  1123. data/third_party/boringssl/include/openssl/dsa.h +435 -0
  1124. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  1125. data/third_party/boringssl/include/openssl/ec.h +407 -0
  1126. data/third_party/boringssl/include/openssl/ec_key.h +341 -0
  1127. data/third_party/boringssl/include/openssl/ecdh.h +101 -0
  1128. data/third_party/boringssl/include/openssl/ecdsa.h +199 -0
  1129. data/third_party/boringssl/include/openssl/engine.h +109 -0
  1130. data/third_party/boringssl/include/openssl/err.h +458 -0
  1131. data/third_party/boringssl/include/openssl/evp.h +873 -0
  1132. data/third_party/boringssl/include/openssl/ex_data.h +203 -0
  1133. data/third_party/boringssl/include/openssl/hkdf.h +64 -0
  1134. data/third_party/boringssl/include/openssl/hmac.h +186 -0
  1135. data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  1136. data/third_party/boringssl/include/openssl/lhash.h +174 -0
  1137. data/third_party/boringssl/include/openssl/lhash_macros.h +174 -0
  1138. data/third_party/boringssl/include/openssl/md4.h +106 -0
  1139. data/third_party/boringssl/include/openssl/md5.h +107 -0
  1140. data/third_party/boringssl/include/openssl/mem.h +156 -0
  1141. data/third_party/boringssl/include/openssl/nid.h +4242 -0
  1142. data/third_party/boringssl/include/openssl/obj.h +233 -0
  1143. data/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  1144. data/third_party/boringssl/include/openssl/objects.h +18 -0
  1145. data/third_party/boringssl/include/openssl/opensslconf.h +67 -0
  1146. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  1147. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  1148. data/third_party/boringssl/include/openssl/pem.h +397 -0
  1149. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  1150. data/third_party/boringssl/include/openssl/pkcs7.h +82 -0
  1151. data/third_party/boringssl/include/openssl/pkcs8.h +230 -0
  1152. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  1153. data/third_party/boringssl/include/openssl/pool.h +91 -0
  1154. data/third_party/boringssl/include/openssl/rand.h +125 -0
  1155. data/third_party/boringssl/include/openssl/rc4.h +96 -0
  1156. data/third_party/boringssl/include/openssl/ripemd.h +107 -0
  1157. data/third_party/boringssl/include/openssl/rsa.h +731 -0
  1158. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  1159. data/third_party/boringssl/include/openssl/sha.h +256 -0
  1160. data/third_party/boringssl/include/openssl/span.h +191 -0
  1161. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  1162. data/third_party/boringssl/include/openssl/ssl.h +4592 -0
  1163. data/third_party/boringssl/include/openssl/ssl3.h +333 -0
  1164. data/third_party/boringssl/include/openssl/stack.h +485 -0
  1165. data/third_party/boringssl/include/openssl/thread.h +191 -0
  1166. data/third_party/boringssl/include/openssl/tls1.h +610 -0
  1167. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  1168. data/third_party/boringssl/include/openssl/x509.h +1176 -0
  1169. data/third_party/boringssl/include/openssl/x509_vfy.h +614 -0
  1170. data/third_party/boringssl/include/openssl/x509v3.h +826 -0
  1171. data/third_party/boringssl/ssl/bio_ssl.cc +179 -0
  1172. data/third_party/boringssl/ssl/custom_extensions.cc +265 -0
  1173. data/third_party/boringssl/ssl/d1_both.cc +837 -0
  1174. data/third_party/boringssl/ssl/d1_lib.cc +267 -0
  1175. data/third_party/boringssl/ssl/d1_pkt.cc +274 -0
  1176. data/third_party/boringssl/ssl/d1_srtp.cc +232 -0
  1177. data/third_party/boringssl/ssl/dtls_method.cc +193 -0
  1178. data/third_party/boringssl/ssl/dtls_record.cc +353 -0
  1179. data/third_party/boringssl/ssl/handshake.cc +616 -0
  1180. data/third_party/boringssl/ssl/handshake_client.cc +1836 -0
  1181. data/third_party/boringssl/ssl/handshake_server.cc +1662 -0
  1182. data/third_party/boringssl/ssl/internal.h +3011 -0
  1183. data/third_party/boringssl/ssl/s3_both.cc +585 -0
  1184. data/third_party/boringssl/ssl/s3_lib.cc +224 -0
  1185. data/third_party/boringssl/ssl/s3_pkt.cc +443 -0
  1186. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
  1187. data/third_party/boringssl/ssl/ssl_asn1.cc +840 -0
  1188. data/third_party/boringssl/ssl/ssl_buffer.cc +286 -0
  1189. data/third_party/boringssl/ssl/ssl_cert.cc +913 -0
  1190. data/third_party/boringssl/ssl/ssl_cipher.cc +1777 -0
  1191. data/third_party/boringssl/ssl/ssl_file.cc +583 -0
  1192. data/third_party/boringssl/ssl/ssl_key_share.cc +250 -0
  1193. data/third_party/boringssl/ssl/ssl_lib.cc +2650 -0
  1194. data/third_party/boringssl/ssl/ssl_privkey.cc +488 -0
  1195. data/third_party/boringssl/ssl/ssl_session.cc +1221 -0
  1196. data/third_party/boringssl/ssl/ssl_stat.cc +224 -0
  1197. data/third_party/boringssl/ssl/ssl_transcript.cc +398 -0
  1198. data/third_party/boringssl/ssl/ssl_versions.cc +472 -0
  1199. data/third_party/boringssl/ssl/ssl_x509.cc +1299 -0
  1200. data/third_party/boringssl/ssl/t1_enc.cc +503 -0
  1201. data/third_party/boringssl/ssl/t1_lib.cc +3457 -0
  1202. data/third_party/boringssl/ssl/tls13_both.cc +551 -0
  1203. data/third_party/boringssl/ssl/tls13_client.cc +977 -0
  1204. data/third_party/boringssl/ssl/tls13_enc.cc +563 -0
  1205. data/third_party/boringssl/ssl/tls13_server.cc +1068 -0
  1206. data/third_party/boringssl/ssl/tls_method.cc +291 -0
  1207. data/third_party/boringssl/ssl/tls_record.cc +712 -0
  1208. data/third_party/boringssl/third_party/fiat/curve25519.c +5062 -0
  1209. data/third_party/boringssl/third_party/fiat/internal.h +142 -0
  1210. data/third_party/cares/ares_build.h +223 -0
  1211. data/third_party/cares/cares/ares.h +658 -0
  1212. data/third_party/cares/cares/ares__close_sockets.c +61 -0
  1213. data/third_party/cares/cares/ares__get_hostent.c +261 -0
  1214. data/third_party/cares/cares/ares__read_line.c +73 -0
  1215. data/third_party/cares/cares/ares__timeval.c +111 -0
  1216. data/third_party/cares/cares/ares_cancel.c +63 -0
  1217. data/third_party/cares/cares/ares_create_query.c +202 -0
  1218. data/third_party/cares/cares/ares_data.c +221 -0
  1219. data/third_party/cares/cares/ares_data.h +72 -0
  1220. data/third_party/cares/cares/ares_destroy.c +108 -0
  1221. data/third_party/cares/cares/ares_dns.h +103 -0
  1222. data/third_party/cares/cares/ares_expand_name.c +209 -0
  1223. data/third_party/cares/cares/ares_expand_string.c +70 -0
  1224. data/third_party/cares/cares/ares_fds.c +59 -0
  1225. data/third_party/cares/cares/ares_free_hostent.c +41 -0
  1226. data/third_party/cares/cares/ares_free_string.c +25 -0
  1227. data/third_party/cares/cares/ares_getenv.c +30 -0
  1228. data/third_party/cares/cares/ares_getenv.h +26 -0
  1229. data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
  1230. data/third_party/cares/cares/ares_gethostbyname.c +518 -0
  1231. data/third_party/cares/cares/ares_getnameinfo.c +442 -0
  1232. data/third_party/cares/cares/ares_getopt.c +122 -0
  1233. data/third_party/cares/cares/ares_getopt.h +53 -0
  1234. data/third_party/cares/cares/ares_getsock.c +66 -0
  1235. data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
  1236. data/third_party/cares/cares/ares_init.c +2514 -0
  1237. data/third_party/cares/cares/ares_iphlpapi.h +221 -0
  1238. data/third_party/cares/cares/ares_ipv6.h +78 -0
  1239. data/third_party/cares/cares/ares_library_init.c +177 -0
  1240. data/third_party/cares/cares/ares_library_init.h +43 -0
  1241. data/third_party/cares/cares/ares_llist.c +63 -0
  1242. data/third_party/cares/cares/ares_llist.h +39 -0
  1243. data/third_party/cares/cares/ares_mkquery.c +24 -0
  1244. data/third_party/cares/cares/ares_nowarn.c +260 -0
  1245. data/third_party/cares/cares/ares_nowarn.h +61 -0
  1246. data/third_party/cares/cares/ares_options.c +402 -0
  1247. data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
  1248. data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
  1249. data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
  1250. data/third_party/cares/cares/ares_parse_naptr_reply.c +193 -0
  1251. data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
  1252. data/third_party/cares/cares/ares_parse_ptr_reply.c +219 -0
  1253. data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
  1254. data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
  1255. data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
  1256. data/third_party/cares/cares/ares_platform.c +11035 -0
  1257. data/third_party/cares/cares/ares_platform.h +43 -0
  1258. data/third_party/cares/cares/ares_private.h +374 -0
  1259. data/third_party/cares/cares/ares_process.c +1448 -0
  1260. data/third_party/cares/cares/ares_query.c +186 -0
  1261. data/third_party/cares/cares/ares_rules.h +125 -0
  1262. data/third_party/cares/cares/ares_search.c +316 -0
  1263. data/third_party/cares/cares/ares_send.c +131 -0
  1264. data/third_party/cares/cares/ares_setup.h +217 -0
  1265. data/third_party/cares/cares/ares_strcasecmp.c +66 -0
  1266. data/third_party/cares/cares/ares_strcasecmp.h +30 -0
  1267. data/third_party/cares/cares/ares_strdup.c +49 -0
  1268. data/third_party/cares/cares/ares_strdup.h +24 -0
  1269. data/third_party/cares/cares/ares_strerror.c +56 -0
  1270. data/third_party/cares/cares/ares_timeout.c +88 -0
  1271. data/third_party/cares/cares/ares_version.c +11 -0
  1272. data/third_party/cares/cares/ares_version.h +24 -0
  1273. data/third_party/cares/cares/ares_writev.c +79 -0
  1274. data/third_party/cares/cares/bitncmp.c +59 -0
  1275. data/third_party/cares/cares/bitncmp.h +26 -0
  1276. data/third_party/cares/cares/config-win32.h +351 -0
  1277. data/third_party/cares/cares/inet_net_pton.c +450 -0
  1278. data/third_party/cares/cares/inet_ntop.c +208 -0
  1279. data/third_party/cares/cares/setup_once.h +554 -0
  1280. data/third_party/cares/cares/windows_port.c +22 -0
  1281. data/third_party/cares/config_darwin/ares_config.h +425 -0
  1282. data/third_party/cares/config_freebsd/ares_config.h +502 -0
  1283. data/third_party/cares/config_linux/ares_config.h +458 -0
  1284. data/third_party/cares/config_openbsd/ares_config.h +502 -0
  1285. data/third_party/nanopb/pb.h +579 -0
  1286. data/third_party/nanopb/pb_common.c +97 -0
  1287. data/third_party/nanopb/pb_common.h +42 -0
  1288. data/third_party/nanopb/pb_decode.c +1347 -0
  1289. data/third_party/nanopb/pb_decode.h +149 -0
  1290. data/third_party/nanopb/pb_encode.c +696 -0
  1291. data/third_party/nanopb/pb_encode.h +154 -0
  1292. data/third_party/zlib/adler32.c +186 -0
  1293. data/third_party/zlib/compress.c +86 -0
  1294. data/third_party/zlib/crc32.c +442 -0
  1295. data/third_party/zlib/crc32.h +441 -0
  1296. data/third_party/zlib/deflate.c +2163 -0
  1297. data/third_party/zlib/deflate.h +349 -0
  1298. data/third_party/zlib/gzclose.c +25 -0
  1299. data/third_party/zlib/gzguts.h +218 -0
  1300. data/third_party/zlib/gzlib.c +637 -0
  1301. data/third_party/zlib/gzread.c +654 -0
  1302. data/third_party/zlib/gzwrite.c +665 -0
  1303. data/third_party/zlib/infback.c +640 -0
  1304. data/third_party/zlib/inffast.c +323 -0
  1305. data/third_party/zlib/inffast.h +11 -0
  1306. data/third_party/zlib/inffixed.h +94 -0
  1307. data/third_party/zlib/inflate.c +1561 -0
  1308. data/third_party/zlib/inflate.h +125 -0
  1309. data/third_party/zlib/inftrees.c +304 -0
  1310. data/third_party/zlib/inftrees.h +62 -0
  1311. data/third_party/zlib/trees.c +1203 -0
  1312. data/third_party/zlib/trees.h +128 -0
  1313. data/third_party/zlib/uncompr.c +93 -0
  1314. data/third_party/zlib/zconf.h +534 -0
  1315. data/third_party/zlib/zlib.h +1912 -0
  1316. data/third_party/zlib/zutil.c +325 -0
  1317. data/third_party/zlib/zutil.h +271 -0
  1318. metadata +1586 -0
@@ -0,0 +1,83 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_LIB_SURFACE_CHANNEL_H
20
+ #define GRPC_CORE_LIB_SURFACE_CHANNEL_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/channel/channel_stack.h"
25
+ #include "src/core/lib/channel/channel_stack_builder.h"
26
+ #include "src/core/lib/surface/channel_stack_type.h"
27
+
28
+ grpc_channel* grpc_channel_create(const char* target,
29
+ const grpc_channel_args* args,
30
+ grpc_channel_stack_type channel_stack_type,
31
+ grpc_transport* optional_transport);
32
+
33
+ grpc_channel* grpc_channel_create_with_builder(
34
+ grpc_channel_stack_builder* builder,
35
+ grpc_channel_stack_type channel_stack_type);
36
+
37
+ /** Create a call given a grpc_channel, in order to call \a method.
38
+ Progress is tied to activity on \a pollset_set. The returned call object is
39
+ meant to be used with \a grpc_call_start_batch_and_execute, which relies on
40
+ callbacks to signal completions. \a method and \a host need
41
+ only live through the invocation of this function. If \a parent_call is
42
+ non-NULL, it must be a server-side call. It will be used to propagate
43
+ properties from the server call to this new client call, depending on the
44
+ value of \a propagation_mask (see propagation_bits.h for possible values) */
45
+ grpc_call* grpc_channel_create_pollset_set_call(
46
+ grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask,
47
+ grpc_pollset_set* pollset_set, grpc_slice method, const grpc_slice* host,
48
+ grpc_millis deadline, void* reserved);
49
+
50
+ /** Get a (borrowed) pointer to this channels underlying channel stack */
51
+ grpc_channel_stack* grpc_channel_get_channel_stack(grpc_channel* channel);
52
+
53
+ /** Get a grpc_mdelem of grpc-status: X where X is the numeric value of
54
+ status_code.
55
+
56
+ The returned elem is owned by the caller. */
57
+ grpc_mdelem grpc_channel_get_reffed_status_elem(grpc_channel* channel,
58
+ int status_code);
59
+
60
+ size_t grpc_channel_get_call_size_estimate(grpc_channel* channel);
61
+ void grpc_channel_update_call_size_estimate(grpc_channel* channel, size_t size);
62
+
63
+ #ifndef NDEBUG
64
+ void grpc_channel_internal_ref(grpc_channel* channel, const char* reason);
65
+ void grpc_channel_internal_unref(grpc_channel* channel, const char* reason);
66
+ #define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
67
+ grpc_channel_internal_ref(channel, reason)
68
+ #define GRPC_CHANNEL_INTERNAL_UNREF(channel, reason) \
69
+ grpc_channel_internal_unref(channel, reason)
70
+ #else
71
+ void grpc_channel_internal_ref(grpc_channel* channel);
72
+ void grpc_channel_internal_unref(grpc_channel* channel);
73
+ #define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
74
+ grpc_channel_internal_ref(channel)
75
+ #define GRPC_CHANNEL_INTERNAL_UNREF(channel, reason) \
76
+ grpc_channel_internal_unref(channel)
77
+ #endif
78
+
79
+ /** Return the channel's compression options. */
80
+ grpc_compression_options grpc_channel_compression_options(
81
+ const grpc_channel* channel);
82
+
83
+ #endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_H */
@@ -0,0 +1,109 @@
1
+ /*
2
+ *
3
+ * Copyright 2016 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/surface/channel_init.h"
22
+
23
+ #include <grpc/support/alloc.h>
24
+
25
+ typedef struct stage_slot {
26
+ grpc_channel_init_stage fn;
27
+ void* arg;
28
+ int priority;
29
+ size_t insertion_order;
30
+ } stage_slot;
31
+
32
+ typedef struct stage_slots {
33
+ stage_slot* slots;
34
+ size_t num_slots;
35
+ size_t cap_slots;
36
+ } stage_slots;
37
+
38
+ static stage_slots g_slots[GRPC_NUM_CHANNEL_STACK_TYPES];
39
+ static bool g_finalized;
40
+
41
+ void grpc_channel_init_init(void) {
42
+ for (int i = 0; i < GRPC_NUM_CHANNEL_STACK_TYPES; i++) {
43
+ g_slots[i].slots = nullptr;
44
+ g_slots[i].num_slots = 0;
45
+ g_slots[i].cap_slots = 0;
46
+ }
47
+ g_finalized = false;
48
+ }
49
+
50
+ void grpc_channel_init_register_stage(grpc_channel_stack_type type,
51
+ int priority,
52
+ grpc_channel_init_stage stage,
53
+ void* stage_arg) {
54
+ GPR_ASSERT(!g_finalized);
55
+ if (g_slots[type].cap_slots == g_slots[type].num_slots) {
56
+ g_slots[type].cap_slots = GPR_MAX(8, 3 * g_slots[type].cap_slots / 2);
57
+ g_slots[type].slots = static_cast<stage_slot*>(
58
+ gpr_realloc(g_slots[type].slots,
59
+ g_slots[type].cap_slots * sizeof(*g_slots[type].slots)));
60
+ }
61
+ stage_slot* s = &g_slots[type].slots[g_slots[type].num_slots++];
62
+ s->insertion_order = g_slots[type].num_slots;
63
+ s->priority = priority;
64
+ s->fn = stage;
65
+ s->arg = stage_arg;
66
+ }
67
+
68
+ static int compare_slots(const void* a, const void* b) {
69
+ const stage_slot* sa = static_cast<const stage_slot*>(a);
70
+ const stage_slot* sb = static_cast<const stage_slot*>(b);
71
+
72
+ int c = GPR_ICMP(sa->priority, sb->priority);
73
+ if (c != 0) return c;
74
+ return GPR_ICMP(sa->insertion_order, sb->insertion_order);
75
+ }
76
+
77
+ void grpc_channel_init_finalize(void) {
78
+ GPR_ASSERT(!g_finalized);
79
+ for (int i = 0; i < GRPC_NUM_CHANNEL_STACK_TYPES; i++) {
80
+ qsort(g_slots[i].slots, g_slots[i].num_slots, sizeof(*g_slots[i].slots),
81
+ compare_slots);
82
+ }
83
+ g_finalized = true;
84
+ }
85
+
86
+ void grpc_channel_init_shutdown(void) {
87
+ for (int i = 0; i < GRPC_NUM_CHANNEL_STACK_TYPES; i++) {
88
+ gpr_free(g_slots[i].slots);
89
+ g_slots[i].slots =
90
+ static_cast<stage_slot*>((void*)static_cast<uintptr_t>(0xdeadbeef));
91
+ }
92
+ }
93
+
94
+ bool grpc_channel_init_create_stack(grpc_channel_stack_builder* builder,
95
+ grpc_channel_stack_type type) {
96
+ GPR_ASSERT(g_finalized);
97
+
98
+ grpc_channel_stack_builder_set_name(builder,
99
+ grpc_channel_stack_type_string(type));
100
+
101
+ for (size_t i = 0; i < g_slots[type].num_slots; i++) {
102
+ const stage_slot* slot = &g_slots[type].slots[i];
103
+ if (!slot->fn(builder, slot->arg)) {
104
+ return false;
105
+ }
106
+ }
107
+
108
+ return true;
109
+ }
@@ -0,0 +1,73 @@
1
+ /*
2
+ *
3
+ * Copyright 2016 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_LIB_SURFACE_CHANNEL_INIT_H
20
+ #define GRPC_CORE_LIB_SURFACE_CHANNEL_INIT_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/channel/channel_stack_builder.h"
25
+ #include "src/core/lib/surface/channel_stack_type.h"
26
+ #include "src/core/lib/transport/transport.h"
27
+
28
+ #define GRPC_CHANNEL_INIT_BUILTIN_PRIORITY 10000
29
+
30
+ /// This module provides a way for plugins (and the grpc core library itself)
31
+ /// to register mutators for channel stacks.
32
+ /// It also provides a universal entry path to run those mutators to build
33
+ /// a channel stack for various subsystems.
34
+
35
+ /// One stage of mutation: call functions against \a builder to influence the
36
+ /// finally constructed channel stack
37
+ typedef bool (*grpc_channel_init_stage)(grpc_channel_stack_builder* builder,
38
+ void* arg);
39
+
40
+ /// Global initialization of the system
41
+ void grpc_channel_init_init(void);
42
+
43
+ /// Register one stage of mutators.
44
+ /// Stages are run in priority order (lowest to highest), and then in
45
+ /// registration order (in the case of a tie).
46
+ /// Stages are registered against one of the pre-determined channel stack
47
+ /// types.
48
+ void grpc_channel_init_register_stage(grpc_channel_stack_type type,
49
+ int priority,
50
+ grpc_channel_init_stage stage_fn,
51
+ void* stage_arg);
52
+
53
+ /// Finalize registration. No more calls to grpc_channel_init_register_stage are
54
+ /// allowed.
55
+ void grpc_channel_init_finalize(void);
56
+ /// Shutdown the channel init system
57
+ void grpc_channel_init_shutdown(void);
58
+
59
+ /// Construct a channel stack of some sort: see channel_stack.h for details
60
+ /// \a type is the type of channel stack to create
61
+ /// \a prefix_bytes is the number of bytes before the channel stack to allocate
62
+ /// \a args are configuration arguments for the channel stack
63
+ /// \a initial_refs is the initial refcount to give the channel stack
64
+ /// \a destroy and \a destroy_arg specify how to destroy the channel stack
65
+ /// if destroy_arg is NULL, the returned value from this function will be
66
+ /// substituted
67
+ /// \a optional_transport is either NULL or a constructed transport object
68
+ /// Returns a pointer to the base of the memory allocated (the actual channel
69
+ /// stack object will be prefix_bytes past that pointer)
70
+ bool grpc_channel_init_create_stack(grpc_channel_stack_builder* builder,
71
+ grpc_channel_stack_type type);
72
+
73
+ #endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_INIT_H */
@@ -0,0 +1,65 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/surface/channel.h"
22
+
23
+ #include <string.h>
24
+
25
+ #include <grpc/support/alloc.h>
26
+ #include <grpc/support/log.h>
27
+
28
+ #include "src/core/lib/surface/api_trace.h"
29
+ #include "src/core/lib/surface/completion_queue.h"
30
+
31
+ typedef struct {
32
+ grpc_closure closure;
33
+ void* tag;
34
+ grpc_completion_queue* cq;
35
+ grpc_cq_completion completion_storage;
36
+ } ping_result;
37
+
38
+ static void ping_destroy(void* arg, grpc_cq_completion* storage) {
39
+ gpr_free(arg);
40
+ }
41
+
42
+ static void ping_done(void* arg, grpc_error* error) {
43
+ ping_result* pr = static_cast<ping_result*>(arg);
44
+ grpc_cq_end_op(pr->cq, pr->tag, GRPC_ERROR_REF(error), ping_destroy, pr,
45
+ &pr->completion_storage);
46
+ }
47
+
48
+ void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq,
49
+ void* tag, void* reserved) {
50
+ GRPC_API_TRACE("grpc_channel_ping(channel=%p, cq=%p, tag=%p, reserved=%p)", 4,
51
+ (channel, cq, tag, reserved));
52
+ grpc_transport_op* op = grpc_make_transport_op(nullptr);
53
+ ping_result* pr = static_cast<ping_result*>(gpr_malloc(sizeof(*pr)));
54
+ grpc_channel_element* top_elem =
55
+ grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
56
+ grpc_core::ExecCtx exec_ctx;
57
+ GPR_ASSERT(reserved == nullptr);
58
+ pr->tag = tag;
59
+ pr->cq = cq;
60
+ GRPC_CLOSURE_INIT(&pr->closure, ping_done, pr, grpc_schedule_on_exec_ctx);
61
+ op->send_ping.on_ack = &pr->closure;
62
+ op->bind_pollset = grpc_cq_pollset(cq);
63
+ GPR_ASSERT(grpc_cq_begin_op(cq, tag));
64
+ top_elem->filter->start_transport_op(top_elem, op);
65
+ }
@@ -0,0 +1,58 @@
1
+ /*
2
+ *
3
+ * Copyright 2016 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include <grpc/support/log.h>
22
+ #include "src/core/lib/surface/channel_stack_type.h"
23
+
24
+ bool grpc_channel_stack_type_is_client(grpc_channel_stack_type type) {
25
+ switch (type) {
26
+ case GRPC_CLIENT_CHANNEL:
27
+ return true;
28
+ case GRPC_CLIENT_SUBCHANNEL:
29
+ return true;
30
+ case GRPC_CLIENT_LAME_CHANNEL:
31
+ return true;
32
+ case GRPC_CLIENT_DIRECT_CHANNEL:
33
+ return true;
34
+ case GRPC_SERVER_CHANNEL:
35
+ return false;
36
+ case GRPC_NUM_CHANNEL_STACK_TYPES:
37
+ break;
38
+ }
39
+ GPR_UNREACHABLE_CODE(return true;);
40
+ }
41
+
42
+ const char* grpc_channel_stack_type_string(grpc_channel_stack_type type) {
43
+ switch (type) {
44
+ case GRPC_CLIENT_CHANNEL:
45
+ return "CLIENT_CHANNEL";
46
+ case GRPC_CLIENT_SUBCHANNEL:
47
+ return "CLIENT_SUBCHANNEL";
48
+ case GRPC_SERVER_CHANNEL:
49
+ return "SERVER_CHANNEL";
50
+ case GRPC_CLIENT_LAME_CHANNEL:
51
+ return "CLIENT_LAME_CHANNEL";
52
+ case GRPC_CLIENT_DIRECT_CHANNEL:
53
+ return "CLIENT_DIRECT_CHANNEL";
54
+ case GRPC_NUM_CHANNEL_STACK_TYPES:
55
+ break;
56
+ }
57
+ GPR_UNREACHABLE_CODE(return "UNKNOWN");
58
+ }
@@ -0,0 +1,47 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_LIB_SURFACE_CHANNEL_STACK_TYPE_H
20
+ #define GRPC_CORE_LIB_SURFACE_CHANNEL_STACK_TYPE_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <stdbool.h>
25
+
26
+ typedef enum {
27
+ // normal top-half client channel with load-balancing, connection management
28
+ GRPC_CLIENT_CHANNEL,
29
+ // bottom-half of a client channel: everything that happens post-load
30
+ // balancing (bound to a specific transport)
31
+ GRPC_CLIENT_SUBCHANNEL,
32
+ // a permanently broken client channel
33
+ GRPC_CLIENT_LAME_CHANNEL,
34
+ // a directly connected client channel (without load-balancing, directly talks
35
+ // to a transport)
36
+ GRPC_CLIENT_DIRECT_CHANNEL,
37
+ // server side channel
38
+ GRPC_SERVER_CHANNEL,
39
+ // must be last
40
+ GRPC_NUM_CHANNEL_STACK_TYPES
41
+ } grpc_channel_stack_type;
42
+
43
+ bool grpc_channel_stack_type_is_client(grpc_channel_stack_type type);
44
+
45
+ const char* grpc_channel_stack_type_string(grpc_channel_stack_type type);
46
+
47
+ #endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_STACK_TYPE_H */
@@ -0,0 +1,1262 @@
1
+ /*
2
+ *
3
+ * Copyright 2015-2016 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include "src/core/lib/surface/completion_queue.h"
21
+
22
+ #include <inttypes.h>
23
+ #include <stdio.h>
24
+ #include <string.h>
25
+
26
+ #include <grpc/support/alloc.h>
27
+ #include <grpc/support/atm.h>
28
+ #include <grpc/support/log.h>
29
+ #include <grpc/support/string_util.h>
30
+ #include <grpc/support/time.h>
31
+
32
+ #include "src/core/lib/debug/stats.h"
33
+ #include "src/core/lib/gpr/spinlock.h"
34
+ #include "src/core/lib/gpr/string.h"
35
+ #include "src/core/lib/gpr/tls.h"
36
+ #include "src/core/lib/iomgr/pollset.h"
37
+ #include "src/core/lib/iomgr/timer.h"
38
+ #include "src/core/lib/profiling/timers.h"
39
+ #include "src/core/lib/surface/api_trace.h"
40
+ #include "src/core/lib/surface/call.h"
41
+ #include "src/core/lib/surface/event_string.h"
42
+
43
+ grpc_core::TraceFlag grpc_trace_operation_failures(false, "op_failure");
44
+ grpc_core::DebugOnlyTraceFlag grpc_trace_pending_tags(false, "pending_tags");
45
+ grpc_core::DebugOnlyTraceFlag grpc_trace_cq_refcount(false, "cq_refcount");
46
+
47
+ // Specifies a cq thread local cache.
48
+ // The first event that occurs on a thread
49
+ // with a cq cache will go into that cache, and
50
+ // will only be returned on the thread that initialized the cache.
51
+ // NOTE: Only one event will ever be cached.
52
+ GPR_TLS_DECL(g_cached_event);
53
+ GPR_TLS_DECL(g_cached_cq);
54
+
55
+ typedef struct {
56
+ grpc_pollset_worker** worker;
57
+ void* tag;
58
+ } plucker;
59
+
60
+ typedef struct {
61
+ bool can_get_pollset;
62
+ bool can_listen;
63
+ size_t (*size)(void);
64
+ void (*init)(grpc_pollset* pollset, gpr_mu** mu);
65
+ grpc_error* (*kick)(grpc_pollset* pollset,
66
+ grpc_pollset_worker* specific_worker);
67
+ grpc_error* (*work)(grpc_pollset* pollset, grpc_pollset_worker** worker,
68
+ grpc_millis deadline);
69
+ void (*shutdown)(grpc_pollset* pollset, grpc_closure* closure);
70
+ void (*destroy)(grpc_pollset* pollset);
71
+ } cq_poller_vtable;
72
+
73
+ typedef struct non_polling_worker {
74
+ gpr_cv cv;
75
+ bool kicked;
76
+ struct non_polling_worker* next;
77
+ struct non_polling_worker* prev;
78
+ } non_polling_worker;
79
+
80
+ typedef struct {
81
+ gpr_mu mu;
82
+ non_polling_worker* root;
83
+ grpc_closure* shutdown;
84
+ } non_polling_poller;
85
+
86
+ static size_t non_polling_poller_size(void) {
87
+ return sizeof(non_polling_poller);
88
+ }
89
+
90
+ static void non_polling_poller_init(grpc_pollset* pollset, gpr_mu** mu) {
91
+ non_polling_poller* npp = reinterpret_cast<non_polling_poller*>(pollset);
92
+ gpr_mu_init(&npp->mu);
93
+ *mu = &npp->mu;
94
+ }
95
+
96
+ static void non_polling_poller_destroy(grpc_pollset* pollset) {
97
+ non_polling_poller* npp = reinterpret_cast<non_polling_poller*>(pollset);
98
+ gpr_mu_destroy(&npp->mu);
99
+ }
100
+
101
+ static grpc_error* non_polling_poller_work(grpc_pollset* pollset,
102
+ grpc_pollset_worker** worker,
103
+ grpc_millis deadline) {
104
+ non_polling_poller* npp = reinterpret_cast<non_polling_poller*>(pollset);
105
+ if (npp->shutdown) return GRPC_ERROR_NONE;
106
+ non_polling_worker w;
107
+ gpr_cv_init(&w.cv);
108
+ if (worker != nullptr) *worker = reinterpret_cast<grpc_pollset_worker*>(&w);
109
+ if (npp->root == nullptr) {
110
+ npp->root = w.next = w.prev = &w;
111
+ } else {
112
+ w.next = npp->root;
113
+ w.prev = w.next->prev;
114
+ w.next->prev = w.prev->next = &w;
115
+ }
116
+ w.kicked = false;
117
+ gpr_timespec deadline_ts =
118
+ grpc_millis_to_timespec(deadline, GPR_CLOCK_MONOTONIC);
119
+ while (!npp->shutdown && !w.kicked &&
120
+ !gpr_cv_wait(&w.cv, &npp->mu, deadline_ts))
121
+ ;
122
+ grpc_core::ExecCtx::Get()->InvalidateNow();
123
+ if (&w == npp->root) {
124
+ npp->root = w.next;
125
+ if (&w == npp->root) {
126
+ if (npp->shutdown) {
127
+ GRPC_CLOSURE_SCHED(npp->shutdown, GRPC_ERROR_NONE);
128
+ }
129
+ npp->root = nullptr;
130
+ }
131
+ }
132
+ w.next->prev = w.prev;
133
+ w.prev->next = w.next;
134
+ gpr_cv_destroy(&w.cv);
135
+ if (worker != nullptr) *worker = nullptr;
136
+ return GRPC_ERROR_NONE;
137
+ }
138
+
139
+ static grpc_error* non_polling_poller_kick(
140
+ grpc_pollset* pollset, grpc_pollset_worker* specific_worker) {
141
+ non_polling_poller* p = reinterpret_cast<non_polling_poller*>(pollset);
142
+ if (specific_worker == nullptr)
143
+ specific_worker = reinterpret_cast<grpc_pollset_worker*>(p->root);
144
+ if (specific_worker != nullptr) {
145
+ non_polling_worker* w =
146
+ reinterpret_cast<non_polling_worker*>(specific_worker);
147
+ if (!w->kicked) {
148
+ w->kicked = true;
149
+ gpr_cv_signal(&w->cv);
150
+ }
151
+ }
152
+ return GRPC_ERROR_NONE;
153
+ }
154
+
155
+ static void non_polling_poller_shutdown(grpc_pollset* pollset,
156
+ grpc_closure* closure) {
157
+ non_polling_poller* p = reinterpret_cast<non_polling_poller*>(pollset);
158
+ GPR_ASSERT(closure != nullptr);
159
+ p->shutdown = closure;
160
+ if (p->root == nullptr) {
161
+ GRPC_CLOSURE_SCHED(closure, GRPC_ERROR_NONE);
162
+ } else {
163
+ non_polling_worker* w = p->root;
164
+ do {
165
+ gpr_cv_signal(&w->cv);
166
+ w = w->next;
167
+ } while (w != p->root);
168
+ }
169
+ }
170
+
171
+ static const cq_poller_vtable g_poller_vtable_by_poller_type[] = {
172
+ /* GRPC_CQ_DEFAULT_POLLING */
173
+ {true, true, grpc_pollset_size, grpc_pollset_init, grpc_pollset_kick,
174
+ grpc_pollset_work, grpc_pollset_shutdown, grpc_pollset_destroy},
175
+ /* GRPC_CQ_NON_LISTENING */
176
+ {true, false, grpc_pollset_size, grpc_pollset_init, grpc_pollset_kick,
177
+ grpc_pollset_work, grpc_pollset_shutdown, grpc_pollset_destroy},
178
+ /* GRPC_CQ_NON_POLLING */
179
+ {false, false, non_polling_poller_size, non_polling_poller_init,
180
+ non_polling_poller_kick, non_polling_poller_work,
181
+ non_polling_poller_shutdown, non_polling_poller_destroy},
182
+ };
183
+
184
+ typedef struct cq_vtable {
185
+ grpc_cq_completion_type cq_completion_type;
186
+ size_t data_size;
187
+ void (*init)(void* data);
188
+ void (*shutdown)(grpc_completion_queue* cq);
189
+ void (*destroy)(void* data);
190
+ bool (*begin_op)(grpc_completion_queue* cq, void* tag);
191
+ void (*end_op)(grpc_completion_queue* cq, void* tag, grpc_error* error,
192
+ void (*done)(void* done_arg, grpc_cq_completion* storage),
193
+ void* done_arg, grpc_cq_completion* storage);
194
+ grpc_event (*next)(grpc_completion_queue* cq, gpr_timespec deadline,
195
+ void* reserved);
196
+ grpc_event (*pluck)(grpc_completion_queue* cq, void* tag,
197
+ gpr_timespec deadline, void* reserved);
198
+ } cq_vtable;
199
+
200
+ /* Queue that holds the cq_completion_events. Internally uses gpr_mpscq queue
201
+ * (a lockfree multiproducer single consumer queue). It uses a queue_lock
202
+ * to support multiple consumers.
203
+ * Only used in completion queues whose completion_type is GRPC_CQ_NEXT */
204
+ typedef struct grpc_cq_event_queue {
205
+ /* Spinlock to serialize consumers i.e pop() operations */
206
+ gpr_spinlock queue_lock;
207
+
208
+ gpr_mpscq queue;
209
+
210
+ /* A lazy counter of number of items in the queue. This is NOT atomically
211
+ incremented/decremented along with push/pop operations and hence is only
212
+ eventually consistent */
213
+ gpr_atm num_queue_items;
214
+ } grpc_cq_event_queue;
215
+
216
+ typedef struct cq_next_data {
217
+ /** Completed events for completion-queues of type GRPC_CQ_NEXT */
218
+ grpc_cq_event_queue queue;
219
+
220
+ /** Counter of how many things have ever been queued on this completion queue
221
+ useful for avoiding locks to check the queue */
222
+ gpr_atm things_queued_ever;
223
+
224
+ /* Number of outstanding events (+1 if not shut down) */
225
+ gpr_atm pending_events;
226
+
227
+ /** 0 initially. 1 once we initiated shutdown */
228
+ bool shutdown_called;
229
+ } cq_next_data;
230
+
231
+ typedef struct cq_pluck_data {
232
+ /** Completed events for completion-queues of type GRPC_CQ_PLUCK */
233
+ grpc_cq_completion completed_head;
234
+ grpc_cq_completion* completed_tail;
235
+
236
+ /** Number of pending events (+1 if we're not shutdown) */
237
+ gpr_atm pending_events;
238
+
239
+ /** Counter of how many things have ever been queued on this completion queue
240
+ useful for avoiding locks to check the queue */
241
+ gpr_atm things_queued_ever;
242
+
243
+ /** 0 initially. 1 once we completed shutting */
244
+ /* TODO: (sreek) This is not needed since (shutdown == 1) if and only if
245
+ * (pending_events == 0). So consider removing this in future and use
246
+ * pending_events */
247
+ gpr_atm shutdown;
248
+
249
+ /** 0 initially. 1 once we initiated shutdown */
250
+ bool shutdown_called;
251
+
252
+ int num_pluckers;
253
+ plucker pluckers[GRPC_MAX_COMPLETION_QUEUE_PLUCKERS];
254
+ } cq_pluck_data;
255
+
256
+ /* Completion queue structure */
257
+ struct grpc_completion_queue {
258
+ /** Once owning_refs drops to zero, we will destroy the cq */
259
+ gpr_refcount owning_refs;
260
+
261
+ gpr_mu* mu;
262
+
263
+ const cq_vtable* vtable;
264
+ const cq_poller_vtable* poller_vtable;
265
+
266
+ #ifndef NDEBUG
267
+ void** outstanding_tags;
268
+ size_t outstanding_tag_count;
269
+ size_t outstanding_tag_capacity;
270
+ #endif
271
+
272
+ grpc_closure pollset_shutdown_done;
273
+ int num_polls;
274
+ };
275
+
276
+ /* Forward declarations */
277
+ static void cq_finish_shutdown_next(grpc_completion_queue* cq);
278
+ static void cq_finish_shutdown_pluck(grpc_completion_queue* cq);
279
+ static void cq_shutdown_next(grpc_completion_queue* cq);
280
+ static void cq_shutdown_pluck(grpc_completion_queue* cq);
281
+
282
+ static bool cq_begin_op_for_next(grpc_completion_queue* cq, void* tag);
283
+ static bool cq_begin_op_for_pluck(grpc_completion_queue* cq, void* tag);
284
+
285
+ static void cq_end_op_for_next(grpc_completion_queue* cq, void* tag,
286
+ grpc_error* error,
287
+ void (*done)(void* done_arg,
288
+ grpc_cq_completion* storage),
289
+ void* done_arg, grpc_cq_completion* storage);
290
+
291
+ static void cq_end_op_for_pluck(grpc_completion_queue* cq, void* tag,
292
+ grpc_error* error,
293
+ void (*done)(void* done_arg,
294
+ grpc_cq_completion* storage),
295
+ void* done_arg, grpc_cq_completion* storage);
296
+
297
+ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
298
+ void* reserved);
299
+
300
+ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
301
+ gpr_timespec deadline, void* reserved);
302
+
303
+ static void cq_init_next(void* data);
304
+ static void cq_init_pluck(void* data);
305
+ static void cq_destroy_next(void* data);
306
+ static void cq_destroy_pluck(void* data);
307
+
308
+ /* Completion queue vtables based on the completion-type */
309
+ static const cq_vtable g_cq_vtable[] = {
310
+ /* GRPC_CQ_NEXT */
311
+ {GRPC_CQ_NEXT, sizeof(cq_next_data), cq_init_next, cq_shutdown_next,
312
+ cq_destroy_next, cq_begin_op_for_next, cq_end_op_for_next, cq_next,
313
+ nullptr},
314
+ /* GRPC_CQ_PLUCK */
315
+ {GRPC_CQ_PLUCK, sizeof(cq_pluck_data), cq_init_pluck, cq_shutdown_pluck,
316
+ cq_destroy_pluck, cq_begin_op_for_pluck, cq_end_op_for_pluck, nullptr,
317
+ cq_pluck},
318
+ };
319
+
320
+ #define DATA_FROM_CQ(cq) ((void*)(cq + 1))
321
+ #define POLLSET_FROM_CQ(cq) \
322
+ ((grpc_pollset*)(cq->vtable->data_size + (char*)DATA_FROM_CQ(cq)))
323
+
324
+ grpc_core::TraceFlag grpc_cq_pluck_trace(true, "queue_pluck");
325
+ grpc_core::TraceFlag grpc_cq_event_timeout_trace(true, "queue_timeout");
326
+
327
+ #define GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, event) \
328
+ if (grpc_api_trace.enabled() && (grpc_cq_pluck_trace.enabled() || \
329
+ (event)->type != GRPC_QUEUE_TIMEOUT)) { \
330
+ char* _ev = grpc_event_string(event); \
331
+ gpr_log(GPR_INFO, "RETURN_EVENT[%p]: %s", cq, _ev); \
332
+ gpr_free(_ev); \
333
+ }
334
+
335
+ static void on_pollset_shutdown_done(void* cq, grpc_error* error);
336
+
337
+ void grpc_cq_global_init() {
338
+ gpr_tls_init(&g_cached_event);
339
+ gpr_tls_init(&g_cached_cq);
340
+ }
341
+
342
+ void grpc_completion_queue_thread_local_cache_init(grpc_completion_queue* cq) {
343
+ if ((grpc_completion_queue*)gpr_tls_get(&g_cached_cq) == nullptr) {
344
+ gpr_tls_set(&g_cached_event, (intptr_t)0);
345
+ gpr_tls_set(&g_cached_cq, (intptr_t)cq);
346
+ }
347
+ }
348
+
349
+ int grpc_completion_queue_thread_local_cache_flush(grpc_completion_queue* cq,
350
+ void** tag, int* ok) {
351
+ grpc_cq_completion* storage =
352
+ (grpc_cq_completion*)gpr_tls_get(&g_cached_event);
353
+ int ret = 0;
354
+ if (storage != nullptr &&
355
+ (grpc_completion_queue*)gpr_tls_get(&g_cached_cq) == cq) {
356
+ *tag = storage->tag;
357
+ grpc_core::ExecCtx exec_ctx;
358
+ *ok = (storage->next & static_cast<uintptr_t>(1)) == 1;
359
+ storage->done(storage->done_arg, storage);
360
+ ret = 1;
361
+ cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
362
+ if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
363
+ GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
364
+ gpr_mu_lock(cq->mu);
365
+ cq_finish_shutdown_next(cq);
366
+ gpr_mu_unlock(cq->mu);
367
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
368
+ }
369
+ }
370
+ gpr_tls_set(&g_cached_event, (intptr_t)0);
371
+ gpr_tls_set(&g_cached_cq, (intptr_t)0);
372
+
373
+ return ret;
374
+ }
375
+
376
+ static void cq_event_queue_init(grpc_cq_event_queue* q) {
377
+ gpr_mpscq_init(&q->queue);
378
+ q->queue_lock = GPR_SPINLOCK_INITIALIZER;
379
+ gpr_atm_no_barrier_store(&q->num_queue_items, 0);
380
+ }
381
+
382
+ static void cq_event_queue_destroy(grpc_cq_event_queue* q) {
383
+ gpr_mpscq_destroy(&q->queue);
384
+ }
385
+
386
+ static bool cq_event_queue_push(grpc_cq_event_queue* q, grpc_cq_completion* c) {
387
+ gpr_mpscq_push(&q->queue, reinterpret_cast<gpr_mpscq_node*>(c));
388
+ return gpr_atm_no_barrier_fetch_add(&q->num_queue_items, 1) == 0;
389
+ }
390
+
391
+ static grpc_cq_completion* cq_event_queue_pop(grpc_cq_event_queue* q) {
392
+ grpc_cq_completion* c = nullptr;
393
+ grpc_core::ExecCtx exec_ctx;
394
+
395
+ if (gpr_spinlock_trylock(&q->queue_lock)) {
396
+ GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_SUCCESSES();
397
+
398
+ bool is_empty = false;
399
+ c = reinterpret_cast<grpc_cq_completion*>(
400
+ gpr_mpscq_pop_and_check_end(&q->queue, &is_empty));
401
+ gpr_spinlock_unlock(&q->queue_lock);
402
+
403
+ if (c == nullptr && !is_empty) {
404
+ GRPC_STATS_INC_CQ_EV_QUEUE_TRANSIENT_POP_FAILURES();
405
+ }
406
+ } else {
407
+ GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_FAILURES();
408
+ }
409
+
410
+ if (c) {
411
+ gpr_atm_no_barrier_fetch_add(&q->num_queue_items, -1);
412
+ }
413
+
414
+ return c;
415
+ }
416
+
417
+ /* Note: The counter is not incremented/decremented atomically with push/pop.
418
+ * The count is only eventually consistent */
419
+ static long cq_event_queue_num_items(grpc_cq_event_queue* q) {
420
+ return static_cast<long>(gpr_atm_no_barrier_load(&q->num_queue_items));
421
+ }
422
+
423
+ grpc_completion_queue* grpc_completion_queue_create_internal(
424
+ grpc_cq_completion_type completion_type,
425
+ grpc_cq_polling_type polling_type) {
426
+ GPR_TIMER_SCOPE("grpc_completion_queue_create_internal", 0);
427
+
428
+ grpc_completion_queue* cq;
429
+
430
+ GRPC_API_TRACE(
431
+ "grpc_completion_queue_create_internal(completion_type=%d, "
432
+ "polling_type=%d)",
433
+ 2, (completion_type, polling_type));
434
+
435
+ const cq_vtable* vtable = &g_cq_vtable[completion_type];
436
+ const cq_poller_vtable* poller_vtable =
437
+ &g_poller_vtable_by_poller_type[polling_type];
438
+
439
+ grpc_core::ExecCtx exec_ctx;
440
+ GRPC_STATS_INC_CQS_CREATED();
441
+
442
+ cq = static_cast<grpc_completion_queue*>(
443
+ gpr_zalloc(sizeof(grpc_completion_queue) + vtable->data_size +
444
+ poller_vtable->size()));
445
+
446
+ cq->vtable = vtable;
447
+ cq->poller_vtable = poller_vtable;
448
+
449
+ /* One for destroy(), one for pollset_shutdown */
450
+ gpr_ref_init(&cq->owning_refs, 2);
451
+
452
+ poller_vtable->init(POLLSET_FROM_CQ(cq), &cq->mu);
453
+ vtable->init(DATA_FROM_CQ(cq));
454
+
455
+ GRPC_CLOSURE_INIT(&cq->pollset_shutdown_done, on_pollset_shutdown_done, cq,
456
+ grpc_schedule_on_exec_ctx);
457
+ return cq;
458
+ }
459
+
460
+ static void cq_init_next(void* ptr) {
461
+ cq_next_data* cqd = static_cast<cq_next_data*>(ptr);
462
+ /* Initial count is dropped by grpc_completion_queue_shutdown */
463
+ gpr_atm_no_barrier_store(&cqd->pending_events, 1);
464
+ cqd->shutdown_called = false;
465
+ gpr_atm_no_barrier_store(&cqd->things_queued_ever, 0);
466
+ cq_event_queue_init(&cqd->queue);
467
+ }
468
+
469
+ static void cq_destroy_next(void* ptr) {
470
+ cq_next_data* cqd = static_cast<cq_next_data*>(ptr);
471
+ GPR_ASSERT(cq_event_queue_num_items(&cqd->queue) == 0);
472
+ cq_event_queue_destroy(&cqd->queue);
473
+ }
474
+
475
+ static void cq_init_pluck(void* ptr) {
476
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*>(ptr);
477
+ /* Initial count is dropped by grpc_completion_queue_shutdown */
478
+ gpr_atm_no_barrier_store(&cqd->pending_events, 1);
479
+ cqd->completed_tail = &cqd->completed_head;
480
+ cqd->completed_head.next = (uintptr_t)cqd->completed_tail;
481
+ gpr_atm_no_barrier_store(&cqd->shutdown, 0);
482
+ cqd->shutdown_called = false;
483
+ cqd->num_pluckers = 0;
484
+ gpr_atm_no_barrier_store(&cqd->things_queued_ever, 0);
485
+ }
486
+
487
+ static void cq_destroy_pluck(void* ptr) {
488
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*>(ptr);
489
+ GPR_ASSERT(cqd->completed_head.next == (uintptr_t)&cqd->completed_head);
490
+ }
491
+
492
+ grpc_cq_completion_type grpc_get_cq_completion_type(grpc_completion_queue* cq) {
493
+ return cq->vtable->cq_completion_type;
494
+ }
495
+
496
+ int grpc_get_cq_poll_num(grpc_completion_queue* cq) {
497
+ int cur_num_polls;
498
+ gpr_mu_lock(cq->mu);
499
+ cur_num_polls = cq->num_polls;
500
+ gpr_mu_unlock(cq->mu);
501
+ return cur_num_polls;
502
+ }
503
+
504
+ #ifndef NDEBUG
505
+ void grpc_cq_internal_ref(grpc_completion_queue* cq, const char* reason,
506
+ const char* file, int line) {
507
+ if (grpc_trace_cq_refcount.enabled()) {
508
+ gpr_atm val = gpr_atm_no_barrier_load(&cq->owning_refs.count);
509
+ gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
510
+ "CQ:%p ref %" PRIdPTR " -> %" PRIdPTR " %s", cq, val, val + 1,
511
+ reason);
512
+ }
513
+ #else
514
+ void grpc_cq_internal_ref(grpc_completion_queue* cq) {
515
+ #endif
516
+ gpr_ref(&cq->owning_refs);
517
+ }
518
+
519
+ static void on_pollset_shutdown_done(void* arg, grpc_error* error) {
520
+ grpc_completion_queue* cq = static_cast<grpc_completion_queue*>(arg);
521
+ GRPC_CQ_INTERNAL_UNREF(cq, "pollset_destroy");
522
+ }
523
+
524
+ #ifndef NDEBUG
525
+ void grpc_cq_internal_unref(grpc_completion_queue* cq, const char* reason,
526
+ const char* file, int line) {
527
+ if (grpc_trace_cq_refcount.enabled()) {
528
+ gpr_atm val = gpr_atm_no_barrier_load(&cq->owning_refs.count);
529
+ gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
530
+ "CQ:%p unref %" PRIdPTR " -> %" PRIdPTR " %s", cq, val, val - 1,
531
+ reason);
532
+ }
533
+ #else
534
+ void grpc_cq_internal_unref(grpc_completion_queue* cq) {
535
+ #endif
536
+ if (gpr_unref(&cq->owning_refs)) {
537
+ cq->vtable->destroy(DATA_FROM_CQ(cq));
538
+ cq->poller_vtable->destroy(POLLSET_FROM_CQ(cq));
539
+ #ifndef NDEBUG
540
+ gpr_free(cq->outstanding_tags);
541
+ #endif
542
+ gpr_free(cq);
543
+ }
544
+ }
545
+
546
+ #ifndef NDEBUG
547
+ static void cq_check_tag(grpc_completion_queue* cq, void* tag, bool lock_cq) {
548
+ int found = 0;
549
+ if (lock_cq) {
550
+ gpr_mu_lock(cq->mu);
551
+ }
552
+
553
+ for (int i = 0; i < static_cast<int>(cq->outstanding_tag_count); i++) {
554
+ if (cq->outstanding_tags[i] == tag) {
555
+ cq->outstanding_tag_count--;
556
+ GPR_SWAP(void*, cq->outstanding_tags[i],
557
+ cq->outstanding_tags[cq->outstanding_tag_count]);
558
+ found = 1;
559
+ break;
560
+ }
561
+ }
562
+
563
+ if (lock_cq) {
564
+ gpr_mu_unlock(cq->mu);
565
+ }
566
+
567
+ GPR_ASSERT(found);
568
+ }
569
+ #else
570
+ static void cq_check_tag(grpc_completion_queue* cq, void* tag, bool lock_cq) {}
571
+ #endif
572
+
573
+ /* Atomically increments a counter only if the counter is not zero. Returns
574
+ * true if the increment was successful; false if the counter is zero */
575
+ static bool atm_inc_if_nonzero(gpr_atm* counter) {
576
+ while (true) {
577
+ gpr_atm count = gpr_atm_acq_load(counter);
578
+ /* If zero, we are done. If not, we must to a CAS (instead of an atomic
579
+ * increment) to maintain the contract: do not increment the counter if it
580
+ * is zero. */
581
+ if (count == 0) {
582
+ return false;
583
+ } else if (gpr_atm_full_cas(counter, count, count + 1)) {
584
+ break;
585
+ }
586
+ }
587
+
588
+ return true;
589
+ }
590
+
591
+ static bool cq_begin_op_for_next(grpc_completion_queue* cq, void* tag) {
592
+ cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
593
+ return atm_inc_if_nonzero(&cqd->pending_events);
594
+ }
595
+
596
+ static bool cq_begin_op_for_pluck(grpc_completion_queue* cq, void* tag) {
597
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*> DATA_FROM_CQ(cq);
598
+ return atm_inc_if_nonzero(&cqd->pending_events);
599
+ }
600
+
601
+ bool grpc_cq_begin_op(grpc_completion_queue* cq, void* tag) {
602
+ #ifndef NDEBUG
603
+ gpr_mu_lock(cq->mu);
604
+ if (cq->outstanding_tag_count == cq->outstanding_tag_capacity) {
605
+ cq->outstanding_tag_capacity = GPR_MAX(4, 2 * cq->outstanding_tag_capacity);
606
+ cq->outstanding_tags = static_cast<void**>(gpr_realloc(
607
+ cq->outstanding_tags,
608
+ sizeof(*cq->outstanding_tags) * cq->outstanding_tag_capacity));
609
+ }
610
+ cq->outstanding_tags[cq->outstanding_tag_count++] = tag;
611
+ gpr_mu_unlock(cq->mu);
612
+ #endif
613
+ return cq->vtable->begin_op(cq, tag);
614
+ }
615
+
616
+ /* Queue a GRPC_OP_COMPLETED operation to a completion queue (with a
617
+ * completion
618
+ * type of GRPC_CQ_NEXT) */
619
+ static void cq_end_op_for_next(grpc_completion_queue* cq, void* tag,
620
+ grpc_error* error,
621
+ void (*done)(void* done_arg,
622
+ grpc_cq_completion* storage),
623
+ void* done_arg, grpc_cq_completion* storage) {
624
+ GPR_TIMER_SCOPE("cq_end_op_for_next", 0);
625
+
626
+ if (grpc_api_trace.enabled() ||
627
+ (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE)) {
628
+ const char* errmsg = grpc_error_string(error);
629
+ GRPC_API_TRACE(
630
+ "cq_end_op_for_next(cq=%p, tag=%p, error=%s, "
631
+ "done=%p, done_arg=%p, storage=%p)",
632
+ 6, (cq, tag, errmsg, done, done_arg, storage));
633
+ if (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE) {
634
+ gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
635
+ }
636
+ }
637
+ cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
638
+ int is_success = (error == GRPC_ERROR_NONE);
639
+
640
+ storage->tag = tag;
641
+ storage->done = done;
642
+ storage->done_arg = done_arg;
643
+ storage->next = static_cast<uintptr_t>(is_success);
644
+
645
+ cq_check_tag(cq, tag, true); /* Used in debug builds only */
646
+
647
+ if ((grpc_completion_queue*)gpr_tls_get(&g_cached_cq) == cq &&
648
+ (grpc_cq_completion*)gpr_tls_get(&g_cached_event) == nullptr) {
649
+ gpr_tls_set(&g_cached_event, (intptr_t)storage);
650
+ } else {
651
+ /* Add the completion to the queue */
652
+ bool is_first = cq_event_queue_push(&cqd->queue, storage);
653
+ gpr_atm_no_barrier_fetch_add(&cqd->things_queued_ever, 1);
654
+
655
+ /* Since we do not hold the cq lock here, it is important to do an 'acquire'
656
+ load here (instead of a 'no_barrier' load) to match with the release
657
+ store
658
+ (done via gpr_atm_full_fetch_add(pending_events, -1)) in cq_shutdown_next
659
+ */
660
+ bool will_definitely_shutdown = gpr_atm_acq_load(&cqd->pending_events) == 1;
661
+
662
+ if (!will_definitely_shutdown) {
663
+ /* Only kick if this is the first item queued */
664
+ if (is_first) {
665
+ gpr_mu_lock(cq->mu);
666
+ grpc_error* kick_error =
667
+ cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), nullptr);
668
+ gpr_mu_unlock(cq->mu);
669
+
670
+ if (kick_error != GRPC_ERROR_NONE) {
671
+ const char* msg = grpc_error_string(kick_error);
672
+ gpr_log(GPR_ERROR, "Kick failed: %s", msg);
673
+ GRPC_ERROR_UNREF(kick_error);
674
+ }
675
+ }
676
+ if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
677
+ GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
678
+ gpr_mu_lock(cq->mu);
679
+ cq_finish_shutdown_next(cq);
680
+ gpr_mu_unlock(cq->mu);
681
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
682
+ }
683
+ } else {
684
+ GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
685
+ gpr_atm_rel_store(&cqd->pending_events, 0);
686
+ gpr_mu_lock(cq->mu);
687
+ cq_finish_shutdown_next(cq);
688
+ gpr_mu_unlock(cq->mu);
689
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
690
+ }
691
+ }
692
+
693
+ GRPC_ERROR_UNREF(error);
694
+ }
695
+
696
+ /* Queue a GRPC_OP_COMPLETED operation to a completion queue (with a
697
+ * completion
698
+ * type of GRPC_CQ_PLUCK) */
699
+ static void cq_end_op_for_pluck(grpc_completion_queue* cq, void* tag,
700
+ grpc_error* error,
701
+ void (*done)(void* done_arg,
702
+ grpc_cq_completion* storage),
703
+ void* done_arg, grpc_cq_completion* storage) {
704
+ GPR_TIMER_SCOPE("cq_end_op_for_pluck", 0);
705
+
706
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*> DATA_FROM_CQ(cq);
707
+ int is_success = (error == GRPC_ERROR_NONE);
708
+
709
+ if (grpc_api_trace.enabled() ||
710
+ (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE)) {
711
+ const char* errmsg = grpc_error_string(error);
712
+ GRPC_API_TRACE(
713
+ "cq_end_op_for_pluck(cq=%p, tag=%p, error=%s, "
714
+ "done=%p, done_arg=%p, storage=%p)",
715
+ 6, (cq, tag, errmsg, done, done_arg, storage));
716
+ if (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE) {
717
+ gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
718
+ }
719
+ }
720
+
721
+ storage->tag = tag;
722
+ storage->done = done;
723
+ storage->done_arg = done_arg;
724
+ storage->next =
725
+ ((uintptr_t)&cqd->completed_head) | (static_cast<uintptr_t>(is_success));
726
+
727
+ gpr_mu_lock(cq->mu);
728
+ cq_check_tag(cq, tag, false); /* Used in debug builds only */
729
+
730
+ /* Add to the list of completions */
731
+ gpr_atm_no_barrier_fetch_add(&cqd->things_queued_ever, 1);
732
+ cqd->completed_tail->next =
733
+ ((uintptr_t)storage) | (1u & cqd->completed_tail->next);
734
+ cqd->completed_tail = storage;
735
+
736
+ if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
737
+ cq_finish_shutdown_pluck(cq);
738
+ gpr_mu_unlock(cq->mu);
739
+ } else {
740
+ grpc_pollset_worker* pluck_worker = nullptr;
741
+ for (int i = 0; i < cqd->num_pluckers; i++) {
742
+ if (cqd->pluckers[i].tag == tag) {
743
+ pluck_worker = *cqd->pluckers[i].worker;
744
+ break;
745
+ }
746
+ }
747
+
748
+ grpc_error* kick_error =
749
+ cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), pluck_worker);
750
+
751
+ gpr_mu_unlock(cq->mu);
752
+
753
+ if (kick_error != GRPC_ERROR_NONE) {
754
+ const char* msg = grpc_error_string(kick_error);
755
+ gpr_log(GPR_ERROR, "Kick failed: %s", msg);
756
+
757
+ GRPC_ERROR_UNREF(kick_error);
758
+ }
759
+ }
760
+
761
+ GRPC_ERROR_UNREF(error);
762
+ }
763
+
764
+ void grpc_cq_end_op(grpc_completion_queue* cq, void* tag, grpc_error* error,
765
+ void (*done)(void* done_arg, grpc_cq_completion* storage),
766
+ void* done_arg, grpc_cq_completion* storage) {
767
+ cq->vtable->end_op(cq, tag, error, done, done_arg, storage);
768
+ }
769
+
770
+ typedef struct {
771
+ gpr_atm last_seen_things_queued_ever;
772
+ grpc_completion_queue* cq;
773
+ grpc_millis deadline;
774
+ grpc_cq_completion* stolen_completion;
775
+ void* tag; /* for pluck */
776
+ bool first_loop;
777
+ } cq_is_finished_arg;
778
+
779
+ class ExecCtxNext : public grpc_core::ExecCtx {
780
+ public:
781
+ ExecCtxNext(void* arg) : ExecCtx(0), check_ready_to_finish_arg_(arg) {}
782
+
783
+ bool CheckReadyToFinish() override {
784
+ cq_is_finished_arg* a =
785
+ static_cast<cq_is_finished_arg*>(check_ready_to_finish_arg_);
786
+ grpc_completion_queue* cq = a->cq;
787
+ cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
788
+ GPR_ASSERT(a->stolen_completion == nullptr);
789
+
790
+ gpr_atm current_last_seen_things_queued_ever =
791
+ gpr_atm_no_barrier_load(&cqd->things_queued_ever);
792
+
793
+ if (current_last_seen_things_queued_ever !=
794
+ a->last_seen_things_queued_ever) {
795
+ a->last_seen_things_queued_ever =
796
+ gpr_atm_no_barrier_load(&cqd->things_queued_ever);
797
+
798
+ /* Pop a cq_completion from the queue. Returns NULL if the queue is empty
799
+ * might return NULL in some cases even if the queue is not empty; but
800
+ * that
801
+ * is ok and doesn't affect correctness. Might effect the tail latencies a
802
+ * bit) */
803
+ a->stolen_completion = cq_event_queue_pop(&cqd->queue);
804
+ if (a->stolen_completion != nullptr) {
805
+ return true;
806
+ }
807
+ }
808
+ return !a->first_loop && a->deadline < grpc_core::ExecCtx::Get()->Now();
809
+ }
810
+
811
+ private:
812
+ void* check_ready_to_finish_arg_;
813
+ };
814
+
815
+ #ifndef NDEBUG
816
+ static void dump_pending_tags(grpc_completion_queue* cq) {
817
+ if (!grpc_trace_pending_tags.enabled()) return;
818
+
819
+ gpr_strvec v;
820
+ gpr_strvec_init(&v);
821
+ gpr_strvec_add(&v, gpr_strdup("PENDING TAGS:"));
822
+ gpr_mu_lock(cq->mu);
823
+ for (size_t i = 0; i < cq->outstanding_tag_count; i++) {
824
+ char* s;
825
+ gpr_asprintf(&s, " %p", cq->outstanding_tags[i]);
826
+ gpr_strvec_add(&v, s);
827
+ }
828
+ gpr_mu_unlock(cq->mu);
829
+ char* out = gpr_strvec_flatten(&v, nullptr);
830
+ gpr_strvec_destroy(&v);
831
+ gpr_log(GPR_DEBUG, "%s", out);
832
+ gpr_free(out);
833
+ }
834
+ #else
835
+ static void dump_pending_tags(grpc_completion_queue* cq) {}
836
+ #endif
837
+
838
+ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
839
+ void* reserved) {
840
+ GPR_TIMER_SCOPE("grpc_completion_queue_next", 0);
841
+
842
+ grpc_event ret;
843
+ cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
844
+
845
+ GRPC_API_TRACE(
846
+ "grpc_completion_queue_next("
847
+ "cq=%p, "
848
+ "deadline=gpr_timespec { tv_sec: %" PRId64
849
+ ", tv_nsec: %d, clock_type: %d }, "
850
+ "reserved=%p)",
851
+ 5,
852
+ (cq, deadline.tv_sec, deadline.tv_nsec, (int)deadline.clock_type,
853
+ reserved));
854
+ GPR_ASSERT(!reserved);
855
+
856
+ dump_pending_tags(cq);
857
+
858
+ GRPC_CQ_INTERNAL_REF(cq, "next");
859
+
860
+ grpc_millis deadline_millis = grpc_timespec_to_millis_round_up(deadline);
861
+ cq_is_finished_arg is_finished_arg = {
862
+ gpr_atm_no_barrier_load(&cqd->things_queued_ever),
863
+ cq,
864
+ deadline_millis,
865
+ nullptr,
866
+ nullptr,
867
+ true};
868
+ ExecCtxNext exec_ctx(&is_finished_arg);
869
+ for (;;) {
870
+ grpc_millis iteration_deadline = deadline_millis;
871
+
872
+ if (is_finished_arg.stolen_completion != nullptr) {
873
+ grpc_cq_completion* c = is_finished_arg.stolen_completion;
874
+ is_finished_arg.stolen_completion = nullptr;
875
+ ret.type = GRPC_OP_COMPLETE;
876
+ ret.success = c->next & 1u;
877
+ ret.tag = c->tag;
878
+ c->done(c->done_arg, c);
879
+ break;
880
+ }
881
+
882
+ grpc_cq_completion* c = cq_event_queue_pop(&cqd->queue);
883
+
884
+ if (c != nullptr) {
885
+ ret.type = GRPC_OP_COMPLETE;
886
+ ret.success = c->next & 1u;
887
+ ret.tag = c->tag;
888
+ c->done(c->done_arg, c);
889
+ break;
890
+ } else {
891
+ /* If c == NULL it means either the queue is empty OR in an transient
892
+ inconsistent state. If it is the latter, we shold do a 0-timeout poll
893
+ so that the thread comes back quickly from poll to make a second
894
+ attempt at popping. Not doing this can potentially deadlock this
895
+ thread forever (if the deadline is infinity) */
896
+ if (cq_event_queue_num_items(&cqd->queue) > 0) {
897
+ iteration_deadline = 0;
898
+ }
899
+ }
900
+
901
+ if (gpr_atm_acq_load(&cqd->pending_events) == 0) {
902
+ /* Before returning, check if the queue has any items left over (since
903
+ gpr_mpscq_pop() can sometimes return NULL even if the queue is not
904
+ empty. If so, keep retrying but do not return GRPC_QUEUE_SHUTDOWN */
905
+ if (cq_event_queue_num_items(&cqd->queue) > 0) {
906
+ /* Go to the beginning of the loop. No point doing a poll because
907
+ (cq->shutdown == true) is only possible when there is no pending
908
+ work (i.e cq->pending_events == 0) and any outstanding completion
909
+ events should have already been queued on this cq */
910
+ continue;
911
+ }
912
+
913
+ memset(&ret, 0, sizeof(ret));
914
+ ret.type = GRPC_QUEUE_SHUTDOWN;
915
+ break;
916
+ }
917
+
918
+ if (!is_finished_arg.first_loop &&
919
+ grpc_core::ExecCtx::Get()->Now() >= deadline_millis) {
920
+ memset(&ret, 0, sizeof(ret));
921
+ ret.type = GRPC_QUEUE_TIMEOUT;
922
+ dump_pending_tags(cq);
923
+ break;
924
+ }
925
+
926
+ /* The main polling work happens in grpc_pollset_work */
927
+ gpr_mu_lock(cq->mu);
928
+ cq->num_polls++;
929
+ grpc_error* err = cq->poller_vtable->work(POLLSET_FROM_CQ(cq), nullptr,
930
+ iteration_deadline);
931
+ gpr_mu_unlock(cq->mu);
932
+
933
+ if (err != GRPC_ERROR_NONE) {
934
+ const char* msg = grpc_error_string(err);
935
+ gpr_log(GPR_ERROR, "Completion queue next failed: %s", msg);
936
+
937
+ GRPC_ERROR_UNREF(err);
938
+ memset(&ret, 0, sizeof(ret));
939
+ ret.type = GRPC_QUEUE_TIMEOUT;
940
+ dump_pending_tags(cq);
941
+ break;
942
+ }
943
+ is_finished_arg.first_loop = false;
944
+ }
945
+
946
+ if (cq_event_queue_num_items(&cqd->queue) > 0 &&
947
+ gpr_atm_acq_load(&cqd->pending_events) > 0) {
948
+ gpr_mu_lock(cq->mu);
949
+ cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), nullptr);
950
+ gpr_mu_unlock(cq->mu);
951
+ }
952
+
953
+ GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, &ret);
954
+ GRPC_CQ_INTERNAL_UNREF(cq, "next");
955
+
956
+ GPR_ASSERT(is_finished_arg.stolen_completion == nullptr);
957
+
958
+ return ret;
959
+ }
960
+
961
+ /* Finishes the completion queue shutdown. This means that there are no more
962
+ completion events / tags expected from the completion queue
963
+ - Must be called under completion queue lock
964
+ - Must be called only once in completion queue's lifetime
965
+ - grpc_completion_queue_shutdown() MUST have been called before calling
966
+ this function */
967
+ static void cq_finish_shutdown_next(grpc_completion_queue* cq) {
968
+ cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
969
+
970
+ GPR_ASSERT(cqd->shutdown_called);
971
+ GPR_ASSERT(gpr_atm_no_barrier_load(&cqd->pending_events) == 0);
972
+
973
+ cq->poller_vtable->shutdown(POLLSET_FROM_CQ(cq), &cq->pollset_shutdown_done);
974
+ }
975
+
976
+ static void cq_shutdown_next(grpc_completion_queue* cq) {
977
+ cq_next_data* cqd = static_cast<cq_next_data*> DATA_FROM_CQ(cq);
978
+
979
+ /* Need an extra ref for cq here because:
980
+ * We call cq_finish_shutdown_next() below, that would call pollset shutdown.
981
+ * Pollset shutdown decrements the cq ref count which can potentially destroy
982
+ * the cq (if that happens to be the last ref).
983
+ * Creating an extra ref here prevents the cq from getting destroyed while
984
+ * this function is still active */
985
+ GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
986
+ gpr_mu_lock(cq->mu);
987
+ if (cqd->shutdown_called) {
988
+ gpr_mu_unlock(cq->mu);
989
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
990
+ return;
991
+ }
992
+ cqd->shutdown_called = true;
993
+ /* Doing a full_fetch_add (i.e acq/release) here to match with
994
+ * cq_begin_op_for_next and and cq_end_op_for_next functions which read/write
995
+ * on this counter without necessarily holding a lock on cq */
996
+ if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
997
+ cq_finish_shutdown_next(cq);
998
+ }
999
+ gpr_mu_unlock(cq->mu);
1000
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
1001
+ }
1002
+
1003
+ grpc_event grpc_completion_queue_next(grpc_completion_queue* cq,
1004
+ gpr_timespec deadline, void* reserved) {
1005
+ return cq->vtable->next(cq, deadline, reserved);
1006
+ }
1007
+
1008
+ static int add_plucker(grpc_completion_queue* cq, void* tag,
1009
+ grpc_pollset_worker** worker) {
1010
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*> DATA_FROM_CQ(cq);
1011
+ if (cqd->num_pluckers == GRPC_MAX_COMPLETION_QUEUE_PLUCKERS) {
1012
+ return 0;
1013
+ }
1014
+ cqd->pluckers[cqd->num_pluckers].tag = tag;
1015
+ cqd->pluckers[cqd->num_pluckers].worker = worker;
1016
+ cqd->num_pluckers++;
1017
+ return 1;
1018
+ }
1019
+
1020
+ static void del_plucker(grpc_completion_queue* cq, void* tag,
1021
+ grpc_pollset_worker** worker) {
1022
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*> DATA_FROM_CQ(cq);
1023
+ for (int i = 0; i < cqd->num_pluckers; i++) {
1024
+ if (cqd->pluckers[i].tag == tag && cqd->pluckers[i].worker == worker) {
1025
+ cqd->num_pluckers--;
1026
+ GPR_SWAP(plucker, cqd->pluckers[i], cqd->pluckers[cqd->num_pluckers]);
1027
+ return;
1028
+ }
1029
+ }
1030
+ GPR_UNREACHABLE_CODE(return );
1031
+ }
1032
+
1033
+ class ExecCtxPluck : public grpc_core::ExecCtx {
1034
+ public:
1035
+ ExecCtxPluck(void* arg) : ExecCtx(0), check_ready_to_finish_arg_(arg) {}
1036
+
1037
+ bool CheckReadyToFinish() override {
1038
+ cq_is_finished_arg* a =
1039
+ static_cast<cq_is_finished_arg*>(check_ready_to_finish_arg_);
1040
+ grpc_completion_queue* cq = a->cq;
1041
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*> DATA_FROM_CQ(cq);
1042
+
1043
+ GPR_ASSERT(a->stolen_completion == nullptr);
1044
+ gpr_atm current_last_seen_things_queued_ever =
1045
+ gpr_atm_no_barrier_load(&cqd->things_queued_ever);
1046
+ if (current_last_seen_things_queued_ever !=
1047
+ a->last_seen_things_queued_ever) {
1048
+ gpr_mu_lock(cq->mu);
1049
+ a->last_seen_things_queued_ever =
1050
+ gpr_atm_no_barrier_load(&cqd->things_queued_ever);
1051
+ grpc_cq_completion* c;
1052
+ grpc_cq_completion* prev = &cqd->completed_head;
1053
+ while ((c = (grpc_cq_completion*)(prev->next &
1054
+ ~static_cast<uintptr_t>(1))) !=
1055
+ &cqd->completed_head) {
1056
+ if (c->tag == a->tag) {
1057
+ prev->next = (prev->next & static_cast<uintptr_t>(1)) |
1058
+ (c->next & ~static_cast<uintptr_t>(1));
1059
+ if (c == cqd->completed_tail) {
1060
+ cqd->completed_tail = prev;
1061
+ }
1062
+ gpr_mu_unlock(cq->mu);
1063
+ a->stolen_completion = c;
1064
+ return true;
1065
+ }
1066
+ prev = c;
1067
+ }
1068
+ gpr_mu_unlock(cq->mu);
1069
+ }
1070
+ return !a->first_loop && a->deadline < grpc_core::ExecCtx::Get()->Now();
1071
+ }
1072
+
1073
+ private:
1074
+ void* check_ready_to_finish_arg_;
1075
+ };
1076
+
1077
+ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
1078
+ gpr_timespec deadline, void* reserved) {
1079
+ GPR_TIMER_SCOPE("grpc_completion_queue_pluck", 0);
1080
+
1081
+ grpc_event ret;
1082
+ grpc_cq_completion* c;
1083
+ grpc_cq_completion* prev;
1084
+ grpc_pollset_worker* worker = nullptr;
1085
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*> DATA_FROM_CQ(cq);
1086
+
1087
+ if (grpc_cq_pluck_trace.enabled()) {
1088
+ GRPC_API_TRACE(
1089
+ "grpc_completion_queue_pluck("
1090
+ "cq=%p, tag=%p, "
1091
+ "deadline=gpr_timespec { tv_sec: %" PRId64
1092
+ ", tv_nsec: %d, clock_type: %d }, "
1093
+ "reserved=%p)",
1094
+ 6,
1095
+ (cq, tag, deadline.tv_sec, deadline.tv_nsec, (int)deadline.clock_type,
1096
+ reserved));
1097
+ }
1098
+ GPR_ASSERT(!reserved);
1099
+
1100
+ dump_pending_tags(cq);
1101
+
1102
+ GRPC_CQ_INTERNAL_REF(cq, "pluck");
1103
+ gpr_mu_lock(cq->mu);
1104
+ grpc_millis deadline_millis = grpc_timespec_to_millis_round_up(deadline);
1105
+ cq_is_finished_arg is_finished_arg = {
1106
+ gpr_atm_no_barrier_load(&cqd->things_queued_ever),
1107
+ cq,
1108
+ deadline_millis,
1109
+ nullptr,
1110
+ tag,
1111
+ true};
1112
+ ExecCtxPluck exec_ctx(&is_finished_arg);
1113
+ for (;;) {
1114
+ if (is_finished_arg.stolen_completion != nullptr) {
1115
+ gpr_mu_unlock(cq->mu);
1116
+ c = is_finished_arg.stolen_completion;
1117
+ is_finished_arg.stolen_completion = nullptr;
1118
+ ret.type = GRPC_OP_COMPLETE;
1119
+ ret.success = c->next & 1u;
1120
+ ret.tag = c->tag;
1121
+ c->done(c->done_arg, c);
1122
+ break;
1123
+ }
1124
+ prev = &cqd->completed_head;
1125
+ while (
1126
+ (c = (grpc_cq_completion*)(prev->next & ~static_cast<uintptr_t>(1))) !=
1127
+ &cqd->completed_head) {
1128
+ if (c->tag == tag) {
1129
+ prev->next = (prev->next & static_cast<uintptr_t>(1)) |
1130
+ (c->next & ~static_cast<uintptr_t>(1));
1131
+ if (c == cqd->completed_tail) {
1132
+ cqd->completed_tail = prev;
1133
+ }
1134
+ gpr_mu_unlock(cq->mu);
1135
+ ret.type = GRPC_OP_COMPLETE;
1136
+ ret.success = c->next & 1u;
1137
+ ret.tag = c->tag;
1138
+ c->done(c->done_arg, c);
1139
+ goto done;
1140
+ }
1141
+ prev = c;
1142
+ }
1143
+ if (gpr_atm_no_barrier_load(&cqd->shutdown)) {
1144
+ gpr_mu_unlock(cq->mu);
1145
+ memset(&ret, 0, sizeof(ret));
1146
+ ret.type = GRPC_QUEUE_SHUTDOWN;
1147
+ break;
1148
+ }
1149
+ if (!add_plucker(cq, tag, &worker)) {
1150
+ gpr_log(GPR_DEBUG,
1151
+ "Too many outstanding grpc_completion_queue_pluck calls: maximum "
1152
+ "is %d",
1153
+ GRPC_MAX_COMPLETION_QUEUE_PLUCKERS);
1154
+ gpr_mu_unlock(cq->mu);
1155
+ memset(&ret, 0, sizeof(ret));
1156
+ /* TODO(ctiller): should we use a different result here */
1157
+ ret.type = GRPC_QUEUE_TIMEOUT;
1158
+ dump_pending_tags(cq);
1159
+ break;
1160
+ }
1161
+ if (!is_finished_arg.first_loop &&
1162
+ grpc_core::ExecCtx::Get()->Now() >= deadline_millis) {
1163
+ del_plucker(cq, tag, &worker);
1164
+ gpr_mu_unlock(cq->mu);
1165
+ memset(&ret, 0, sizeof(ret));
1166
+ ret.type = GRPC_QUEUE_TIMEOUT;
1167
+ dump_pending_tags(cq);
1168
+ break;
1169
+ }
1170
+ cq->num_polls++;
1171
+ grpc_error* err =
1172
+ cq->poller_vtable->work(POLLSET_FROM_CQ(cq), &worker, deadline_millis);
1173
+ if (err != GRPC_ERROR_NONE) {
1174
+ del_plucker(cq, tag, &worker);
1175
+ gpr_mu_unlock(cq->mu);
1176
+ const char* msg = grpc_error_string(err);
1177
+ gpr_log(GPR_ERROR, "Completion queue pluck failed: %s", msg);
1178
+
1179
+ GRPC_ERROR_UNREF(err);
1180
+ memset(&ret, 0, sizeof(ret));
1181
+ ret.type = GRPC_QUEUE_TIMEOUT;
1182
+ dump_pending_tags(cq);
1183
+ break;
1184
+ }
1185
+ is_finished_arg.first_loop = false;
1186
+ del_plucker(cq, tag, &worker);
1187
+ }
1188
+ done:
1189
+ GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, &ret);
1190
+ GRPC_CQ_INTERNAL_UNREF(cq, "pluck");
1191
+
1192
+ GPR_ASSERT(is_finished_arg.stolen_completion == nullptr);
1193
+
1194
+ return ret;
1195
+ }
1196
+
1197
+ grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag,
1198
+ gpr_timespec deadline, void* reserved) {
1199
+ return cq->vtable->pluck(cq, tag, deadline, reserved);
1200
+ }
1201
+
1202
+ static void cq_finish_shutdown_pluck(grpc_completion_queue* cq) {
1203
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*> DATA_FROM_CQ(cq);
1204
+
1205
+ GPR_ASSERT(cqd->shutdown_called);
1206
+ GPR_ASSERT(!gpr_atm_no_barrier_load(&cqd->shutdown));
1207
+ gpr_atm_no_barrier_store(&cqd->shutdown, 1);
1208
+
1209
+ cq->poller_vtable->shutdown(POLLSET_FROM_CQ(cq), &cq->pollset_shutdown_done);
1210
+ }
1211
+
1212
+ /* NOTE: This function is almost exactly identical to cq_shutdown_next() but
1213
+ * merging them is a bit tricky and probably not worth it */
1214
+ static void cq_shutdown_pluck(grpc_completion_queue* cq) {
1215
+ cq_pluck_data* cqd = static_cast<cq_pluck_data*> DATA_FROM_CQ(cq);
1216
+
1217
+ /* Need an extra ref for cq here because:
1218
+ * We call cq_finish_shutdown_pluck() below, that would call pollset shutdown.
1219
+ * Pollset shutdown decrements the cq ref count which can potentially destroy
1220
+ * the cq (if that happens to be the last ref).
1221
+ * Creating an extra ref here prevents the cq from getting destroyed while
1222
+ * this function is still active */
1223
+ GRPC_CQ_INTERNAL_REF(cq, "shutting_down (pluck cq)");
1224
+ gpr_mu_lock(cq->mu);
1225
+ if (cqd->shutdown_called) {
1226
+ gpr_mu_unlock(cq->mu);
1227
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (pluck cq)");
1228
+ return;
1229
+ }
1230
+ cqd->shutdown_called = true;
1231
+ if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
1232
+ cq_finish_shutdown_pluck(cq);
1233
+ }
1234
+ gpr_mu_unlock(cq->mu);
1235
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (pluck cq)");
1236
+ }
1237
+
1238
+ /* Shutdown simply drops a ref that we reserved at creation time; if we drop
1239
+ to zero here, then enter shutdown mode and wake up any waiters */
1240
+ void grpc_completion_queue_shutdown(grpc_completion_queue* cq) {
1241
+ GPR_TIMER_SCOPE("grpc_completion_queue_shutdown", 0);
1242
+ grpc_core::ExecCtx exec_ctx;
1243
+ GRPC_API_TRACE("grpc_completion_queue_shutdown(cq=%p)", 1, (cq));
1244
+ cq->vtable->shutdown(cq);
1245
+ }
1246
+
1247
+ void grpc_completion_queue_destroy(grpc_completion_queue* cq) {
1248
+ GPR_TIMER_SCOPE("grpc_completion_queue_destroy", 0);
1249
+ GRPC_API_TRACE("grpc_completion_queue_destroy(cq=%p)", 1, (cq));
1250
+ grpc_completion_queue_shutdown(cq);
1251
+
1252
+ grpc_core::ExecCtx exec_ctx;
1253
+ GRPC_CQ_INTERNAL_UNREF(cq, "destroy");
1254
+ }
1255
+
1256
+ grpc_pollset* grpc_cq_pollset(grpc_completion_queue* cq) {
1257
+ return cq->poller_vtable->can_get_pollset ? POLLSET_FROM_CQ(cq) : nullptr;
1258
+ }
1259
+
1260
+ bool grpc_cq_can_listen(grpc_completion_queue* cq) {
1261
+ return cq->poller_vtable->can_listen;
1262
+ }