awesome-grpc-that-works 0.12.2 → 0.14.0.dev

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 (724) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/Makefile +5783 -22121
  4. data/include/grpc/byte_buffer.h +2 -83
  5. data/include/grpc/census.h +173 -121
  6. data/include/grpc/compression.h +14 -38
  7. data/include/grpc/grpc.h +85 -434
  8. data/include/grpc/grpc_security.h +76 -46
  9. data/include/grpc/grpc_zookeeper.h +1 -1
  10. data/include/grpc/impl/codegen/alloc.h +74 -0
  11. data/include/grpc/impl/codegen/atm.h +92 -0
  12. data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
  13. data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
  14. data/include/grpc/impl/codegen/atm_win32.h +125 -0
  15. data/include/grpc/impl/codegen/byte_buffer.h +121 -0
  16. data/include/grpc/impl/codegen/compression_types.h +73 -0
  17. data/include/grpc/impl/codegen/connectivity_state.h +59 -0
  18. data/include/grpc/impl/codegen/grpc_types.h +378 -0
  19. data/include/grpc/impl/codegen/log.h +110 -0
  20. data/include/grpc/impl/codegen/port_platform.h +370 -0
  21. data/include/grpc/impl/codegen/propagation_bits.h +67 -0
  22. data/include/grpc/impl/codegen/slice.h +182 -0
  23. data/include/grpc/impl/codegen/slice_buffer.h +105 -0
  24. data/include/grpc/impl/codegen/status.h +163 -0
  25. data/include/grpc/impl/codegen/sync.h +316 -0
  26. data/include/grpc/impl/codegen/sync_generic.h +55 -0
  27. data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
  28. data/include/grpc/impl/codegen/sync_win32.h +49 -0
  29. data/include/grpc/impl/codegen/time.h +130 -0
  30. data/include/grpc/status.h +2 -126
  31. data/include/grpc/support/alloc.h +2 -35
  32. data/include/grpc/support/atm.h +2 -55
  33. data/include/grpc/support/atm_gcc_atomic.h +5 -38
  34. data/include/grpc/support/atm_gcc_sync.h +2 -50
  35. data/include/grpc/support/atm_win32.h +2 -88
  36. data/include/grpc/support/avl.h +10 -9
  37. data/include/grpc/support/cmdline.h +15 -13
  38. data/include/grpc/support/cpu.h +5 -3
  39. data/include/grpc/support/histogram.h +23 -20
  40. data/include/grpc/support/host_port.h +5 -3
  41. data/include/grpc/support/log.h +2 -71
  42. data/include/grpc/support/log_win32.h +2 -2
  43. data/include/grpc/support/port_platform.h +2 -319
  44. data/include/grpc/support/slice.h +2 -145
  45. data/include/grpc/support/slice_buffer.h +2 -65
  46. data/include/grpc/support/string_util.h +3 -3
  47. data/include/grpc/support/subprocess.h +8 -6
  48. data/include/grpc/support/sync.h +2 -278
  49. data/include/grpc/support/sync_generic.h +2 -18
  50. data/include/grpc/support/sync_posix.h +2 -10
  51. data/include/grpc/support/sync_win32.h +2 -12
  52. data/include/grpc/support/thd.h +11 -11
  53. data/include/grpc/support/time.h +2 -91
  54. data/include/grpc/support/tls.h +1 -1
  55. data/include/grpc/support/tls_gcc.h +1 -1
  56. data/include/grpc/support/tls_msvc.h +1 -1
  57. data/include/grpc/support/tls_pthread.h +2 -2
  58. data/include/grpc/support/useful.h +3 -1
  59. data/src/boringssl/err_data.c +1252 -0
  60. data/src/core/census/context.c +471 -8
  61. data/src/core/census/grpc_filter.c +5 -5
  62. data/src/core/census/initialize.c +4 -7
  63. data/src/core/census/mlog.c +600 -0
  64. data/src/core/census/mlog.h +95 -0
  65. data/src/core/census/operation.c +2 -2
  66. data/src/core/census/placeholders.c +109 -0
  67. data/src/core/census/rpc_metric_id.h +6 -6
  68. data/src/core/census/tracing.c +1 -1
  69. data/src/core/channel/channel_args.c +71 -9
  70. data/src/core/channel/channel_args.h +7 -1
  71. data/src/core/channel/channel_stack.c +1 -1
  72. data/src/core/channel/client_channel.c +33 -30
  73. data/src/core/channel/client_uchannel.c +3 -3
  74. data/src/core/channel/compress_filter.c +8 -8
  75. data/src/core/channel/http_client_filter.c +4 -4
  76. data/src/core/channel/http_server_filter.c +11 -11
  77. data/src/core/channel/subchannel_call_holder.c +11 -11
  78. data/src/core/client_config/connector.c +3 -2
  79. data/src/core/client_config/connector.h +2 -2
  80. data/src/core/client_config/lb_policies/load_balancer_api.c +163 -0
  81. data/src/core/client_config/lb_policies/load_balancer_api.h +85 -0
  82. data/src/core/client_config/lb_policies/pick_first.c +57 -40
  83. data/src/core/client_config/lb_policies/round_robin.c +14 -15
  84. data/src/core/client_config/lb_policy.c +3 -3
  85. data/src/core/client_config/lb_policy.h +3 -2
  86. data/src/core/client_config/resolvers/dns_resolver.c +3 -3
  87. data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
  88. data/src/core/client_config/subchannel.c +84 -39
  89. data/src/core/client_config/subchannel.h +15 -6
  90. data/src/core/client_config/subchannel_index.c +261 -0
  91. data/src/core/client_config/subchannel_index.h +77 -0
  92. data/src/core/compression/{algorithm.c → compression_algorithm.c} +3 -3
  93. data/src/core/httpcli/format_request.c +1 -1
  94. data/src/core/httpcli/httpcli.c +18 -16
  95. data/src/core/httpcli/httpcli.h +3 -2
  96. data/src/core/httpcli/httpcli_security_connector.c +9 -10
  97. data/src/core/httpcli/parser.c +7 -7
  98. data/src/core/httpcli/parser.h +1 -1
  99. data/src/core/iomgr/closure.c +7 -7
  100. data/src/core/iomgr/closure.h +6 -5
  101. data/src/core/iomgr/exec_ctx.c +12 -8
  102. data/src/core/iomgr/exec_ctx.h +12 -5
  103. data/src/core/iomgr/executor.c +4 -4
  104. data/src/core/iomgr/executor.h +2 -2
  105. data/src/core/iomgr/fd_posix.c +32 -19
  106. data/src/core/iomgr/fd_posix.h +7 -4
  107. data/src/core/iomgr/iocp_windows.c +7 -9
  108. data/src/core/iomgr/iomgr.c +2 -2
  109. data/src/core/iomgr/pollset.h +9 -10
  110. data/src/core/iomgr/pollset_multipoller_with_epoll.c +71 -5
  111. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +9 -5
  112. data/src/core/iomgr/pollset_posix.c +44 -49
  113. data/src/core/iomgr/pollset_posix.h +14 -8
  114. data/src/core/iomgr/pollset_set.h +3 -9
  115. data/src/core/iomgr/pollset_set_posix.c +23 -3
  116. data/src/core/iomgr/pollset_set_posix.h +2 -18
  117. data/src/core/iomgr/pollset_set_windows.c +3 -3
  118. data/src/core/iomgr/pollset_set_windows.h +2 -2
  119. data/src/core/iomgr/pollset_windows.c +29 -37
  120. data/src/core/iomgr/pollset_windows.h +1 -5
  121. data/src/core/iomgr/resolve_address_posix.c +2 -2
  122. data/src/core/iomgr/resolve_address_windows.c +2 -2
  123. data/src/core/iomgr/sockaddr_utils.c +6 -6
  124. data/src/core/iomgr/sockaddr_win32.h +1 -6
  125. data/src/core/iomgr/tcp_client_posix.c +14 -12
  126. data/src/core/iomgr/tcp_client_windows.c +4 -4
  127. data/src/core/iomgr/tcp_posix.c +18 -10
  128. data/src/core/iomgr/tcp_posix.h +7 -1
  129. data/src/core/iomgr/tcp_server.h +40 -20
  130. data/src/core/iomgr/tcp_server_posix.c +106 -49
  131. data/src/core/iomgr/tcp_server_windows.c +98 -49
  132. data/src/core/iomgr/tcp_windows.c +11 -15
  133. data/src/core/iomgr/timer.c +10 -11
  134. data/src/core/iomgr/timer.h +22 -2
  135. data/src/core/iomgr/timer_heap.c +10 -10
  136. data/src/core/iomgr/timer_heap.h +2 -2
  137. data/src/core/iomgr/udp_server.c +7 -16
  138. data/src/core/iomgr/udp_server.h +2 -9
  139. data/src/core/iomgr/workqueue.h +2 -4
  140. data/src/core/iomgr/workqueue_posix.c +4 -3
  141. data/src/core/iomgr/workqueue_posix.h +3 -1
  142. data/src/core/json/json_reader.c +11 -12
  143. data/src/core/json/json_reader.h +4 -4
  144. data/src/core/json/json_string.c +19 -19
  145. data/src/core/json/json_writer.c +7 -9
  146. data/src/core/profiling/basic_timers.c +1 -1
  147. data/src/core/proto/grpc/lb/v0/load_balancer.pb.c +119 -0
  148. data/src/core/proto/grpc/lb/v0/load_balancer.pb.h +182 -0
  149. data/src/core/security/{base64.c → b64.c} +10 -10
  150. data/src/core/security/{base64.h → b64.h} +1 -1
  151. data/src/core/security/client_auth_filter.c +4 -5
  152. data/src/core/security/credentials.c +17 -10
  153. data/src/core/security/credentials.h +3 -3
  154. data/src/core/security/google_default_credentials.c +27 -22
  155. data/src/core/security/handshake.c +21 -12
  156. data/src/core/security/handshake.h +2 -1
  157. data/src/core/security/json_token.c +14 -8
  158. data/src/core/security/jwt_verifier.c +4 -3
  159. data/src/core/security/secure_endpoint.c +16 -16
  160. data/src/core/security/security_connector.c +131 -81
  161. data/src/core/security/security_connector.h +47 -27
  162. data/src/core/security/security_context.c +8 -3
  163. data/src/core/security/server_auth_filter.c +5 -5
  164. data/src/core/security/server_secure_chttp2.c +36 -37
  165. data/src/core/statistics/census_interface.h +2 -2
  166. data/src/core/statistics/census_rpc_stats.h +3 -3
  167. data/src/core/support/alloc.c +1 -1
  168. data/src/core/support/avl.c +2 -2
  169. data/src/core/support/cpu_posix.c +2 -2
  170. data/src/core/support/env_linux.c +28 -1
  171. data/src/core/support/env_win32.c +15 -7
  172. data/src/core/support/histogram.c +5 -5
  173. data/src/core/support/{file.c → load_file.c} +2 -2
  174. data/src/core/support/{file.h → load_file.h} +4 -12
  175. data/src/core/support/log_posix.c +1 -1
  176. data/src/core/support/log_win32.c +4 -3
  177. data/src/core/support/murmur_hash.c +11 -11
  178. data/src/core/support/murmur_hash.h +1 -1
  179. data/src/core/support/slice.c +11 -11
  180. data/src/core/support/slice_buffer.c +6 -6
  181. data/src/core/support/stack_lockfree.c +20 -10
  182. data/src/core/support/string.c +15 -15
  183. data/src/core/support/string.h +5 -5
  184. data/src/core/support/string_win32.c +5 -5
  185. data/src/core/support/subprocess_windows.c +141 -0
  186. data/src/core/support/sync.c +4 -4
  187. data/src/core/support/sync_posix.c +2 -2
  188. data/src/core/support/sync_win32.c +10 -5
  189. data/src/core/support/time.c +29 -29
  190. data/src/core/support/time_posix.c +15 -6
  191. data/src/core/support/time_precise.c +2 -2
  192. data/src/core/support/time_win32.c +18 -9
  193. data/src/core/support/tls_pthread.c +1 -1
  194. data/src/core/support/tmpfile.h +55 -0
  195. data/src/core/support/{file_posix.c → tmpfile_posix.c} +2 -2
  196. data/src/core/support/{file_win32.c → tmpfile_win32.c} +2 -2
  197. data/src/core/support/wrap_memcpy.c +53 -0
  198. data/src/core/surface/alarm.c +84 -0
  199. data/src/core/surface/byte_buffer_reader.c +1 -1
  200. data/src/core/surface/call.c +175 -116
  201. data/src/core/surface/call.h +2 -2
  202. data/src/core/surface/call_test_only.h +2 -2
  203. data/src/core/surface/channel.c +9 -9
  204. data/src/core/surface/channel.h +1 -1
  205. data/src/core/surface/channel_connectivity.c +3 -3
  206. data/src/core/surface/channel_create.c +4 -4
  207. data/src/core/surface/channel_ping.c +2 -2
  208. data/src/core/surface/completion_queue.c +84 -53
  209. data/src/core/surface/completion_queue.h +1 -1
  210. data/src/core/surface/init.c +11 -5
  211. data/src/core/surface/lame_client.c +2 -3
  212. data/src/core/surface/secure_channel_create.c +9 -10
  213. data/src/core/surface/server.c +30 -30
  214. data/src/core/surface/server_chttp2.c +8 -8
  215. data/src/core/surface/server_create.c +1 -4
  216. data/src/core/surface/validate_metadata.c +4 -4
  217. data/src/core/surface/version.c +2 -2
  218. data/src/core/transport/byte_stream.c +8 -6
  219. data/src/core/transport/byte_stream.h +6 -5
  220. data/src/core/transport/chttp2/bin_encoder.c +29 -29
  221. data/src/core/transport/chttp2/frame_data.c +29 -26
  222. data/src/core/transport/chttp2/frame_data.h +6 -6
  223. data/src/core/transport/chttp2/frame_goaway.c +30 -30
  224. data/src/core/transport/chttp2/frame_goaway.h +6 -6
  225. data/src/core/transport/chttp2/frame_ping.c +6 -6
  226. data/src/core/transport/chttp2/frame_ping.h +5 -5
  227. data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
  228. data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
  229. data/src/core/transport/chttp2/frame_settings.c +30 -30
  230. data/src/core/transport/chttp2/frame_settings.h +13 -13
  231. data/src/core/transport/chttp2/frame_window_update.c +17 -18
  232. data/src/core/transport/chttp2/frame_window_update.h +5 -7
  233. data/src/core/transport/chttp2/hpack_encoder.c +69 -73
  234. data/src/core/transport/chttp2/hpack_encoder.h +16 -16
  235. data/src/core/transport/chttp2/hpack_parser.c +167 -167
  236. data/src/core/transport/chttp2/hpack_parser.h +16 -16
  237. data/src/core/transport/chttp2/hpack_table.c +13 -13
  238. data/src/core/transport/chttp2/hpack_table.h +11 -11
  239. data/src/core/transport/chttp2/internal.h +103 -87
  240. data/src/core/transport/chttp2/parsing.c +25 -25
  241. data/src/core/transport/chttp2/stream_lists.c +38 -1
  242. data/src/core/transport/chttp2/stream_map.c +13 -14
  243. data/src/core/transport/chttp2/stream_map.h +6 -7
  244. data/src/core/transport/chttp2/timeout_encoding.c +19 -16
  245. data/src/core/transport/chttp2/varint.c +8 -9
  246. data/src/core/transport/chttp2/varint.h +7 -8
  247. data/src/core/transport/chttp2/writing.c +25 -22
  248. data/src/core/transport/chttp2_transport.c +147 -100
  249. data/src/core/transport/connectivity_state.c +6 -6
  250. data/src/core/transport/metadata.c +18 -18
  251. data/src/core/transport/metadata.h +5 -5
  252. data/src/core/transport/static_metadata.c +32 -33
  253. data/src/core/transport/static_metadata.h +8 -8
  254. data/src/core/transport/transport.c +6 -5
  255. data/src/core/transport/transport.h +17 -1
  256. data/src/core/tsi/fake_transport_security.c +7 -7
  257. data/src/core/tsi/ssl_transport_security.c +6 -4
  258. data/src/core/{iomgr/timer_internal.h → tsi/ssl_types.h} +19 -25
  259. data/src/ruby/ext/grpc/extconf.rb +52 -14
  260. data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
  261. data/src/ruby/ext/grpc/rb_call.c +7 -3
  262. data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
  263. data/src/ruby/ext/grpc/rb_channel.c +4 -2
  264. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  265. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
  266. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
  267. data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
  268. data/src/ruby/ext/grpc/rb_grpc.c +28 -19
  269. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +562 -0
  270. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +846 -0
  271. data/src/ruby/ext/grpc/rb_loader.c +72 -0
  272. data/src/ruby/ext/grpc/rb_loader.h +40 -0
  273. data/src/ruby/ext/grpc/rb_server.c +3 -1
  274. data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
  275. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  276. data/src/ruby/lib/grpc/errors.rb +2 -2
  277. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  278. data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
  279. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  280. data/src/ruby/lib/grpc/grpc.rb +34 -0
  281. data/src/ruby/lib/grpc/version.rb +1 -1
  282. data/src/ruby/pb/README.md +2 -2
  283. data/src/ruby/pb/generate_proto_ruby.sh +2 -2
  284. data/src/ruby/pb/grpc/health/checker.rb +11 -11
  285. data/src/ruby/pb/grpc/health/v1/health.rb +28 -0
  286. data/src/ruby/pb/grpc/health/{v1alpha → v1}/health_services.rb +4 -4
  287. data/src/ruby/spec/client_server_spec.rb +2 -1
  288. data/src/ruby/spec/pb/health/checker_spec.rb +23 -37
  289. data/third_party/boringssl/crypto/aes/aes.c +1142 -0
  290. data/third_party/boringssl/crypto/aes/internal.h +87 -0
  291. data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
  292. data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
  293. data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
  294. data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
  295. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
  296. data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
  297. data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
  298. data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
  299. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
  300. data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
  301. data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
  302. data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
  303. data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
  304. data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
  305. data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
  306. data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
  307. data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
  308. data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
  309. data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
  310. data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
  311. data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
  312. data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
  313. data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
  314. data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
  315. data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
  316. data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
  317. data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
  318. data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
  319. data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
  320. data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
  321. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
  322. data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
  323. data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
  324. data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
  325. data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
  326. data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
  327. data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
  328. data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
  329. data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
  330. data/third_party/boringssl/crypto/base64/base64.c +478 -0
  331. data/third_party/boringssl/crypto/bio/bio.c +608 -0
  332. data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
  333. data/third_party/boringssl/crypto/bio/buffer.c +496 -0
  334. data/third_party/boringssl/crypto/bio/connect.c +544 -0
  335. data/third_party/boringssl/crypto/bio/fd.c +270 -0
  336. data/third_party/boringssl/crypto/bio/file.c +349 -0
  337. data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
  338. data/third_party/boringssl/crypto/bio/internal.h +108 -0
  339. data/third_party/boringssl/crypto/bio/pair.c +803 -0
  340. data/third_party/boringssl/crypto/bio/printf.c +119 -0
  341. data/third_party/boringssl/crypto/bio/socket.c +195 -0
  342. data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
  343. data/third_party/boringssl/crypto/bn/add.c +377 -0
  344. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
  345. data/third_party/boringssl/crypto/bn/bn.c +341 -0
  346. data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
  347. data/third_party/boringssl/crypto/bn/cmp.c +200 -0
  348. data/third_party/boringssl/crypto/bn/convert.c +597 -0
  349. data/third_party/boringssl/crypto/bn/ctx.c +311 -0
  350. data/third_party/boringssl/crypto/bn/div.c +625 -0
  351. data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
  352. data/third_party/boringssl/crypto/bn/gcd.c +711 -0
  353. data/third_party/boringssl/crypto/bn/generic.c +1019 -0
  354. data/third_party/boringssl/crypto/bn/internal.h +294 -0
  355. data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
  356. data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
  357. data/third_party/boringssl/crypto/bn/mul.c +888 -0
  358. data/third_party/boringssl/crypto/bn/prime.c +845 -0
  359. data/third_party/boringssl/crypto/bn/random.c +326 -0
  360. data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
  361. data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
  362. data/third_party/boringssl/crypto/bn/shift.c +299 -0
  363. data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
  364. data/third_party/boringssl/crypto/buf/buf.c +235 -0
  365. data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
  366. data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
  367. data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
  368. data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
  369. data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
  370. data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
  371. data/third_party/boringssl/crypto/cipher/aead.c +167 -0
  372. data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
  373. data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
  374. data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
  375. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
  376. data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
  377. data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
  378. data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
  379. data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
  380. data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
  381. data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
  382. data/third_party/boringssl/crypto/cipher/internal.h +164 -0
  383. data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
  384. data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
  385. data/third_party/boringssl/crypto/conf/conf.c +778 -0
  386. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  387. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  388. data/third_party/boringssl/crypto/cpu-arm.c +199 -0
  389. data/third_party/boringssl/crypto/cpu-intel.c +261 -0
  390. data/third_party/boringssl/crypto/crypto.c +140 -0
  391. data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
  392. data/third_party/boringssl/crypto/des/des.c +771 -0
  393. data/third_party/boringssl/crypto/des/internal.h +212 -0
  394. data/third_party/boringssl/crypto/dh/check.c +180 -0
  395. data/third_party/boringssl/crypto/dh/dh.c +463 -0
  396. data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
  397. data/third_party/boringssl/crypto/dh/internal.h +80 -0
  398. data/third_party/boringssl/crypto/dh/params.c +301 -0
  399. data/third_party/boringssl/crypto/digest/digest.c +248 -0
  400. data/third_party/boringssl/crypto/digest/digests.c +321 -0
  401. data/third_party/boringssl/crypto/digest/internal.h +112 -0
  402. data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
  403. data/third_party/boringssl/crypto/directory.h +66 -0
  404. data/third_party/boringssl/crypto/directory_posix.c +108 -0
  405. data/third_party/boringssl/crypto/directory_win.c +144 -0
  406. data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
  407. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
  408. data/third_party/boringssl/crypto/dsa/internal.h +78 -0
  409. data/third_party/boringssl/crypto/ec/ec.c +889 -0
  410. data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
  411. data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
  412. data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
  413. data/third_party/boringssl/crypto/ec/internal.h +318 -0
  414. data/third_party/boringssl/crypto/ec/oct.c +416 -0
  415. data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
  416. data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
  417. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
  418. data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
  419. data/third_party/boringssl/crypto/ec/simple.c +1313 -0
  420. data/third_party/boringssl/crypto/ec/util-64.c +183 -0
  421. data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
  422. data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
  423. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
  424. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
  425. data/third_party/boringssl/crypto/engine/engine.c +96 -0
  426. data/third_party/boringssl/crypto/err/err.c +756 -0
  427. data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
  428. data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
  429. data/third_party/boringssl/crypto/evp/evp.c +411 -0
  430. data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
  431. data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
  432. data/third_party/boringssl/crypto/evp/internal.h +278 -0
  433. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
  434. data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
  435. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
  436. data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
  437. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
  438. data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
  439. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  440. data/third_party/boringssl/crypto/ex_data.c +294 -0
  441. data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
  442. data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
  443. data/third_party/boringssl/crypto/internal.h +532 -0
  444. data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
  445. data/third_party/boringssl/crypto/md4/md4.c +225 -0
  446. data/third_party/boringssl/crypto/md5/md5.c +275 -0
  447. data/third_party/boringssl/crypto/mem.c +200 -0
  448. data/third_party/boringssl/crypto/modes/cbc.c +216 -0
  449. data/third_party/boringssl/crypto/modes/cfb.c +231 -0
  450. data/third_party/boringssl/crypto/modes/ctr.c +226 -0
  451. data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
  452. data/third_party/boringssl/crypto/modes/internal.h +370 -0
  453. data/third_party/boringssl/crypto/modes/ofb.c +108 -0
  454. data/third_party/boringssl/crypto/obj/obj.c +664 -0
  455. data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
  456. data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
  457. data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
  458. data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
  459. data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
  460. data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
  461. data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
  462. data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
  463. data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
  464. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  465. data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
  466. data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
  467. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
  468. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
  469. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
  470. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
  471. data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
  472. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
  473. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
  474. data/third_party/boringssl/crypto/rand/internal.h +32 -0
  475. data/third_party/boringssl/crypto/rand/rand.c +239 -0
  476. data/third_party/boringssl/crypto/rand/urandom.c +223 -0
  477. data/third_party/boringssl/crypto/rand/windows.c +56 -0
  478. data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
  479. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  480. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  481. data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
  482. data/third_party/boringssl/crypto/rsa/internal.h +164 -0
  483. data/third_party/boringssl/crypto/rsa/padding.c +711 -0
  484. data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
  485. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
  486. data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
  487. data/third_party/boringssl/crypto/sha/sha1.c +337 -0
  488. data/third_party/boringssl/crypto/sha/sha256.c +327 -0
  489. data/third_party/boringssl/crypto/sha/sha512.c +607 -0
  490. data/third_party/boringssl/crypto/stack/stack.c +386 -0
  491. data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
  492. data/third_party/boringssl/crypto/test/test_util.h +35 -0
  493. data/third_party/boringssl/crypto/thread.c +101 -0
  494. data/third_party/boringssl/crypto/thread_none.c +55 -0
  495. data/third_party/boringssl/crypto/thread_pthread.c +167 -0
  496. data/third_party/boringssl/crypto/thread_win.c +282 -0
  497. data/third_party/boringssl/crypto/time_support.c +212 -0
  498. data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
  499. data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
  500. data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
  501. data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
  502. data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
  503. data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
  504. data/third_party/boringssl/crypto/x509/by_file.c +295 -0
  505. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  506. data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
  507. data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
  508. data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
  509. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  510. data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
  511. data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
  512. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  513. data/third_party/boringssl/crypto/x509/x509.c +152 -0
  514. data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
  515. data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
  516. data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
  517. data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
  518. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  519. data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
  520. data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
  521. data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
  522. data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
  523. data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
  524. data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
  525. data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
  526. data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
  527. data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
  528. data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
  529. data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
  530. data/third_party/boringssl/crypto/x509/x509name.c +381 -0
  531. data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
  532. data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
  533. data/third_party/boringssl/crypto/x509/x509type.c +128 -0
  534. data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
  535. data/third_party/boringssl/crypto/x509/x_all.c +547 -0
  536. data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
  537. data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
  538. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  539. data/third_party/boringssl/crypto/x509/x_info.c +95 -0
  540. data/third_party/boringssl/crypto/x509/x_name.c +538 -0
  541. data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
  542. data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
  543. data/third_party/boringssl/crypto/x509/x_req.c +112 -0
  544. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  545. data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
  546. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  547. data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
  548. data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
  549. data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
  550. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
  551. data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
  552. data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
  553. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
  554. data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
  555. data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
  556. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
  557. data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
  558. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
  559. data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
  560. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
  561. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  562. data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
  563. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
  564. data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
  565. data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
  566. data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
  567. data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
  568. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
  569. data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
  570. data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
  571. data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
  572. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
  573. data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
  574. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
  575. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
  576. data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
  577. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
  578. data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
  579. data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
  580. data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
  581. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
  582. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
  583. data/third_party/boringssl/include/openssl/aead.h +346 -0
  584. data/third_party/boringssl/include/openssl/aes.h +158 -0
  585. data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
  586. data/third_party/boringssl/include/openssl/asn1.h +1168 -0
  587. data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
  588. data/third_party/boringssl/include/openssl/asn1t.h +906 -0
  589. data/third_party/boringssl/include/openssl/base.h +261 -0
  590. data/third_party/boringssl/include/openssl/base64.h +184 -0
  591. data/third_party/boringssl/include/openssl/bio.h +902 -0
  592. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  593. data/third_party/boringssl/include/openssl/bn.h +885 -0
  594. data/third_party/boringssl/include/openssl/buf.h +118 -0
  595. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  596. data/third_party/boringssl/include/openssl/bytestring.h +360 -0
  597. data/third_party/boringssl/include/openssl/cast.h +96 -0
  598. data/third_party/boringssl/include/openssl/chacha.h +37 -0
  599. data/third_party/boringssl/include/openssl/cipher.h +571 -0
  600. data/third_party/boringssl/include/openssl/cmac.h +76 -0
  601. data/third_party/boringssl/include/openssl/conf.h +145 -0
  602. data/third_party/boringssl/include/openssl/cpu.h +184 -0
  603. data/third_party/boringssl/include/openssl/crypto.h +68 -0
  604. data/third_party/boringssl/include/openssl/curve25519.h +88 -0
  605. data/third_party/boringssl/include/openssl/des.h +177 -0
  606. data/third_party/boringssl/include/openssl/dh.h +238 -0
  607. data/third_party/boringssl/include/openssl/digest.h +258 -0
  608. data/third_party/boringssl/include/openssl/dsa.h +343 -0
  609. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  610. data/third_party/boringssl/include/openssl/ec.h +355 -0
  611. data/third_party/boringssl/include/openssl/ec_key.h +280 -0
  612. data/third_party/boringssl/include/openssl/ecdh.h +102 -0
  613. data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
  614. data/third_party/boringssl/include/openssl/engine.h +98 -0
  615. data/third_party/boringssl/include/openssl/err.h +487 -0
  616. data/third_party/boringssl/include/openssl/evp.h +750 -0
  617. data/third_party/boringssl/include/openssl/ex_data.h +213 -0
  618. data/third_party/boringssl/include/openssl/hkdf.h +44 -0
  619. data/third_party/boringssl/include/openssl/hmac.h +160 -0
  620. data/third_party/boringssl/include/openssl/lhash.h +192 -0
  621. data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
  622. data/third_party/boringssl/include/openssl/md4.h +102 -0
  623. data/third_party/boringssl/include/openssl/md5.h +107 -0
  624. data/third_party/boringssl/include/openssl/mem.h +140 -0
  625. data/third_party/boringssl/include/openssl/obj.h +198 -0
  626. data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
  627. data/third_party/boringssl/include/openssl/objects.h +18 -0
  628. data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
  629. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  630. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  631. data/third_party/boringssl/include/openssl/pem.h +521 -0
  632. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  633. data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
  634. data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
  635. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  636. data/third_party/boringssl/include/openssl/pqueue.h +146 -0
  637. data/third_party/boringssl/include/openssl/rand.h +113 -0
  638. data/third_party/boringssl/include/openssl/rc4.h +90 -0
  639. data/third_party/boringssl/include/openssl/rsa.h +637 -0
  640. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  641. data/third_party/boringssl/include/openssl/sha.h +256 -0
  642. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  643. data/third_party/boringssl/include/openssl/ssl.h +4466 -0
  644. data/third_party/boringssl/include/openssl/ssl3.h +441 -0
  645. data/third_party/boringssl/include/openssl/stack.h +298 -0
  646. data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
  647. data/third_party/boringssl/include/openssl/thread.h +173 -0
  648. data/third_party/boringssl/include/openssl/time_support.h +90 -0
  649. data/third_party/boringssl/include/openssl/tls1.h +653 -0
  650. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  651. data/third_party/boringssl/include/openssl/x509.h +1258 -0
  652. data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
  653. data/third_party/boringssl/include/openssl/x509v3.h +798 -0
  654. data/third_party/boringssl/ssl/custom_extensions.c +257 -0
  655. data/third_party/boringssl/ssl/d1_both.c +880 -0
  656. data/third_party/boringssl/ssl/d1_clnt.c +566 -0
  657. data/third_party/boringssl/ssl/d1_lib.c +340 -0
  658. data/third_party/boringssl/ssl/d1_meth.c +130 -0
  659. data/third_party/boringssl/ssl/d1_pkt.c +578 -0
  660. data/third_party/boringssl/ssl/d1_srtp.c +234 -0
  661. data/third_party/boringssl/ssl/d1_srvr.c +485 -0
  662. data/third_party/boringssl/ssl/dtls_record.c +308 -0
  663. data/third_party/boringssl/ssl/internal.h +1276 -0
  664. data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
  665. data/third_party/boringssl/ssl/s3_both.c +571 -0
  666. data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
  667. data/third_party/boringssl/ssl/s3_enc.c +494 -0
  668. data/third_party/boringssl/ssl/s3_lib.c +587 -0
  669. data/third_party/boringssl/ssl/s3_meth.c +166 -0
  670. data/third_party/boringssl/ssl/s3_pkt.c +732 -0
  671. data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
  672. data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
  673. data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
  674. data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
  675. data/third_party/boringssl/ssl/ssl_cert.c +539 -0
  676. data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
  677. data/third_party/boringssl/ssl/ssl_file.c +633 -0
  678. data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
  679. data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
  680. data/third_party/boringssl/ssl/ssl_session.c +764 -0
  681. data/third_party/boringssl/ssl/ssl_stat.c +591 -0
  682. data/third_party/boringssl/ssl/t1_enc.c +708 -0
  683. data/third_party/boringssl/ssl/t1_lib.c +2905 -0
  684. data/third_party/boringssl/ssl/test/async_bio.h +45 -0
  685. data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
  686. data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
  687. data/third_party/boringssl/ssl/test/test_config.h +108 -0
  688. data/third_party/boringssl/ssl/tls_record.c +342 -0
  689. data/third_party/nanopb/pb.h +547 -0
  690. data/third_party/nanopb/pb_common.c +97 -0
  691. data/third_party/nanopb/pb_common.h +42 -0
  692. data/third_party/nanopb/pb_decode.c +1319 -0
  693. data/third_party/nanopb/pb_decode.h +149 -0
  694. data/third_party/nanopb/pb_encode.c +690 -0
  695. data/third_party/nanopb/pb_encode.h +154 -0
  696. data/third_party/zlib/adler32.c +179 -0
  697. data/third_party/zlib/compress.c +80 -0
  698. data/third_party/zlib/crc32.c +425 -0
  699. data/third_party/zlib/crc32.h +441 -0
  700. data/third_party/zlib/deflate.c +1967 -0
  701. data/third_party/zlib/deflate.h +346 -0
  702. data/third_party/zlib/gzclose.c +25 -0
  703. data/third_party/zlib/gzguts.h +209 -0
  704. data/third_party/zlib/gzlib.c +634 -0
  705. data/third_party/zlib/gzread.c +594 -0
  706. data/third_party/zlib/gzwrite.c +577 -0
  707. data/third_party/zlib/infback.c +640 -0
  708. data/third_party/zlib/inffast.c +340 -0
  709. data/third_party/zlib/inffast.h +11 -0
  710. data/third_party/zlib/inffixed.h +94 -0
  711. data/third_party/zlib/inflate.c +1512 -0
  712. data/third_party/zlib/inflate.h +122 -0
  713. data/third_party/zlib/inftrees.c +306 -0
  714. data/third_party/zlib/inftrees.h +62 -0
  715. data/third_party/zlib/trees.c +1226 -0
  716. data/third_party/zlib/trees.h +128 -0
  717. data/third_party/zlib/uncompr.c +59 -0
  718. data/third_party/zlib/zconf.h +511 -0
  719. data/third_party/zlib/zlib.h +1768 -0
  720. data/third_party/zlib/zutil.c +324 -0
  721. data/third_party/zlib/zutil.h +253 -0
  722. metadata +504 -20
  723. data/Rakefile +0 -63
  724. data/src/ruby/pb/grpc/health/v1alpha/health.rb +0 -29
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2015, Google Inc.
3
+ * Copyright 2015-2016, Google Inc.
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -36,16 +36,17 @@
36
36
  #include <string.h>
