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.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/Makefile +5783 -22121
- data/include/grpc/byte_buffer.h +2 -83
- data/include/grpc/census.h +173 -121
- data/include/grpc/compression.h +14 -38
- data/include/grpc/grpc.h +85 -434
- data/include/grpc/grpc_security.h +76 -46
- data/include/grpc/grpc_zookeeper.h +1 -1
- data/include/grpc/impl/codegen/alloc.h +74 -0
- data/include/grpc/impl/codegen/atm.h +92 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
- data/include/grpc/impl/codegen/atm_win32.h +125 -0
- data/include/grpc/impl/codegen/byte_buffer.h +121 -0
- data/include/grpc/impl/codegen/compression_types.h +73 -0
- data/include/grpc/impl/codegen/connectivity_state.h +59 -0
- data/include/grpc/impl/codegen/grpc_types.h +378 -0
- data/include/grpc/impl/codegen/log.h +110 -0
- data/include/grpc/impl/codegen/port_platform.h +370 -0
- data/include/grpc/impl/codegen/propagation_bits.h +67 -0
- data/include/grpc/impl/codegen/slice.h +182 -0
- data/include/grpc/impl/codegen/slice_buffer.h +105 -0
- data/include/grpc/impl/codegen/status.h +163 -0
- data/include/grpc/impl/codegen/sync.h +316 -0
- data/include/grpc/impl/codegen/sync_generic.h +55 -0
- data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
- data/include/grpc/impl/codegen/sync_win32.h +49 -0
- data/include/grpc/impl/codegen/time.h +130 -0
- data/include/grpc/status.h +2 -126
- data/include/grpc/support/alloc.h +2 -35
- data/include/grpc/support/atm.h +2 -55
- data/include/grpc/support/atm_gcc_atomic.h +5 -38
- data/include/grpc/support/atm_gcc_sync.h +2 -50
- data/include/grpc/support/atm_win32.h +2 -88
- data/include/grpc/support/avl.h +10 -9
- data/include/grpc/support/cmdline.h +15 -13
- data/include/grpc/support/cpu.h +5 -3
- data/include/grpc/support/histogram.h +23 -20
- data/include/grpc/support/host_port.h +5 -3
- data/include/grpc/support/log.h +2 -71
- data/include/grpc/support/log_win32.h +2 -2
- data/include/grpc/support/port_platform.h +2 -319
- data/include/grpc/support/slice.h +2 -145
- data/include/grpc/support/slice_buffer.h +2 -65
- data/include/grpc/support/string_util.h +3 -3
- data/include/grpc/support/subprocess.h +8 -6
- data/include/grpc/support/sync.h +2 -278
- data/include/grpc/support/sync_generic.h +2 -18
- data/include/grpc/support/sync_posix.h +2 -10
- data/include/grpc/support/sync_win32.h +2 -12
- data/include/grpc/support/thd.h +11 -11
- data/include/grpc/support/time.h +2 -91
- data/include/grpc/support/tls.h +1 -1
- data/include/grpc/support/tls_gcc.h +1 -1
- data/include/grpc/support/tls_msvc.h +1 -1
- data/include/grpc/support/tls_pthread.h +2 -2
- data/include/grpc/support/useful.h +3 -1
- data/src/boringssl/err_data.c +1252 -0
- data/src/core/census/context.c +471 -8
- data/src/core/census/grpc_filter.c +5 -5
- data/src/core/census/initialize.c +4 -7
- data/src/core/census/mlog.c +600 -0
- data/src/core/census/mlog.h +95 -0
- data/src/core/census/operation.c +2 -2
- data/src/core/census/placeholders.c +109 -0
- data/src/core/census/rpc_metric_id.h +6 -6
- data/src/core/census/tracing.c +1 -1
- data/src/core/channel/channel_args.c +71 -9
- data/src/core/channel/channel_args.h +7 -1
- data/src/core/channel/channel_stack.c +1 -1
- data/src/core/channel/client_channel.c +33 -30
- data/src/core/channel/client_uchannel.c +3 -3
- data/src/core/channel/compress_filter.c +8 -8
- data/src/core/channel/http_client_filter.c +4 -4
- data/src/core/channel/http_server_filter.c +11 -11
- data/src/core/channel/subchannel_call_holder.c +11 -11
- data/src/core/client_config/connector.c +3 -2
- data/src/core/client_config/connector.h +2 -2
- data/src/core/client_config/lb_policies/load_balancer_api.c +163 -0
- data/src/core/client_config/lb_policies/load_balancer_api.h +85 -0
- data/src/core/client_config/lb_policies/pick_first.c +57 -40
- data/src/core/client_config/lb_policies/round_robin.c +14 -15
- data/src/core/client_config/lb_policy.c +3 -3
- data/src/core/client_config/lb_policy.h +3 -2
- data/src/core/client_config/resolvers/dns_resolver.c +3 -3
- data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
- data/src/core/client_config/subchannel.c +84 -39
- data/src/core/client_config/subchannel.h +15 -6
- data/src/core/client_config/subchannel_index.c +261 -0
- data/src/core/client_config/subchannel_index.h +77 -0
- data/src/core/compression/{algorithm.c → compression_algorithm.c} +3 -3
- data/src/core/httpcli/format_request.c +1 -1
- data/src/core/httpcli/httpcli.c +18 -16
- data/src/core/httpcli/httpcli.h +3 -2
- data/src/core/httpcli/httpcli_security_connector.c +9 -10
- data/src/core/httpcli/parser.c +7 -7
- data/src/core/httpcli/parser.h +1 -1
- data/src/core/iomgr/closure.c +7 -7
- data/src/core/iomgr/closure.h +6 -5
- data/src/core/iomgr/exec_ctx.c +12 -8
- data/src/core/iomgr/exec_ctx.h +12 -5
- data/src/core/iomgr/executor.c +4 -4
- data/src/core/iomgr/executor.h +2 -2
- data/src/core/iomgr/fd_posix.c +32 -19
- data/src/core/iomgr/fd_posix.h +7 -4
- data/src/core/iomgr/iocp_windows.c +7 -9
- data/src/core/iomgr/iomgr.c +2 -2
- data/src/core/iomgr/pollset.h +9 -10
- data/src/core/iomgr/pollset_multipoller_with_epoll.c +71 -5
- data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +9 -5
- data/src/core/iomgr/pollset_posix.c +44 -49
- data/src/core/iomgr/pollset_posix.h +14 -8
- data/src/core/iomgr/pollset_set.h +3 -9
- data/src/core/iomgr/pollset_set_posix.c +23 -3
- data/src/core/iomgr/pollset_set_posix.h +2 -18
- data/src/core/iomgr/pollset_set_windows.c +3 -3
- data/src/core/iomgr/pollset_set_windows.h +2 -2
- data/src/core/iomgr/pollset_windows.c +29 -37
- data/src/core/iomgr/pollset_windows.h +1 -5
- data/src/core/iomgr/resolve_address_posix.c +2 -2
- data/src/core/iomgr/resolve_address_windows.c +2 -2
- data/src/core/iomgr/sockaddr_utils.c +6 -6
- data/src/core/iomgr/sockaddr_win32.h +1 -6
- data/src/core/iomgr/tcp_client_posix.c +14 -12
- data/src/core/iomgr/tcp_client_windows.c +4 -4
- data/src/core/iomgr/tcp_posix.c +18 -10
- data/src/core/iomgr/tcp_posix.h +7 -1
- data/src/core/iomgr/tcp_server.h +40 -20
- data/src/core/iomgr/tcp_server_posix.c +106 -49
- data/src/core/iomgr/tcp_server_windows.c +98 -49
- data/src/core/iomgr/tcp_windows.c +11 -15
- data/src/core/iomgr/timer.c +10 -11
- data/src/core/iomgr/timer.h +22 -2
- data/src/core/iomgr/timer_heap.c +10 -10
- data/src/core/iomgr/timer_heap.h +2 -2
- data/src/core/iomgr/udp_server.c +7 -16
- data/src/core/iomgr/udp_server.h +2 -9
- data/src/core/iomgr/workqueue.h +2 -4
- data/src/core/iomgr/workqueue_posix.c +4 -3
- data/src/core/iomgr/workqueue_posix.h +3 -1
- data/src/core/json/json_reader.c +11 -12
- data/src/core/json/json_reader.h +4 -4
- data/src/core/json/json_string.c +19 -19
- data/src/core/json/json_writer.c +7 -9
- data/src/core/profiling/basic_timers.c +1 -1
- data/src/core/proto/grpc/lb/v0/load_balancer.pb.c +119 -0
- data/src/core/proto/grpc/lb/v0/load_balancer.pb.h +182 -0
- data/src/core/security/{base64.c → b64.c} +10 -10
- data/src/core/security/{base64.h → b64.h} +1 -1
- data/src/core/security/client_auth_filter.c +4 -5
- data/src/core/security/credentials.c +17 -10
- data/src/core/security/credentials.h +3 -3
- data/src/core/security/google_default_credentials.c +27 -22
- data/src/core/security/handshake.c +21 -12
- data/src/core/security/handshake.h +2 -1
- data/src/core/security/json_token.c +14 -8
- data/src/core/security/jwt_verifier.c +4 -3
- data/src/core/security/secure_endpoint.c +16 -16
- data/src/core/security/security_connector.c +131 -81
- data/src/core/security/security_connector.h +47 -27
- data/src/core/security/security_context.c +8 -3
- data/src/core/security/server_auth_filter.c +5 -5
- data/src/core/security/server_secure_chttp2.c +36 -37
- data/src/core/statistics/census_interface.h +2 -2
- data/src/core/statistics/census_rpc_stats.h +3 -3
- data/src/core/support/alloc.c +1 -1
- data/src/core/support/avl.c +2 -2
- data/src/core/support/cpu_posix.c +2 -2
- data/src/core/support/env_linux.c +28 -1
- data/src/core/support/env_win32.c +15 -7
- data/src/core/support/histogram.c +5 -5
- data/src/core/support/{file.c → load_file.c} +2 -2
- data/src/core/support/{file.h → load_file.h} +4 -12
- data/src/core/support/log_posix.c +1 -1
- data/src/core/support/log_win32.c +4 -3
- data/src/core/support/murmur_hash.c +11 -11
- data/src/core/support/murmur_hash.h +1 -1
- data/src/core/support/slice.c +11 -11
- data/src/core/support/slice_buffer.c +6 -6
- data/src/core/support/stack_lockfree.c +20 -10
- data/src/core/support/string.c +15 -15
- data/src/core/support/string.h +5 -5
- data/src/core/support/string_win32.c +5 -5
- data/src/core/support/subprocess_windows.c +141 -0
- data/src/core/support/sync.c +4 -4
- data/src/core/support/sync_posix.c +2 -2
- data/src/core/support/sync_win32.c +10 -5
- data/src/core/support/time.c +29 -29
- data/src/core/support/time_posix.c +15 -6
- data/src/core/support/time_precise.c +2 -2
- data/src/core/support/time_win32.c +18 -9
- data/src/core/support/tls_pthread.c +1 -1
- data/src/core/support/tmpfile.h +55 -0
- data/src/core/support/{file_posix.c → tmpfile_posix.c} +2 -2
- data/src/core/support/{file_win32.c → tmpfile_win32.c} +2 -2
- data/src/core/support/wrap_memcpy.c +53 -0
- data/src/core/surface/alarm.c +84 -0
- data/src/core/surface/byte_buffer_reader.c +1 -1
- data/src/core/surface/call.c +175 -116
- data/src/core/surface/call.h +2 -2
- data/src/core/surface/call_test_only.h +2 -2
- data/src/core/surface/channel.c +9 -9
- data/src/core/surface/channel.h +1 -1
- data/src/core/surface/channel_connectivity.c +3 -3
- data/src/core/surface/channel_create.c +4 -4
- data/src/core/surface/channel_ping.c +2 -2
- data/src/core/surface/completion_queue.c +84 -53
- data/src/core/surface/completion_queue.h +1 -1
- data/src/core/surface/init.c +11 -5
- data/src/core/surface/lame_client.c +2 -3
- data/src/core/surface/secure_channel_create.c +9 -10
- data/src/core/surface/server.c +30 -30
- data/src/core/surface/server_chttp2.c +8 -8
- data/src/core/surface/server_create.c +1 -4
- data/src/core/surface/validate_metadata.c +4 -4
- data/src/core/surface/version.c +2 -2
- data/src/core/transport/byte_stream.c +8 -6
- data/src/core/transport/byte_stream.h +6 -5
- data/src/core/transport/chttp2/bin_encoder.c +29 -29
- data/src/core/transport/chttp2/frame_data.c +29 -26
- data/src/core/transport/chttp2/frame_data.h +6 -6
- data/src/core/transport/chttp2/frame_goaway.c +30 -30
- data/src/core/transport/chttp2/frame_goaway.h +6 -6
- data/src/core/transport/chttp2/frame_ping.c +6 -6
- data/src/core/transport/chttp2/frame_ping.h +5 -5
- data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
- data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
- data/src/core/transport/chttp2/frame_settings.c +30 -30
- data/src/core/transport/chttp2/frame_settings.h +13 -13
- data/src/core/transport/chttp2/frame_window_update.c +17 -18
- data/src/core/transport/chttp2/frame_window_update.h +5 -7
- data/src/core/transport/chttp2/hpack_encoder.c +69 -73
- data/src/core/transport/chttp2/hpack_encoder.h +16 -16
- data/src/core/transport/chttp2/hpack_parser.c +167 -167
- data/src/core/transport/chttp2/hpack_parser.h +16 -16
- data/src/core/transport/chttp2/hpack_table.c +13 -13
- data/src/core/transport/chttp2/hpack_table.h +11 -11
- data/src/core/transport/chttp2/internal.h +103 -87
- data/src/core/transport/chttp2/parsing.c +25 -25
- data/src/core/transport/chttp2/stream_lists.c +38 -1
- data/src/core/transport/chttp2/stream_map.c +13 -14
- data/src/core/transport/chttp2/stream_map.h +6 -7
- data/src/core/transport/chttp2/timeout_encoding.c +19 -16
- data/src/core/transport/chttp2/varint.c +8 -9
- data/src/core/transport/chttp2/varint.h +7 -8
- data/src/core/transport/chttp2/writing.c +25 -22
- data/src/core/transport/chttp2_transport.c +147 -100
- data/src/core/transport/connectivity_state.c +6 -6
- data/src/core/transport/metadata.c +18 -18
- data/src/core/transport/metadata.h +5 -5
- data/src/core/transport/static_metadata.c +32 -33
- data/src/core/transport/static_metadata.h +8 -8
- data/src/core/transport/transport.c +6 -5
- data/src/core/transport/transport.h +17 -1
- data/src/core/tsi/fake_transport_security.c +7 -7
- data/src/core/tsi/ssl_transport_security.c +6 -4
- data/src/core/{iomgr/timer_internal.h → tsi/ssl_types.h} +19 -25
- data/src/ruby/ext/grpc/extconf.rb +52 -14
- data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
- data/src/ruby/ext/grpc/rb_call.c +7 -3
- data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
- data/src/ruby/ext/grpc/rb_channel.c +4 -2
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
- data/src/ruby/ext/grpc/rb_grpc.c +28 -19
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +562 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +846 -0
- data/src/ruby/ext/grpc/rb_loader.c +72 -0
- data/src/ruby/ext/grpc/rb_loader.h +40 -0
- data/src/ruby/ext/grpc/rb_server.c +3 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
- data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
- data/src/ruby/lib/grpc/errors.rb +2 -2
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/grpc.rb +34 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +2 -2
- data/src/ruby/pb/generate_proto_ruby.sh +2 -2
- data/src/ruby/pb/grpc/health/checker.rb +11 -11
- data/src/ruby/pb/grpc/health/v1/health.rb +28 -0
- data/src/ruby/pb/grpc/health/{v1alpha → v1}/health_services.rb +4 -4
- data/src/ruby/spec/client_server_spec.rb +2 -1
- data/src/ruby/spec/pb/health/checker_spec.rb +23 -37
- data/third_party/boringssl/crypto/aes/aes.c +1142 -0
- data/third_party/boringssl/crypto/aes/internal.h +87 -0
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
- data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
- data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
- data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
- data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
- data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
- data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
- data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
- data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
- data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
- data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
- data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
- data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
- data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
- data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
- data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
- data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
- data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
- data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
- data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
- data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
- data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
- data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
- data/third_party/boringssl/crypto/base64/base64.c +478 -0
- data/third_party/boringssl/crypto/bio/bio.c +608 -0
- data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
- data/third_party/boringssl/crypto/bio/buffer.c +496 -0
- data/third_party/boringssl/crypto/bio/connect.c +544 -0
- data/third_party/boringssl/crypto/bio/fd.c +270 -0
- data/third_party/boringssl/crypto/bio/file.c +349 -0
- data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
- data/third_party/boringssl/crypto/bio/internal.h +108 -0
- data/third_party/boringssl/crypto/bio/pair.c +803 -0
- data/third_party/boringssl/crypto/bio/printf.c +119 -0
- data/third_party/boringssl/crypto/bio/socket.c +195 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
- data/third_party/boringssl/crypto/bn/add.c +377 -0
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
- data/third_party/boringssl/crypto/bn/bn.c +341 -0
- data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
- data/third_party/boringssl/crypto/bn/cmp.c +200 -0
- data/third_party/boringssl/crypto/bn/convert.c +597 -0
- data/third_party/boringssl/crypto/bn/ctx.c +311 -0
- data/third_party/boringssl/crypto/bn/div.c +625 -0
- data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
- data/third_party/boringssl/crypto/bn/gcd.c +711 -0
- data/third_party/boringssl/crypto/bn/generic.c +1019 -0
- data/third_party/boringssl/crypto/bn/internal.h +294 -0
- data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
- data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
- data/third_party/boringssl/crypto/bn/mul.c +888 -0
- data/third_party/boringssl/crypto/bn/prime.c +845 -0
- data/third_party/boringssl/crypto/bn/random.c +326 -0
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
- data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
- data/third_party/boringssl/crypto/bn/shift.c +299 -0
- data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
- data/third_party/boringssl/crypto/buf/buf.c +235 -0
- data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
- data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
- data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
- data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
- data/third_party/boringssl/crypto/cipher/aead.c +167 -0
- data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
- data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
- data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
- data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
- data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
- data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
- data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
- data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
- data/third_party/boringssl/crypto/cipher/internal.h +164 -0
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
- data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
- data/third_party/boringssl/crypto/conf/conf.c +778 -0
- data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
- data/third_party/boringssl/crypto/conf/internal.h +31 -0
- data/third_party/boringssl/crypto/cpu-arm.c +199 -0
- data/third_party/boringssl/crypto/cpu-intel.c +261 -0
- data/third_party/boringssl/crypto/crypto.c +140 -0
- data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
- data/third_party/boringssl/crypto/des/des.c +771 -0
- data/third_party/boringssl/crypto/des/internal.h +212 -0
- data/third_party/boringssl/crypto/dh/check.c +180 -0
- data/third_party/boringssl/crypto/dh/dh.c +463 -0
- data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
- data/third_party/boringssl/crypto/dh/internal.h +80 -0
- data/third_party/boringssl/crypto/dh/params.c +301 -0
- data/third_party/boringssl/crypto/digest/digest.c +248 -0
- data/third_party/boringssl/crypto/digest/digests.c +321 -0
- data/third_party/boringssl/crypto/digest/internal.h +112 -0
- data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
- data/third_party/boringssl/crypto/directory.h +66 -0
- data/third_party/boringssl/crypto/directory_posix.c +108 -0
- data/third_party/boringssl/crypto/directory_win.c +144 -0
- data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
- data/third_party/boringssl/crypto/dsa/internal.h +78 -0
- data/third_party/boringssl/crypto/ec/ec.c +889 -0
- data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
- data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
- data/third_party/boringssl/crypto/ec/internal.h +318 -0
- data/third_party/boringssl/crypto/ec/oct.c +416 -0
- data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
- data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
- data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
- data/third_party/boringssl/crypto/ec/simple.c +1313 -0
- data/third_party/boringssl/crypto/ec/util-64.c +183 -0
- data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
- data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
- data/third_party/boringssl/crypto/engine/engine.c +96 -0
- data/third_party/boringssl/crypto/err/err.c +756 -0
- data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
- data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
- data/third_party/boringssl/crypto/evp/evp.c +411 -0
- data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
- data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
- data/third_party/boringssl/crypto/evp/internal.h +278 -0
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
- data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
- data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
- data/third_party/boringssl/crypto/evp/sign.c +151 -0
- data/third_party/boringssl/crypto/ex_data.c +294 -0
- data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
- data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
- data/third_party/boringssl/crypto/internal.h +532 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
- data/third_party/boringssl/crypto/md4/md4.c +225 -0
- data/third_party/boringssl/crypto/md5/md5.c +275 -0
- data/third_party/boringssl/crypto/mem.c +200 -0
- data/third_party/boringssl/crypto/modes/cbc.c +216 -0
- data/third_party/boringssl/crypto/modes/cfb.c +231 -0
- data/third_party/boringssl/crypto/modes/ctr.c +226 -0
- data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
- data/third_party/boringssl/crypto/modes/internal.h +370 -0
- data/third_party/boringssl/crypto/modes/ofb.c +108 -0
- data/third_party/boringssl/crypto/obj/obj.c +664 -0
- data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
- data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
- data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
- data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
- data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
- data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
- data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
- data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
- data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
- data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
- data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
- data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
- data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
- data/third_party/boringssl/crypto/rand/internal.h +32 -0
- data/third_party/boringssl/crypto/rand/rand.c +239 -0
- data/third_party/boringssl/crypto/rand/urandom.c +223 -0
- data/third_party/boringssl/crypto/rand/windows.c +56 -0
- data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
- data/third_party/boringssl/crypto/refcount_c11.c +67 -0
- data/third_party/boringssl/crypto/refcount_lock.c +53 -0
- data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
- data/third_party/boringssl/crypto/rsa/internal.h +164 -0
- data/third_party/boringssl/crypto/rsa/padding.c +711 -0
- data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
- data/third_party/boringssl/crypto/sha/sha1.c +337 -0
- data/third_party/boringssl/crypto/sha/sha256.c +327 -0
- data/third_party/boringssl/crypto/sha/sha512.c +607 -0
- data/third_party/boringssl/crypto/stack/stack.c +386 -0
- data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
- data/third_party/boringssl/crypto/test/test_util.h +35 -0
- data/third_party/boringssl/crypto/thread.c +101 -0
- data/third_party/boringssl/crypto/thread_none.c +55 -0
- data/third_party/boringssl/crypto/thread_pthread.c +167 -0
- data/third_party/boringssl/crypto/thread_win.c +282 -0
- data/third_party/boringssl/crypto/time_support.c +212 -0
- data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
- data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
- data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
- data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
- data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
- data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
- data/third_party/boringssl/crypto/x509/by_file.c +295 -0
- data/third_party/boringssl/crypto/x509/charmap.h +15 -0
- data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
- data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
- data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
- data/third_party/boringssl/crypto/x509/t_req.c +246 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
- data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
- data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
- data/third_party/boringssl/crypto/x509/x509.c +152 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
- data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
- data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
- data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
- data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
- data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
- data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
- data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
- data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
- data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
- data/third_party/boringssl/crypto/x509/x509name.c +381 -0
- data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
- data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
- data/third_party/boringssl/crypto/x509/x509type.c +128 -0
- data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
- data/third_party/boringssl/crypto/x509/x_all.c +547 -0
- data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
- data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
- data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
- data/third_party/boringssl/crypto/x509/x_info.c +95 -0
- data/third_party/boringssl/crypto/x509/x_name.c +538 -0
- data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
- data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
- data/third_party/boringssl/crypto/x509/x_req.c +112 -0
- data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
- data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
- data/third_party/boringssl/crypto/x509/x_val.c +69 -0
- data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
- data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
- data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
- data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
- data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
- data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
- data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
- data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
- data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
- data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
- data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
- data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
- data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
- data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
- data/third_party/boringssl/include/openssl/aead.h +346 -0
- data/third_party/boringssl/include/openssl/aes.h +158 -0
- data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
- data/third_party/boringssl/include/openssl/asn1.h +1168 -0
- data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
- data/third_party/boringssl/include/openssl/asn1t.h +906 -0
- data/third_party/boringssl/include/openssl/base.h +261 -0
- data/third_party/boringssl/include/openssl/base64.h +184 -0
- data/third_party/boringssl/include/openssl/bio.h +902 -0
- data/third_party/boringssl/include/openssl/blowfish.h +93 -0
- data/third_party/boringssl/include/openssl/bn.h +885 -0
- data/third_party/boringssl/include/openssl/buf.h +118 -0
- data/third_party/boringssl/include/openssl/buffer.h +18 -0
- data/third_party/boringssl/include/openssl/bytestring.h +360 -0
- data/third_party/boringssl/include/openssl/cast.h +96 -0
- data/third_party/boringssl/include/openssl/chacha.h +37 -0
- data/third_party/boringssl/include/openssl/cipher.h +571 -0
- data/third_party/boringssl/include/openssl/cmac.h +76 -0
- data/third_party/boringssl/include/openssl/conf.h +145 -0
- data/third_party/boringssl/include/openssl/cpu.h +184 -0
- data/third_party/boringssl/include/openssl/crypto.h +68 -0
- data/third_party/boringssl/include/openssl/curve25519.h +88 -0
- data/third_party/boringssl/include/openssl/des.h +177 -0
- data/third_party/boringssl/include/openssl/dh.h +238 -0
- data/third_party/boringssl/include/openssl/digest.h +258 -0
- data/third_party/boringssl/include/openssl/dsa.h +343 -0
- data/third_party/boringssl/include/openssl/dtls1.h +16 -0
- data/third_party/boringssl/include/openssl/ec.h +355 -0
- data/third_party/boringssl/include/openssl/ec_key.h +280 -0
- data/third_party/boringssl/include/openssl/ecdh.h +102 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
- data/third_party/boringssl/include/openssl/engine.h +98 -0
- data/third_party/boringssl/include/openssl/err.h +487 -0
- data/third_party/boringssl/include/openssl/evp.h +750 -0
- data/third_party/boringssl/include/openssl/ex_data.h +213 -0
- data/third_party/boringssl/include/openssl/hkdf.h +44 -0
- data/third_party/boringssl/include/openssl/hmac.h +160 -0
- data/third_party/boringssl/include/openssl/lhash.h +192 -0
- data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
- data/third_party/boringssl/include/openssl/md4.h +102 -0
- data/third_party/boringssl/include/openssl/md5.h +107 -0
- data/third_party/boringssl/include/openssl/mem.h +140 -0
- data/third_party/boringssl/include/openssl/obj.h +198 -0
- data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
- data/third_party/boringssl/include/openssl/objects.h +18 -0
- data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
- data/third_party/boringssl/include/openssl/opensslv.h +18 -0
- data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
- data/third_party/boringssl/include/openssl/pem.h +521 -0
- data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
- data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
- data/third_party/boringssl/include/openssl/poly1305.h +51 -0
- data/third_party/boringssl/include/openssl/pqueue.h +146 -0
- data/third_party/boringssl/include/openssl/rand.h +113 -0
- data/third_party/boringssl/include/openssl/rc4.h +90 -0
- data/third_party/boringssl/include/openssl/rsa.h +637 -0
- data/third_party/boringssl/include/openssl/safestack.h +16 -0
- data/third_party/boringssl/include/openssl/sha.h +256 -0
- data/third_party/boringssl/include/openssl/srtp.h +18 -0
- data/third_party/boringssl/include/openssl/ssl.h +4466 -0
- data/third_party/boringssl/include/openssl/ssl3.h +441 -0
- data/third_party/boringssl/include/openssl/stack.h +298 -0
- data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
- data/third_party/boringssl/include/openssl/thread.h +173 -0
- data/third_party/boringssl/include/openssl/time_support.h +90 -0
- data/third_party/boringssl/include/openssl/tls1.h +653 -0
- data/third_party/boringssl/include/openssl/type_check.h +91 -0
- data/third_party/boringssl/include/openssl/x509.h +1258 -0
- data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
- data/third_party/boringssl/include/openssl/x509v3.h +798 -0
- data/third_party/boringssl/ssl/custom_extensions.c +257 -0
- data/third_party/boringssl/ssl/d1_both.c +880 -0
- data/third_party/boringssl/ssl/d1_clnt.c +566 -0
- data/third_party/boringssl/ssl/d1_lib.c +340 -0
- data/third_party/boringssl/ssl/d1_meth.c +130 -0
- data/third_party/boringssl/ssl/d1_pkt.c +578 -0
- data/third_party/boringssl/ssl/d1_srtp.c +234 -0
- data/third_party/boringssl/ssl/d1_srvr.c +485 -0
- data/third_party/boringssl/ssl/dtls_record.c +308 -0
- data/third_party/boringssl/ssl/internal.h +1276 -0
- data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
- data/third_party/boringssl/ssl/s3_both.c +571 -0
- data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
- data/third_party/boringssl/ssl/s3_enc.c +494 -0
- data/third_party/boringssl/ssl/s3_lib.c +587 -0
- data/third_party/boringssl/ssl/s3_meth.c +166 -0
- data/third_party/boringssl/ssl/s3_pkt.c +732 -0
- data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
- data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
- data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
- data/third_party/boringssl/ssl/ssl_cert.c +539 -0
- data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
- data/third_party/boringssl/ssl/ssl_file.c +633 -0
- data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
- data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
- data/third_party/boringssl/ssl/ssl_session.c +764 -0
- data/third_party/boringssl/ssl/ssl_stat.c +591 -0
- data/third_party/boringssl/ssl/t1_enc.c +708 -0
- data/third_party/boringssl/ssl/t1_lib.c +2905 -0
- data/third_party/boringssl/ssl/test/async_bio.h +45 -0
- data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
- data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
- data/third_party/boringssl/ssl/test/test_config.h +108 -0
- data/third_party/boringssl/ssl/tls_record.c +342 -0
- data/third_party/nanopb/pb.h +547 -0
- data/third_party/nanopb/pb_common.c +97 -0
- data/third_party/nanopb/pb_common.h +42 -0
- data/third_party/nanopb/pb_decode.c +1319 -0
- data/third_party/nanopb/pb_decode.h +149 -0
- data/third_party/nanopb/pb_encode.c +690 -0
- data/third_party/nanopb/pb_encode.h +154 -0
- data/third_party/zlib/adler32.c +179 -0
- data/third_party/zlib/compress.c +80 -0
- data/third_party/zlib/crc32.c +425 -0
- data/third_party/zlib/crc32.h +441 -0
- data/third_party/zlib/deflate.c +1967 -0
- data/third_party/zlib/deflate.h +346 -0
- data/third_party/zlib/gzclose.c +25 -0
- data/third_party/zlib/gzguts.h +209 -0
- data/third_party/zlib/gzlib.c +634 -0
- data/third_party/zlib/gzread.c +594 -0
- data/third_party/zlib/gzwrite.c +577 -0
- data/third_party/zlib/infback.c +640 -0
- data/third_party/zlib/inffast.c +340 -0
- data/third_party/zlib/inffast.h +11 -0
- data/third_party/zlib/inffixed.h +94 -0
- data/third_party/zlib/inflate.c +1512 -0
- data/third_party/zlib/inflate.h +122 -0
- data/third_party/zlib/inftrees.c +306 -0
- data/third_party/zlib/inftrees.h +62 -0
- data/third_party/zlib/trees.c +1226 -0
- data/third_party/zlib/trees.h +128 -0
- data/third_party/zlib/uncompr.c +59 -0
- data/third_party/zlib/zconf.h +511 -0
- data/third_party/zlib/zlib.h +1768 -0
- data/third_party/zlib/zutil.c +324 -0
- data/third_party/zlib/zutil.h +253 -0
- metadata +504 -20
- data/Rakefile +0 -63
- 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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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
|
-
|
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
|
-
|
233
|
-
|
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
|
-
|
295
|
+
true, NULL);
|
272
296
|
}
|
273
297
|
}
|
274
298
|
|
275
|
-
static
|
276
|
-
return (
|
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(
|
303
|
+
grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
|
304
|
+
grpc_connector *connector,
|
280
305
|
grpc_subchannel_args *args) {
|
281
|
-
|
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->
|
288
|
-
|
289
|
-
|
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
|
-
|
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
|
-
|
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 =
|
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
|
-
|
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,
|
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,
|
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
|
-
|
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
|
-
|
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
|
-
|
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,
|
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) % ((
|
545
|
-
return c->random / (double)((
|
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
|
-
|
552
|
-
|
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
|
-
(
|
571
|
-
|
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
|
-
(
|
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,
|
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
|
-
|
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
|
-
|
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
|
-
|
83
|
-
|
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
|
-
|
88
|
-
|
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(
|
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
|
+
}
|