37
37
 
38
38
  #include <grpc/support/alloc.h>
39
+ #include <grpc/support/avl.h>
39
40
 
40
41
  #include "src/core/channel/channel_args.h"
41
42
  #include "src/core/channel/client_channel.h"
42
43
  #include "src/core/channel/connected_channel.h"
43
44
  #include "src/core/client_config/initial_connect_string.h"
45
+ #include "src/core/client_config/subchannel_index.h"
44
46
  #include "src/core/iomgr/timer.h"
45
47
  #include "src/core/profiling/timers.h"
46
48
  #include "src/core/surface/channel.h"
47
49
  #include "src/core/transport/connectivity_state.h"
48
- #include "src/core/transport/connectivity_state.h"
49
50
 
50
51
  #define INTERNAL_REF_BITS 16
51
52
  #define STRONG_REF_MASK (~(gpr_atm)((1 << INTERNAL_REF_BITS) - 1))
@@ -94,6 +95,8 @@ struct grpc_subchannel {
94
95
  struct sockaddr *addr;
95
96
  size_t addr_len;
96
97
 
98
+ grpc_subchannel_key *key;
99
+
97
100
  /** initial string to send to peer */
98
101
  gpr_slice initial_connect_string;
99
102
 
@@ -105,7 +108,7 @@ struct grpc_subchannel {
105
108
 
106
109
  /** pollset_set tracking who's interested in a connection
107
110
  being setup */
108
- grpc_pollset_set pollset_set;
111
+ grpc_pollset_set *pollset_set;
109
112
 
110
113
  /** active connection, or null; of type grpc_connected_subchannel */
111
114
  gpr_atm connected_subchannel;
@@ -131,7 +134,7 @@ struct grpc_subchannel {
131
134
  /** our alarm */
132
135
  grpc_timer alarm;
133
136
  /** current random value */
134
- gpr_uint32 random;
137
+ uint32_t random;
135
138
  };
136
139
 
137
140
  struct grpc_subchannel_call {
@@ -145,7 +148,7 @@ struct grpc_subchannel_call {
145
148
 
146
149
  static gpr_timespec compute_connect_deadline(grpc_subchannel *c);
147
150
  static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *subchannel,
148
- int iomgr_success);
151
+ bool iomgr_success);
149
152
 
150
153
  #ifdef GRPC_STREAM_REFCOUNT_DEBUG
151
154
  #define REF_REASON reason
@@ -175,7 +178,7 @@ static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *subchannel,
175
178
  */
176
179
 
177
180
  static void connection_destroy(grpc_exec_ctx *exec_ctx, void *arg,
178
- int success) {
181
+ bool success) {
179
182
  grpc_connected_subchannel *c = arg;
180
183
  grpc_channel_stack_destroy(exec_ctx, CHANNEL_STACK_FROM_CONNECTION(c));
181
184
  gpr_free(c);
@@ -198,7 +201,7 @@ void grpc_connected_subchannel_unref(grpc_exec_ctx *exec_ctx,
198
201
  */
199
202
 
200
203
  static void subchannel_destroy(grpc_exec_ctx *exec_ctx, void *arg,
201
- int success) {
204
+ bool success) {
202
205
  grpc_subchannel *c = arg;
203
206
  gpr_free((void *)c->filters);
204
207
  grpc_channel_args_destroy(c->args);
@@ -206,7 +209,8 @@ static void subchannel_destroy(grpc_exec_ctx *exec_ctx, void *arg,
206
209
  gpr_slice_unref(c->initial_connect_string);
207
210
  grpc_connectivity_state_destroy(exec_ctx, &c->state_tracker);
208
211
  grpc_connector_unref(exec_ctx, c->connector);
209
- grpc_pollset_set_destroy(&c->pollset_set);
212
+ grpc_pollset_set_destroy(c->pollset_set);
213
+ grpc_subchannel_key_destroy(exec_ctx, c->key);
210
214
  gpr_free(c);
211
215
  }
212
216
 
@@ -222,22 +226,42 @@ static gpr_atm ref_mutate(grpc_subchannel *c, gpr_atm delta,
222
226
  return old_val;
223
227
  }
224
228
 
225
- void grpc_subchannel_ref(grpc_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
229
+ grpc_subchannel *grpc_subchannel_ref(grpc_subchannel *c
230
+ GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
226
231
  gpr_atm old_refs;
227
232
  old_refs = ref_mutate(c, (1 << INTERNAL_REF_BITS),
228
233
  0 REF_MUTATE_PURPOSE("STRONG_REF"));
229
234
  GPR_ASSERT((old_refs & STRONG_REF_MASK) != 0);
235
+ return c;
230
236
  }
231
237
 
232
- void grpc_subchannel_weak_ref(grpc_subchannel *c
233
- GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
238
+ grpc_subchannel *grpc_subchannel_weak_ref(grpc_subchannel *c
239
+ GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
234
240
  gpr_atm old_refs;
235
241
  old_refs = ref_mutate(c, 1, 0 REF_MUTATE_PURPOSE("WEAK_REF"));
236
242
  GPR_ASSERT(old_refs != 0);
243
+ return c;
244
+ }
245
+
246
+ grpc_subchannel *grpc_subchannel_ref_from_weak_ref(
247
+ grpc_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
248
+ if (!c) return NULL;
249
+ for (;;) {
250
+ gpr_atm old_refs = gpr_atm_acq_load(&c->ref_pair);
251
+ if (old_refs >= (1 << INTERNAL_REF_BITS)) {
252
+ gpr_atm new_refs = old_refs + (1 << INTERNAL_REF_BITS);
253
+ if (gpr_atm_rel_cas(&c->ref_pair, old_refs, new_refs)) {
254
+ return c;
255
+ }
256
+ } else {
257
+ return NULL;
258
+ }
259
+ }
237
260
  }
238
261
 
239
262
  static void disconnect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
240
263
  grpc_connected_subchannel *con;
264
+ grpc_subchannel_index_unregister(exec_ctx, c->key, c);
241
265
  gpr_mu_lock(&c->mu);
242
266
  GPR_ASSERT(!c->disconnected);
243
267
  c->disconnected = 1;
@@ -268,28 +292,41 @@ void grpc_subchannel_weak_unref(grpc_exec_ctx *exec_ctx,
268
292
  old_refs = ref_mutate(c, -(gpr_atm)1, 1 REF_MUTATE_PURPOSE("WEAK_UNREF"));
269
293
  if (old_refs == 1) {
270
294
  grpc_exec_ctx_enqueue(exec_ctx, grpc_closure_create(subchannel_destroy, c),
271
- 1);
295
+ true, NULL);
272
296
  }
273
297
  }
274
298
 
275
- static gpr_uint32 random_seed() {
276
- return (gpr_uint32)(gpr_time_to_millis(gpr_now(GPR_CLOCK_MONOTONIC)));
299
+ static uint32_t random_seed() {
300
+ return (uint32_t)(gpr_time_to_millis(gpr_now(GPR_CLOCK_MONOTONIC)));
277
301
  }
278
302
 
279
- grpc_subchannel *grpc_subchannel_create(grpc_connector *connector,
303
+ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
304
+ grpc_connector *connector,
280
305
  grpc_subchannel_args *args) {
281
- grpc_subchannel *c = gpr_malloc(sizeof(*c));
306
+ grpc_subchannel_key *key = grpc_subchannel_key_create(connector, args);
307
+ grpc_subchannel *c = grpc_subchannel_index_find(exec_ctx, key);
308
+ if (c) {
309
+ grpc_subchannel_key_destroy(exec_ctx, key);
310
+ return c;
311
+ }
312
+
313
+ c = gpr_malloc(sizeof(*c));
282
314
  memset(c, 0, sizeof(*c));
315
+ c->key = key;
283
316
  gpr_atm_no_barrier_store(&c->ref_pair, 1 << INTERNAL_REF_BITS);
284
317
  c->connector = connector;
285
318
  grpc_connector_ref(c->connector);
286
319
  c->num_filters = args->filter_count;
287
- c->filters = gpr_malloc(sizeof(grpc_channel_filter *) * c->num_filters);
288
- memcpy((void *)c->filters, args->filters,
289
- sizeof(grpc_channel_filter *) * c->num_filters);
320
+ if (c->num_filters > 0) {
321
+ c->filters = gpr_malloc(sizeof(grpc_channel_filter *) * c->num_filters);
322
+ memcpy((void *)c->filters, args->filters,
323
+ sizeof(grpc_channel_filter *) * c->num_filters);
324
+ } else {
325
+ c->filters = NULL;
326
+ }
290
327
  c->addr = gpr_malloc(args->addr_len);
291
328
  memcpy(c->addr, args->addr, args->addr_len);
292
- grpc_pollset_set_init(&c->pollset_set);
329
+ c->pollset_set = grpc_pollset_set_create();
293
330
  c->addr_len = args->addr_len;
294
331
  grpc_set_initial_connect_string(&c->addr, &c->addr_len,
295
332
  &c->initial_connect_string);
@@ -301,13 +338,14 @@ grpc_subchannel *grpc_subchannel_create(grpc_connector *connector,
301
338
  grpc_connectivity_state_init(&c->state_tracker, GRPC_CHANNEL_IDLE,
302
339
  "subchannel");
303
340
  gpr_mu_init(&c->mu);
304
- return c;
341
+
342
+ return grpc_subchannel_index_register(exec_ctx, key, c);
305
343
  }
306
344
 
307
345
  static void continue_connect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
308
346
  grpc_connect_in_args args;
309
347
 
310
- args.interested_parties = &c->pollset_set;
348
+ args.interested_parties = c->pollset_set;
311
349
  args.addr = c->addr;
312
350
  args.addr_len = c->addr_len;
313
351
  args.deadline = compute_connect_deadline(c);
@@ -337,11 +375,11 @@ grpc_connectivity_state grpc_subchannel_check_connectivity(grpc_subchannel *c) {
337
375
  }
338
376
 
339
377
  static void on_external_state_watcher_done(grpc_exec_ctx *exec_ctx, void *arg,
340
- int success) {
378
+ bool success) {
341
379
  external_state_watcher *w = arg;
342
380
  grpc_closure *follow_up = w->notify;
343
381
  if (w->pollset_set != NULL) {
344
- grpc_pollset_set_del_pollset_set(exec_ctx, &w->subchannel->pollset_set,
382
+ grpc_pollset_set_del_pollset_set(exec_ctx, w->subchannel->pollset_set,
345
383
  w->pollset_set);
346
384
  }
347
385
  gpr_mu_lock(&w->subchannel->mu);
@@ -377,7 +415,7 @@ void grpc_subchannel_notify_on_state_change(
377
415
  w->notify = notify;
378
416
  grpc_closure_init(&w->closure, on_external_state_watcher_done, w);
379
417
  if (interested_parties != NULL) {
380
- grpc_pollset_set_add_pollset_set(exec_ctx, &c->pollset_set,
418
+ grpc_pollset_set_add_pollset_set(exec_ctx, c->pollset_set,
381
419
  interested_parties);
382
420
  }
383
421
  GRPC_SUBCHANNEL_WEAK_REF(c, "external_state_watcher");
@@ -409,7 +447,7 @@ void grpc_connected_subchannel_process_transport_op(
409
447
  }
410
448
 
411
449
  static void subchannel_on_child_state_changed(grpc_exec_ctx *exec_ctx, void *p,
412
- int iomgr_success) {
450
+ bool iomgr_success) {
413
451
  state_watcher *sw = p;
414
452
  grpc_subchannel *c = sw->subchannel;
415
453
  gpr_mu *mu = &c->mu;
@@ -483,7 +521,9 @@ static void publish_transport(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
483
521
  /* build final filter list */
484
522
  num_filters = c->num_filters + c->connecting_result.num_filters + 1;
485
523
  filters = gpr_malloc(sizeof(*filters) * num_filters);
486
- memcpy((void *)filters, c->filters, sizeof(*filters) * c->num_filters);
524
+ if (c->num_filters > 0) {
525
+ memcpy((void *)filters, c->filters, sizeof(*filters) * c->num_filters);
526
+ }
487
527
  memcpy((void *)(filters + c->num_filters), c->connecting_result.filters,
488
528
  sizeof(*filters) * c->connecting_result.num_filters);
489
529
  filters[num_filters - 1] = &grpc_connected_channel_filter;
@@ -519,7 +559,12 @@ static void publish_transport(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
519
559
  }
520
560
 
521
561
  /* publish */
522
- GPR_ASSERT(gpr_atm_no_barrier_cas(&c->connected_subchannel, 0, (gpr_atm)con));
562
+ /* TODO(ctiller): this full barrier seems to clear up a TSAN failure.
563
+ I'd have expected the rel_cas below to be enough, but
564
+ seemingly it's not.
565
+ Re-evaluate if we really need this. */
566
+ gpr_atm_full_barrier();
567
+ GPR_ASSERT(gpr_atm_rel_cas(&c->connected_subchannel, 0, (gpr_atm)con));
523
568
  c->connecting = 0;
524
569
 
525
570
  /* setup subchannel watching connected subchannel for changes; subchannel ref
@@ -528,7 +573,7 @@ static void publish_transport(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
528
573
  GRPC_SUBCHANNEL_WEAK_REF(c, "state_watcher");
529
574
  GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
530
575
  grpc_connected_subchannel_notify_on_state_change(
531
- exec_ctx, con, &c->pollset_set, &sw_subchannel->connectivity_state,
576
+ exec_ctx, con, c->pollset_set, &sw_subchannel->connectivity_state,
532
577
  &sw_subchannel->closure);
533
578
 
534
579
  /* signal completion */
@@ -541,15 +586,15 @@ static void publish_transport(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
541
586
 
542
587
  /* Generate a random number between 0 and 1. */
543
588
  static double generate_uniform_random_number(grpc_subchannel *c) {
544
- c->random = (1103515245 * c->random + 12345) % ((gpr_uint32)1 << 31);
545
- return c->random / (double)((gpr_uint32)1 << 31);
589
+ c->random = (1103515245 * c->random + 12345) % ((uint32_t)1 << 31);
590
+ return c->random / (double)((uint32_t)1 << 31);
546
591
  }
547
592
 
548
593
  /* Update backoff_delta and next_attempt in subchannel */
549
594
  static void update_reconnect_parameters(grpc_subchannel *c) {
550
595
  size_t i;
551
- gpr_int32 backoff_delta_millis, jitter;
552
- gpr_int32 max_backoff_millis =
596
+ int32_t backoff_delta_millis, jitter;
597
+ int32_t max_backoff_millis =
553
598
  GRPC_SUBCHANNEL_RECONNECT_MAX_BACKOFF_SECONDS * 1000;
554
599
  double jitter_range;
555
600
 
@@ -567,8 +612,8 @@ static void update_reconnect_parameters(grpc_subchannel *c) {
567
612
  }
568
613
 
569
614
  backoff_delta_millis =
570
- (gpr_int32)(gpr_time_to_millis(c->backoff_delta) *
571
- GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER);
615
+ (int32_t)(gpr_time_to_millis(c->backoff_delta) *
616
+ GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER);
572
617
  if (backoff_delta_millis > max_backoff_millis) {
573
618
  backoff_delta_millis = max_backoff_millis;
574
619
  }
@@ -578,12 +623,12 @@ static void update_reconnect_parameters(grpc_subchannel *c) {
578
623
 
579
624
  jitter_range = GRPC_SUBCHANNEL_RECONNECT_JITTER * backoff_delta_millis;
580
625
  jitter =
581
- (gpr_int32)((2 * generate_uniform_random_number(c) - 1) * jitter_range);
626
+ (int32_t)((2 * generate_uniform_random_number(c) - 1) * jitter_range);
582
627
  c->next_attempt =
583
628
  gpr_time_add(c->next_attempt, gpr_time_from_millis(jitter, GPR_TIMESPAN));
584
629
  }
585
630
 
586
- static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, int iomgr_success) {
631
+ static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, bool iomgr_success) {
587
632
  grpc_subchannel *c = arg;
588
633
  gpr_mu_lock(&c->mu);
589
634
  c->have_alarm = 0;
@@ -600,7 +645,7 @@ static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, int iomgr_success) {
600
645
  }
601
646
 
602
647
  static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg,
603
- int iomgr_success) {
648
+ bool iomgr_success) {
604
649
  grpc_subchannel *c = arg;
605
650
 
606
651
  if (c->connecting_result.transport != NULL) {
@@ -636,7 +681,7 @@ static gpr_timespec compute_connect_deadline(grpc_subchannel *c) {
636
681
  */
637
682
 
638
683
  static void subchannel_call_destroy(grpc_exec_ctx *exec_ctx, void *call,
639
- int success) {
684
+ bool success) {
640
685
  grpc_subchannel_call *c = call;
641
686
  GPR_TIMER_BEGIN("grpc_subchannel_call_unref.destroy", 0);
642
687
  grpc_call_stack_destroy(exec_ctx, SUBCHANNEL_CALL_TO_CALL_STACK(c));
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2015, Google Inc.
3
+ * Copyright 2015-2016, Google Inc.
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -48,6 +48,8 @@ typedef struct grpc_subchannel_args grpc_subchannel_args;
48
48
  #ifdef GRPC_STREAM_REFCOUNT_DEBUG
49
49
  #define GRPC_SUBCHANNEL_REF(p, r) \
50
50
  grpc_subchannel_ref((p), __FILE__, __LINE__, (r))
51
+ #define GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(p, r) \
52
+ grpc_subchannel_ref_from_weak_ref((p), __FILE__, __LINE__, (r))
51
53
  #define GRPC_SUBCHANNEL_UNREF(cl, p, r) \
52
54
  grpc_subchannel_unref((cl), (p), __FILE__, __LINE__, (r))
53
55
  #define GRPC_SUBCHANNEL_WEAK_REF(p, r) \
@@ -66,6 +68,8 @@ typedef struct grpc_subchannel_args grpc_subchannel_args;
66
68
  , const char *file, int line, const char *reason
67
69
  #else
68
70
  #define GRPC_SUBCHANNEL_REF(p, r) grpc_subchannel_ref((p))
71
+ #define GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(p, r) \
72
+ grpc_subchannel_ref_from_weak_ref((p))
69
73
  #define GRPC_SUBCHANNEL_UNREF(cl, p, r) grpc_subchannel_unref((cl), (p))
70
74
  #define GRPC_SUBCHANNEL_WEAK_REF(p, r) grpc_subchannel_weak_ref((p))
71
75
  #define GRPC_SUBCHANNEL_WEAK_UNREF(cl, p, r) \
@@ -79,13 +83,15 @@ typedef struct grpc_subchannel_args grpc_subchannel_args;
79
83
  #define GRPC_SUBCHANNEL_REF_EXTRA_ARGS
80
84
  #endif
81
85
 
82
- void grpc_subchannel_ref(grpc_subchannel *channel
83
- GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
86
+ grpc_subchannel *grpc_subchannel_ref(grpc_subchannel *channel
87
+ GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
88
+ grpc_subchannel *grpc_subchannel_ref_from_weak_ref(
89
+ grpc_subchannel *channel GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
84
90
  void grpc_subchannel_unref(grpc_exec_ctx *exec_ctx,
85
91
  grpc_subchannel *channel
86
92
  GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
87
- void grpc_subchannel_weak_ref(grpc_subchannel *channel
88
- GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
93
+ grpc_subchannel *grpc_subchannel_weak_ref(grpc_subchannel *channel
94
+ GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
89
95
  void grpc_subchannel_weak_unref(grpc_exec_ctx *exec_ctx,
90
96
  grpc_subchannel *channel
91
97
  GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
@@ -146,6 +152,8 @@ grpc_call_stack *grpc_subchannel_call_get_call_stack(
146
152
  grpc_subchannel_call *subchannel_call);
147
153
 
148
154
  struct grpc_subchannel_args {
155
+ /* When updating this struct, also update subchannel_index.c */
156
+
149
157
  /** Channel filters for this channel - wrapped factories will likely
150
158
  want to mutate this */
151
159
  const grpc_channel_filter **filters;
@@ -159,7 +167,8 @@ struct grpc_subchannel_args {
159
167
  };
160
168
 
161
169
  /** create a subchannel given a connector */
162
- grpc_subchannel *grpc_subchannel_create(grpc_connector *connector,
170
+ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
171
+ grpc_connector *connector,
163
172
  grpc_subchannel_args *args);
164
173
 
165
174
  #endif /* GRPC_INTERNAL_CORE_CLIENT_CONFIG_SUBCHANNEL_H */
@@ -0,0 +1,261 @@
1
+ //
2
+ //
3
+ // Copyright 2016, Google Inc.
4
+ // All rights reserved.
5
+ //
6
+ // Redistribution and use in source and binary forms, with or without
7
+ // modification, are permitted provided that the following conditions are
8
+ // met:
9
+ //
10
+ // * Redistributions of source code must retain the above copyright
11
+ // notice, this list of conditions and the following disclaimer.
12
+ // * Redistributions in binary form must reproduce the above
13
+ // copyright notice, this list of conditions and the following disclaimer
14
+ // in the documentation and/or other materials provided with the
15
+ // distribution.
16
+ // * Neither the name of Google Inc. nor the names of its
17
+ // contributors may be used to endorse or promote products derived from
18
+ // this software without specific prior written permission.
19
+ //
20
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ //
32
+ //
33
+
34
+ #include "src/core/client_config/subchannel_index.h"
35
+
36
+ #include <stdbool.h>
37
+ #include <string.h>
38
+
39
+ #include <grpc/support/alloc.h>
40
+ #include <grpc/support/avl.h>
41
+ #include <grpc/support/tls.h>
42
+
43
+ #include "src/core/channel/channel_args.h"
44
+
45
+ // a map of subchannel_key --> subchannel, used for detecting connections
46
+ // to the same destination in order to share them
47
+ static gpr_avl g_subchannel_index;
48
+
49
+ static gpr_mu g_mu;
50
+
51
+ struct grpc_subchannel_key {
52
+ grpc_connector *connector;
53
+ grpc_subchannel_args args;
54
+ };
55
+
56
+ GPR_TLS_DECL(subchannel_index_exec_ctx);
57
+
58
+ static void enter_ctx(grpc_exec_ctx *exec_ctx) {
59
+ GPR_ASSERT(gpr_tls_get(&subchannel_index_exec_ctx) == 0);
60
+ gpr_tls_set(&subchannel_index_exec_ctx, (intptr_t)exec_ctx);
61
+ }
62
+
63
+ static void leave_ctx(grpc_exec_ctx *exec_ctx) {
64
+ GPR_ASSERT(gpr_tls_get(&subchannel_index_exec_ctx) == (intptr_t)exec_ctx);
65
+ gpr_tls_set(&subchannel_index_exec_ctx, 0);
66
+ }
67
+
68
+ static grpc_exec_ctx *current_ctx() {
69
+ grpc_exec_ctx *c = (grpc_exec_ctx *)gpr_tls_get(&subchannel_index_exec_ctx);
70
+ GPR_ASSERT(c != NULL);
71
+ return c;
72
+ }
73
+
74
+ static grpc_subchannel_key *create_key(
75
+ grpc_connector *connector, grpc_subchannel_args *args,
76
+ grpc_channel_args *(*copy_channel_args)(const grpc_channel_args *args)) {
77
+ grpc_subchannel_key *k = gpr_malloc(sizeof(*k));
78
+ k->connector = grpc_connector_ref(connector);
79
+ k->args.filter_count = args->filter_count;
80
+ k->args.filters = gpr_malloc(sizeof(*k->args.filters) * k->args.filter_count);
81
+ memcpy((grpc_channel_filter *)k->args.filters, args->filters,
82
+ sizeof(*k->args.filters) * k->args.filter_count);
83
+ k->args.addr_len = args->addr_len;
84
+ k->args.addr = gpr_malloc(args->addr_len);
85
+ memcpy(k->args.addr, args->addr, k->args.addr_len);
86
+ k->args.args = copy_channel_args(args->args);
87
+ return k;
88
+ }
89
+
90
+ grpc_subchannel_key *grpc_subchannel_key_create(grpc_connector *connector,
91
+ grpc_subchannel_args *args) {
92
+ return create_key(connector, args, grpc_channel_args_normalize);
93
+ }
94
+
95
+ static grpc_subchannel_key *subchannel_key_copy(grpc_subchannel_key *k) {
96
+ return create_key(k->connector, &k->args, grpc_channel_args_copy);
97
+ }
98
+
99
+ static int subchannel_key_compare(grpc_subchannel_key *a,
100
+ grpc_subchannel_key *b) {
101
+ int c = GPR_ICMP(a->connector, b->connector);
102
+ if (c != 0) return c;
103
+ c = GPR_ICMP(a->args.addr_len, b->args.addr_len);
104
+ if (c != 0) return c;
105
+ c = GPR_ICMP(a->args.filter_count, b->args.filter_count);
106
+ if (c != 0) return c;
107
+ c = memcmp(a->args.addr, b->args.addr, a->args.addr_len);
108
+ if (c != 0) return c;
109
+ c = memcmp(a->args.filters, b->args.filters,
110
+ a->args.filter_count * sizeof(*a->args.filters));
111
+ return grpc_channel_args_compare(a->args.args, b->args.args);
112
+ }
113
+
114
+ void grpc_subchannel_key_destroy(grpc_exec_ctx *exec_ctx,
115
+ grpc_subchannel_key *k) {
116
+ grpc_connector_unref(exec_ctx, k->connector);
117
+ gpr_free(k->args.addr);
118
+ gpr_free((grpc_channel_args *)k->args.filters);
119
+ grpc_channel_args_destroy((grpc_channel_args *)k->args.args);
120
+ gpr_free(k);
121
+ }
122
+
123
+ static void sck_avl_destroy(void *p) {
124
+ grpc_subchannel_key_destroy(current_ctx(), p);
125
+ }
126
+
127
+ static void *sck_avl_copy(void *p) { return subchannel_key_copy(p); }
128
+
129
+ static long sck_avl_compare(void *a, void *b) {
130
+ return subchannel_key_compare(a, b);
131
+ }
132
+
133
+ static void scv_avl_destroy(void *p) {
134
+ GRPC_SUBCHANNEL_WEAK_UNREF(current_ctx(), p, "subchannel_index");
135
+ }
136
+
137
+ static void *scv_avl_copy(void *p) {
138
+ GRPC_SUBCHANNEL_WEAK_REF(p, "subchannel_index");
139
+ return p;
140
+ }
141
+
142
+ static const gpr_avl_vtable subchannel_avl_vtable = {
143
+ .destroy_key = sck_avl_destroy,
144
+ .copy_key = sck_avl_copy,
145
+ .compare_keys = sck_avl_compare,
146
+ .destroy_value = scv_avl_destroy,
147
+ .copy_value = scv_avl_copy};
148
+
149
+ void grpc_subchannel_index_init(void) {
150
+ g_subchannel_index = gpr_avl_create(&subchannel_avl_vtable);
151
+ gpr_mu_init(&g_mu);
152
+ gpr_tls_init(&subchannel_index_exec_ctx);
153
+ }
154
+
155
+ void grpc_subchannel_index_shutdown(void) {
156
+ gpr_mu_destroy(&g_mu);
157
+ gpr_avl_unref(g_subchannel_index);
158
+ gpr_tls_destroy(&subchannel_index_exec_ctx);
159
+ }
160
+
161
+ grpc_subchannel *grpc_subchannel_index_find(grpc_exec_ctx *exec_ctx,
162
+ grpc_subchannel_key *key) {
163
+ enter_ctx(exec_ctx);
164
+
165
+ // Lock, and take a reference to the subchannel index.
166
+ // We don't need to do the search under a lock as avl's are immutable.
167
+ gpr_mu_lock(&g_mu);
168
+ gpr_avl index = gpr_avl_ref(g_subchannel_index);
169
+ gpr_mu_unlock(&g_mu);
170
+
171
+ grpc_subchannel *c =
172
+ GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(gpr_avl_get(index, key), "index_find");
173
+ gpr_avl_unref(index);
174
+
175
+ leave_ctx(exec_ctx);
176
+ return c;
177
+ }
178
+
179
+ grpc_subchannel *grpc_subchannel_index_register(grpc_exec_ctx *exec_ctx,
180
+ grpc_subchannel_key *key,
181
+ grpc_subchannel *constructed) {
182
+ enter_ctx(exec_ctx);
183
+
184
+ grpc_subchannel *c = NULL;
185
+
186
+ while (c == NULL) {
187
+ // Compare and swap loop:
188
+ // - take a reference to the current index
189
+ gpr_mu_lock(&g_mu);
190
+ gpr_avl index = gpr_avl_ref(g_subchannel_index);
191
+ gpr_mu_unlock(&g_mu);
192
+
193
+ // - Check to see if a subchannel already exists
194
+ c = gpr_avl_get(index, key);
195
+ if (c != NULL) {
196
+ // yes -> we're done
197
+ GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, constructed, "index_register");
198
+ } else {
199
+ // no -> update the avl and compare/swap
200
+ gpr_avl updated =
201
+ gpr_avl_add(gpr_avl_ref(index), subchannel_key_copy(key),
202
+ GRPC_SUBCHANNEL_WEAK_REF(constructed, "index_register"));
203
+
204
+ // it may happen (but it's expected to be unlikely)
205
+ // that some other thread has changed the index:
206
+ // compare/swap here to check that, and retry as necessary
207
+ gpr_mu_lock(&g_mu);
208
+ if (index.root == g_subchannel_index.root) {
209
+ GPR_SWAP(gpr_avl, updated, g_subchannel_index);
210
+ c = constructed;
211
+ }
212
+ gpr_mu_unlock(&g_mu);
213
+
214
+ gpr_avl_unref(updated);
215
+ }
216
+ gpr_avl_unref(index);
217
+ }
218
+
219
+ leave_ctx(exec_ctx);
220
+
221
+ return c;
222
+ }
223
+
224
+ void grpc_subchannel_index_unregister(grpc_exec_ctx *exec_ctx,
225
+ grpc_subchannel_key *key,
226
+ grpc_subchannel *constructed) {
227
+ enter_ctx(exec_ctx);
228
+
229
+ bool done = false;
230
+ while (!done) {
231
+ // Compare and swap loop:
232
+ // - take a reference to the current index
233
+ gpr_mu_lock(&g_mu);
234
+ gpr_avl index = gpr_avl_ref(g_subchannel_index);
235
+ gpr_mu_unlock(&g_mu);
236
+
237
+ // Check to see if this key still refers to the previously
238
+ // registered subchannel
239
+ grpc_subchannel *c = gpr_avl_get(index, key);
240
+ if (c != constructed) {
241
+ gpr_avl_unref(index);
242
+ break;
243
+ }
244
+
245
+ // compare and swap the update (some other thread may have
246
+ // mutated the index behind us)
247
+ gpr_avl updated = gpr_avl_remove(gpr_avl_ref(index), key);
248
+
249
+ gpr_mu_lock(&g_mu);
250
+ if (index.root == g_subchannel_index.root) {
251
+ GPR_SWAP(gpr_avl, updated, g_subchannel_index);
252
+ done = true;
253
+ }
254
+ gpr_mu_unlock(&g_mu);
255
+
256
+ gpr_avl_unref(updated);
257
+ gpr_avl_unref(index);
258
+ }
259
+
260
+ leave_ctx(exec_ctx);
261
+ }