grpc 1.0.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +3696 -867
- data/etc/roots.pem +39 -111
- data/include/grpc/byte_buffer.h +64 -1
- data/include/grpc/census.h +40 -96
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +42 -7
- data/include/grpc/grpc_posix.h +8 -5
- data/include/grpc/impl/codegen/atm.h +3 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
- data/include/grpc/impl/codegen/compression_types.h +1 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
- data/include/grpc/impl/codegen/gpr_slice.h +84 -0
- data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
- data/include/grpc/impl/codegen/grpc_types.h +91 -9
- data/include/grpc/impl/codegen/port_platform.h +25 -92
- data/include/grpc/impl/codegen/slice.h +54 -97
- data/include/grpc/impl/codegen/sync.h +0 -253
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice.h +132 -0
- data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
- data/include/grpc/support/alloc.h +40 -1
- data/include/grpc/support/log.h +80 -1
- data/include/grpc/support/log_windows.h +2 -0
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +252 -0
- data/include/grpc/support/time.h +67 -1
- data/src/boringssl/err_data.c +639 -627
- data/src/core/ext/census/base_resources.c +71 -0
- data/src/core/ext/census/base_resources.h +39 -0
- data/src/core/ext/census/gen/census.pb.c +26 -29
- data/src/core/ext/census/gen/census.pb.h +68 -67
- data/src/core/ext/census/gen/trace_context.pb.c +81 -0
- data/src/core/ext/census/gen/trace_context.pb.h +99 -0
- data/src/core/ext/census/grpc_filter.c +22 -16
- data/src/core/ext/census/grpc_plugin.c +2 -1
- data/src/core/ext/census/initialize.c +16 -4
- data/src/core/ext/census/mlog.h +1 -1
- data/src/core/ext/census/placeholders.c +0 -45
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +68 -0
- data/src/core/ext/census/tracing.c +8 -2
- data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
- data/src/core/ext/client_channel/client_channel.c +1218 -0
- data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
- data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
- data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
- data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
- data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
- data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
- data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
- data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
- data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
- data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
- data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
- data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
- data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
- data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
- data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
- data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
- data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
- data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
- data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
- data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
- data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
- data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
- data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
- data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
- data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
- data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
- data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
- data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
- data/src/core/ext/load_reporting/load_reporting.c +7 -56
- data/src/core/ext/load_reporting/load_reporting.h +41 -28
- data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
- data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
- data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
- data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
- data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
- data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
- data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
- data/src/core/lib/channel/channel_args.c +70 -13
- data/src/core/lib/channel/channel_args.h +28 -2
- data/src/core/lib/channel/channel_stack.c +77 -28
- data/src/core/lib/channel/channel_stack.h +61 -23
- data/src/core/lib/channel/channel_stack_builder.c +33 -25
- data/src/core/lib/channel/channel_stack_builder.h +17 -8
- data/src/core/lib/channel/compress_filter.c +52 -36
- data/src/core/lib/channel/connected_channel.c +20 -12
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +13 -1
- data/src/core/lib/channel/deadline_filter.c +344 -0
- data/src/core/lib/channel/deadline_filter.h +99 -0
- data/src/core/lib/channel/handshaker.c +240 -0
- data/src/core/lib/channel/handshaker.h +164 -0
- data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
- data/src/core/lib/channel/http_client_filter.c +248 -46
- data/src/core/lib/channel/http_client_filter.h +3 -0
- data/src/core/lib/channel/http_server_filter.c +136 -24
- data/src/core/lib/channel/message_size_filter.c +261 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/message_compress.c +43 -37
- data/src/core/lib/compression/message_compress.h +7 -5
- data/src/core/lib/http/format_request.c +26 -11
- data/src/core/lib/http/format_request.h +7 -5
- data/src/core/lib/http/httpcli.c +45 -27
- data/src/core/lib/http/httpcli.h +4 -4
- data/src/core/lib/http/httpcli_security_connector.c +56 -46
- data/src/core/lib/http/parser.c +17 -14
- data/src/core/lib/http/parser.h +4 -2
- data/src/core/lib/iomgr/closure.c +49 -7
- data/src/core/lib/iomgr/closure.h +56 -14
- data/src/core/lib/iomgr/combiner.c +422 -0
- data/src/core/lib/iomgr/combiner.h +64 -0
- data/src/core/lib/iomgr/endpoint.c +8 -2
- data/src/core/lib/iomgr/endpoint.h +17 -7
- data/src/core/lib/iomgr/endpoint_pair.h +3 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
- data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
- data/src/core/lib/iomgr/error.c +72 -6
- data/src/core/lib/iomgr/error.h +30 -3
- data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
- data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
- data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
- data/src/core/lib/iomgr/ev_posix.c +26 -5
- data/src/core/lib/iomgr/ev_posix.h +12 -1
- data/src/core/lib/iomgr/exec_ctx.c +27 -94
- data/src/core/lib/iomgr/exec_ctx.h +19 -22
- data/src/core/lib/iomgr/executor.c +29 -8
- data/src/core/lib/iomgr/executor.h +2 -4
- data/src/core/lib/iomgr/iocp_windows.c +3 -4
- data/src/core/lib/iomgr/iomgr.c +14 -10
- data/src/core/lib/iomgr/iomgr.h +6 -2
- data/src/core/lib/iomgr/iomgr_posix.c +2 -2
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +2 -2
- data/src/core/lib/iomgr/load_file.c +3 -3
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/network_status_tracker.c +1 -1
- data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
- data/src/core/lib/iomgr/pollset_uv.c +142 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +5 -6
- data/src/core/lib/iomgr/port.h +129 -0
- data/src/core/lib/iomgr/resolve_address.h +2 -1
- data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
- data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
- data/src/core/lib/iomgr/resource_quota.c +832 -0
- data/src/core/lib/iomgr/resource_quota.h +159 -0
- data/src/core/lib/iomgr/sockaddr.h +10 -2
- data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
- data/src/core/lib/iomgr/socket_mutator.c +98 -0
- data/src/core/lib/iomgr/socket_mutator.h +80 -0
- data/src/core/lib/iomgr/socket_utils.h +42 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
- data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
- data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
- data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
- data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
- data/src/core/lib/iomgr/socket_windows.c +14 -6
- data/src/core/lib/iomgr/socket_windows.h +1 -0
- data/src/core/lib/iomgr/tcp_client.h +8 -2
- data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
- data/src/core/lib/iomgr/tcp_posix.c +135 -56
- data/src/core/lib/iomgr/tcp_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server.h +14 -6
- data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
- data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
- data/src/core/lib/iomgr/tcp_uv.c +367 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +65 -48
- data/src/core/lib/iomgr/tcp_windows.h +3 -1
- data/src/core/lib/iomgr/timer.h +21 -21
- data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +6 -0
- data/src/core/lib/iomgr/timer_uv.c +99 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +116 -98
- data/src/core/lib/iomgr/udp_server.h +5 -3
- data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
- data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
- data/src/core/lib/iomgr/workqueue.h +12 -20
- data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
- data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
- data/src/core/lib/iomgr/workqueue_windows.c +9 -8
- data/src/core/lib/json/json.c +3 -3
- data/src/core/lib/json/json.h +11 -11
- data/src/core/lib/json/json_reader.c +9 -5
- data/src/core/lib/profiling/basic_timers.c +10 -1
- data/src/core/lib/profiling/timers.h +2 -0
- data/src/core/lib/security/context/security_context.c +13 -3
- data/src/core/lib/security/context/security_context.h +20 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.c +48 -19
- data/src/core/lib/security/credentials/credentials.h +36 -19
- data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
- data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
- data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
- data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
- data/src/core/lib/security/transport/client_auth_filter.c +33 -27
- data/src/core/lib/security/transport/secure_endpoint.c +93 -68
- data/src/core/lib/security/transport/secure_endpoint.h +2 -2
- data/src/core/lib/security/transport/security_connector.c +133 -168
- data/src/core/lib/security/transport/security_connector.h +31 -46
- data/src/core/lib/security/transport/security_handshaker.c +501 -0
- data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
- data/src/core/lib/security/transport/server_auth_filter.c +50 -38
- data/src/core/lib/security/util/b64.c +11 -8
- data/src/core/lib/security/util/b64.h +5 -4
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/{support → slice}/slice.c +81 -50
- data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.c +90 -0
- data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
- data/src/core/lib/support/backoff.c +24 -13
- data/src/core/lib/support/backoff.h +5 -2
- data/src/core/lib/support/env.h +0 -2
- data/src/core/lib/support/log.c +5 -4
- data/src/core/lib/support/log_linux.c +0 -1
- data/src/core/lib/support/log_posix.c +1 -1
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/string.c +58 -49
- data/src/core/lib/support/string.h +11 -8
- data/src/core/lib/support/subprocess_posix.c +5 -2
- data/src/core/lib/support/thd.c +1 -1
- data/src/core/lib/support/time.c +43 -79
- data/src/core/lib/support/time_posix.c +1 -1
- data/src/core/lib/support/tmpfile.h +0 -2
- data/src/core/lib/surface/alarm.c +4 -1
- data/src/core/lib/surface/byte_buffer.c +17 -11
- data/src/core/lib/surface/byte_buffer_reader.c +23 -15
- data/src/core/lib/surface/call.c +294 -276
- data/src/core/lib/surface/call.h +24 -9
- data/src/core/lib/surface/call_log_batch.c +5 -3
- data/src/core/lib/surface/channel.c +127 -111
- data/src/core/lib/surface/channel.h +14 -5
- data/src/core/lib/surface/channel_init.c +1 -1
- data/src/core/lib/surface/channel_init.h +10 -1
- data/src/core/lib/surface/channel_ping.c +7 -6
- data/src/core/lib/surface/completion_queue.c +154 -18
- data/src/core/lib/surface/completion_queue.h +5 -0
- data/src/core/lib/surface/init.c +40 -6
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.c +5 -2
- data/src/core/lib/surface/lame_client.c +28 -18
- data/src/core/lib/surface/server.c +134 -87
- data/src/core/lib/surface/server.h +8 -0
- data/src/core/lib/surface/validate_metadata.c +1 -1
- data/src/core/lib/surface/version.c +3 -1
- data/src/core/lib/transport/byte_stream.c +7 -4
- data/src/core/lib/transport/byte_stream.h +6 -10
- data/src/core/lib/transport/connectivity_state.c +21 -12
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/mdstr_hash_table.c +118 -0
- data/src/core/lib/transport/mdstr_hash_table.h +77 -0
- data/src/core/lib/transport/metadata.c +83 -60
- data/src/core/lib/transport/metadata.h +41 -23
- data/src/core/lib/transport/metadata_batch.c +17 -11
- data/src/core/lib/transport/metadata_batch.h +20 -6
- data/src/core/lib/transport/pid_controller.c +57 -0
- data/src/core/lib/transport/pid_controller.h +64 -0
- data/src/core/lib/transport/service_config.c +251 -0
- data/src/core/lib/transport/service_config.h +71 -0
- data/src/core/lib/transport/static_metadata.c +18 -16
- data/src/core/lib/transport/static_metadata.h +113 -107
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
- data/src/core/lib/transport/transport.c +84 -23
- data/src/core/lib/transport/transport.h +53 -8
- data/src/core/lib/transport/transport_impl.h +3 -0
- data/src/core/lib/transport/transport_op_string.c +92 -20
- data/src/core/lib/tsi/ssl_transport_security.c +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
- data/src/ruby/ext/grpc/extconf.rb +0 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
- data/src/ruby/ext/grpc/rb_call.c +15 -5
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
- data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
- data/src/ruby/ext/grpc/rb_grpc.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
- data/src/ruby/ext/grpc/rb_server.c +18 -12
- data/src/ruby/lib/grpc/errors.rb +154 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
- data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
- data/src/ruby/lib/grpc/generic/service.rb +3 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
- data/src/ruby/pb/test/client.rb +307 -7
- data/src/ruby/pb/test/server.rb +26 -1
- data/src/ruby/spec/compression_options_spec.rb +164 -0
- data/src/ruby/spec/error_sanity_spec.rb +64 -0
- data/src/ruby/spec/generic/active_call_spec.rb +290 -12
- data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
- data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
- data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
- data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
- data/src/ruby/spec/spec_helper.rb +2 -0
- data/third_party/boringssl/crypto/aes/aes.c +12 -12
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
- data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
- data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
- data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
- data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
- data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl/crypto/base64/base64.c +249 -285
- data/third_party/boringssl/crypto/bio/bio.c +13 -23
- data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
- data/third_party/boringssl/crypto/bio/connect.c +12 -3
- data/third_party/boringssl/crypto/bio/fd.c +22 -15
- data/third_party/boringssl/crypto/bio/file.c +2 -38
- data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
- data/third_party/boringssl/crypto/bio/internal.h +3 -0
- data/third_party/boringssl/crypto/bio/pair.c +1 -1
- data/third_party/boringssl/crypto/bio/socket.c +10 -2
- data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
- data/third_party/boringssl/crypto/bn/bn.c +38 -0
- data/third_party/boringssl/crypto/bn/cmp.c +25 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -76
- data/third_party/boringssl/crypto/bn/div.c +136 -70
- data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
- data/third_party/boringssl/crypto/bn/gcd.c +213 -296
- data/third_party/boringssl/crypto/bn/generic.c +0 -80
- data/third_party/boringssl/crypto/bn/internal.h +15 -3
- data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +2 -1
- data/third_party/boringssl/crypto/bn/prime.c +24 -8
- data/third_party/boringssl/crypto/bn/random.c +47 -33
- data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
- data/third_party/boringssl/crypto/buf/buf.c +25 -21
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
- data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
- data/third_party/boringssl/crypto/cipher/aead.c +11 -22
- data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
- data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
- data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
- data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
- data/third_party/boringssl/crypto/cipher/internal.h +8 -10
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
- data/third_party/boringssl/crypto/conf/conf.c +2 -1
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
- data/third_party/boringssl/crypto/cpu-arm.c +0 -161
- data/third_party/boringssl/crypto/cpu-intel.c +5 -3
- data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
- data/third_party/boringssl/crypto/crypto.c +29 -7
- data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
- data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
- data/third_party/boringssl/crypto/dh/check.c +22 -6
- data/third_party/boringssl/crypto/dh/dh.c +45 -21
- data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
- data/third_party/boringssl/crypto/dh/params.c +30 -78
- data/third_party/boringssl/crypto/digest/digest.c +3 -3
- data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
- data/third_party/boringssl/crypto/ec/ec.c +84 -140
- data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
- data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
- data/third_party/boringssl/crypto/ec/internal.h +12 -36
- data/third_party/boringssl/crypto/ec/oct.c +11 -11
- data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
- data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
- data/third_party/boringssl/crypto/ec/simple.c +81 -201
- data/third_party/boringssl/crypto/ec/util-64.c +0 -74
- data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
- data/third_party/boringssl/crypto/engine/engine.c +1 -1
- data/third_party/boringssl/crypto/err/err.c +3 -3
- data/third_party/boringssl/crypto/evp/evp.c +14 -59
- data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
- data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
- data/third_party/boringssl/crypto/evp/internal.h +4 -46
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
- data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
- data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/ex_data.c +4 -6
- data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
- data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
- data/third_party/boringssl/crypto/internal.h +57 -77
- data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
- data/third_party/boringssl/crypto/md4/md4.c +9 -0
- data/third_party/boringssl/crypto/mem.c +19 -19
- data/third_party/boringssl/crypto/modes/cfb.c +5 -6
- data/third_party/boringssl/crypto/modes/ctr.c +10 -18
- data/third_party/boringssl/crypto/modes/gcm.c +100 -66
- data/third_party/boringssl/crypto/modes/internal.h +15 -27
- data/third_party/boringssl/crypto/modes/ofb.c +9 -22
- data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
- data/third_party/boringssl/crypto/newhope/internal.h +71 -0
- data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
- data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
- data/third_party/boringssl/crypto/newhope/poly.c +183 -0
- data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
- data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
- data/third_party/boringssl/crypto/obj/obj.c +111 -135
- data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
- data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
- data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
- data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/rand.c +4 -1
- data/third_party/boringssl/crypto/rand/urandom.c +5 -7
- data/third_party/boringssl/crypto/rand/windows.c +5 -8
- data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
- data/third_party/boringssl/crypto/rsa/internal.h +5 -13
- data/third_party/boringssl/crypto/rsa/padding.c +64 -63
- data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
- data/third_party/boringssl/crypto/sha/sha256.c +2 -2
- data/third_party/boringssl/crypto/sha/sha512.c +7 -7
- data/third_party/boringssl/crypto/stack/stack.c +13 -22
- data/third_party/boringssl/crypto/thread.c +21 -12
- data/third_party/boringssl/crypto/thread_none.c +6 -2
- data/third_party/boringssl/crypto/thread_pthread.c +16 -7
- data/third_party/boringssl/crypto/thread_win.c +38 -85
- data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
- data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
- data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
- data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
- data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
- data/third_party/boringssl/crypto/x509/x509.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
- data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
- data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
- data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
- data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
- data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl/crypto/x509/x_name.c +14 -17
- data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
- data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
- data/third_party/boringssl/include/openssl/aead.h +72 -73
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
- data/third_party/boringssl/include/openssl/asn1.h +103 -235
- data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
- data/third_party/boringssl/include/openssl/asn1t.h +1 -11
- data/third_party/boringssl/include/openssl/base.h +145 -3
- data/third_party/boringssl/include/openssl/base64.h +20 -17
- data/third_party/boringssl/include/openssl/bio.h +59 -34
- data/third_party/boringssl/include/openssl/bn.h +118 -51
- data/third_party/boringssl/include/openssl/buf.h +15 -0
- data/third_party/boringssl/include/openssl/bytestring.h +52 -4
- data/third_party/boringssl/include/openssl/chacha.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +18 -1
- data/third_party/boringssl/include/openssl/cmac.h +11 -0
- data/third_party/boringssl/include/openssl/conf.h +13 -2
- data/third_party/boringssl/include/openssl/cpu.h +20 -23
- data/third_party/boringssl/include/openssl/crypto.h +22 -1
- data/third_party/boringssl/include/openssl/curve25519.h +96 -4
- data/third_party/boringssl/include/openssl/dh.h +71 -16
- data/third_party/boringssl/include/openssl/digest.h +38 -11
- data/third_party/boringssl/include/openssl/dsa.h +40 -4
- data/third_party/boringssl/include/openssl/ec.h +44 -18
- data/third_party/boringssl/include/openssl/ec_key.h +27 -6
- data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
- data/third_party/boringssl/include/openssl/engine.h +11 -0
- data/third_party/boringssl/include/openssl/evp.h +52 -88
- data/third_party/boringssl/include/openssl/hkdf.h +24 -4
- data/third_party/boringssl/include/openssl/hmac.h +20 -6
- data/third_party/boringssl/include/openssl/md4.h +4 -0
- data/third_party/boringssl/include/openssl/mem.h +19 -0
- data/third_party/boringssl/include/openssl/newhope.h +158 -0
- data/third_party/boringssl/include/openssl/nid.h +4166 -0
- data/third_party/boringssl/include/openssl/obj.h +31 -3
- data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
- data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
- data/third_party/boringssl/include/openssl/pem.h +5 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
- data/third_party/boringssl/include/openssl/rand.h +6 -0
- data/third_party/boringssl/include/openssl/rc4.h +6 -0
- data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
- data/third_party/boringssl/include/openssl/rsa.h +127 -65
- data/third_party/boringssl/include/openssl/sha.h +14 -10
- data/third_party/boringssl/include/openssl/ssl.h +561 -275
- data/third_party/boringssl/include/openssl/ssl3.h +18 -25
- data/third_party/boringssl/include/openssl/stack.h +2 -4
- data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
- data/third_party/boringssl/include/openssl/thread.h +31 -13
- data/third_party/boringssl/include/openssl/time_support.h +1 -0
- data/third_party/boringssl/include/openssl/tls1.h +37 -33
- data/third_party/boringssl/include/openssl/x509.h +69 -26
- data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
- data/third_party/boringssl/include/openssl/x509v3.h +23 -2
- data/third_party/boringssl/ssl/custom_extensions.c +3 -5
- data/third_party/boringssl/ssl/d1_both.c +463 -499
- data/third_party/boringssl/ssl/d1_lib.c +38 -109
- data/third_party/boringssl/ssl/d1_pkt.c +173 -334
- data/third_party/boringssl/ssl/d1_srtp.c +20 -18
- data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
- data/third_party/boringssl/ssl/dtls_record.c +27 -26
- data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +712 -439
- data/third_party/boringssl/ssl/s3_both.c +445 -257
- data/third_party/boringssl/ssl/s3_enc.c +53 -36
- data/third_party/boringssl/ssl/s3_lib.c +23 -268
- data/third_party/boringssl/ssl/s3_pkt.c +168 -364
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
- data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
- data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
- data/third_party/boringssl/ssl/ssl_cert.c +324 -49
- data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
- data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
- data/third_party/boringssl/ssl/ssl_file.c +21 -68
- data/third_party/boringssl/ssl/ssl_lib.c +881 -510
- data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
- data/third_party/boringssl/ssl/ssl_session.c +324 -103
- data/third_party/boringssl/ssl/ssl_stat.c +6 -88
- data/third_party/boringssl/ssl/t1_enc.c +23 -39
- data/third_party/boringssl/ssl/t1_lib.c +1120 -622
- data/third_party/boringssl/ssl/tls13_both.c +440 -0
- data/third_party/boringssl/ssl/tls13_client.c +682 -0
- data/third_party/boringssl/ssl/tls13_enc.c +391 -0
- data/third_party/boringssl/ssl/tls13_server.c +672 -0
- data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
- data/third_party/boringssl/ssl/tls_record.c +159 -77
- data/third_party/nanopb/pb.h +60 -28
- data/third_party/nanopb/pb_decode.c +120 -92
- data/third_party/nanopb/pb_decode.h +3 -3
- data/third_party/nanopb/pb_encode.c +73 -67
- data/third_party/nanopb/pb_encode.h +4 -4
- metadata +155 -89
- data/include/grpc/impl/codegen/byte_buffer.h +0 -122
- data/include/grpc/impl/codegen/log.h +0 -118
- data/include/grpc/impl/codegen/time.h +0 -130
- data/src/core/ext/client_config/client_channel.c +0 -593
- data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
- data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
- data/src/core/lib/iomgr/workqueue_posix.c +0 -151
- data/src/core/lib/security/transport/handshake.c +0 -368
- data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
- data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
- data/third_party/boringssl/crypto/directory.h +0 -66
- data/third_party/boringssl/crypto/directory_posix.c +0 -108
- data/third_party/boringssl/crypto/directory_win.c +0 -144
- data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
- data/third_party/boringssl/include/openssl/pqueue.h +0 -146
- data/third_party/boringssl/ssl/d1_clnt.c +0 -561
- data/third_party/boringssl/ssl/d1_srvr.c +0 -476
- data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
- data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
- data/third_party/boringssl/ssl/test/async_bio.h +0 -45
- data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
- data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -0,0 +1,367 @@
|
|
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/lib/iomgr/port.h"
|
35
|
+
|
36
|
+
#ifdef GRPC_UV
|
37
|
+
|
38
|
+
#include <limits.h>
|
39
|
+
#include <string.h>
|
40
|
+
|
41
|
+
#include <grpc/slice_buffer.h>
|
42
|
+
|
43
|
+
#include <grpc/support/alloc.h>
|
44
|
+
#include <grpc/support/log.h>
|
45
|
+
#include <grpc/support/string_util.h>
|
46
|
+
|
47
|
+
#include "src/core/lib/iomgr/error.h"
|
48
|
+
#include "src/core/lib/iomgr/network_status_tracker.h"
|
49
|
+
#include "src/core/lib/iomgr/resource_quota.h"
|
50
|
+
#include "src/core/lib/iomgr/tcp_uv.h"
|
51
|
+
#include "src/core/lib/slice/slice_internal.h"
|
52
|
+
#include "src/core/lib/slice/slice_string_helpers.h"
|
53
|
+
#include "src/core/lib/support/string.h"
|
54
|
+
|
55
|
+
int grpc_tcp_trace = 0;
|
56
|
+
|
57
|
+
typedef struct {
|
58
|
+
grpc_endpoint base;
|
59
|
+
gpr_refcount refcount;
|
60
|
+
|
61
|
+
uv_write_t write_req;
|
62
|
+
uv_shutdown_t shutdown_req;
|
63
|
+
|
64
|
+
uv_tcp_t *handle;
|
65
|
+
|
66
|
+
grpc_closure *read_cb;
|
67
|
+
grpc_closure *write_cb;
|
68
|
+
|
69
|
+
grpc_slice read_slice;
|
70
|
+
grpc_slice_buffer *read_slices;
|
71
|
+
grpc_slice_buffer *write_slices;
|
72
|
+
uv_buf_t *write_buffers;
|
73
|
+
|
74
|
+
grpc_resource_user *resource_user;
|
75
|
+
|
76
|
+
bool shutting_down;
|
77
|
+
|
78
|
+
char *peer_string;
|
79
|
+
grpc_pollset *pollset;
|
80
|
+
} grpc_tcp;
|
81
|
+
|
82
|
+
static void uv_close_callback(uv_handle_t *handle) { gpr_free(handle); }
|
83
|
+
|
84
|
+
static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
85
|
+
grpc_resource_user_unref(exec_ctx, tcp->resource_user);
|
86
|
+
gpr_free(tcp);
|
87
|
+
}
|
88
|
+
|
89
|
+
/*#define GRPC_TCP_REFCOUNT_DEBUG*/
|
90
|
+
#ifdef GRPC_TCP_REFCOUNT_DEBUG
|
91
|
+
#define TCP_UNREF(exec_ctx, tcp, reason) \
|
92
|
+
tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__)
|
93
|
+
#define TCP_REF(tcp, reason) \
|
94
|
+
tcp_ref((exec_ctx), (tcp), (reason), __FILE__, __LINE__)
|
95
|
+
static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
|
96
|
+
const char *reason, const char *file, int line) {
|
97
|
+
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp,
|
98
|
+
reason, tcp->refcount.count, tcp->refcount.count - 1);
|
99
|
+
if (gpr_unref(&tcp->refcount)) {
|
100
|
+
tcp_free(exec_ctx, tcp);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
|
105
|
+
int line) {
|
106
|
+
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP ref %p : %s %d -> %d", tcp,
|
107
|
+
reason, tcp->refcount.count, tcp->refcount.count + 1);
|
108
|
+
gpr_ref(&tcp->refcount);
|
109
|
+
}
|
110
|
+
#else
|
111
|
+
#define TCP_UNREF(exec_ctx, tcp, reason) tcp_unref((exec_ctx), (tcp))
|
112
|
+
#define TCP_REF(tcp, reason) tcp_ref((tcp))
|
113
|
+
static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
114
|
+
if (gpr_unref(&tcp->refcount)) {
|
115
|
+
tcp_free(exec_ctx, tcp);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); }
|
120
|
+
#endif
|
121
|
+
|
122
|
+
static void alloc_uv_buf(uv_handle_t *handle, size_t suggested_size,
|
123
|
+
uv_buf_t *buf) {
|
124
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
125
|
+
grpc_tcp *tcp = handle->data;
|
126
|
+
(void)suggested_size;
|
127
|
+
tcp->read_slice = grpc_resource_user_slice_malloc(
|
128
|
+
&exec_ctx, tcp->resource_user, GRPC_TCP_DEFAULT_READ_SLICE_SIZE);
|
129
|
+
buf->base = (char *)GRPC_SLICE_START_PTR(tcp->read_slice);
|
130
|
+
buf->len = GRPC_SLICE_LENGTH(tcp->read_slice);
|
131
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
132
|
+
}
|
133
|
+
|
134
|
+
static void read_callback(uv_stream_t *stream, ssize_t nread,
|
135
|
+
const uv_buf_t *buf) {
|
136
|
+
grpc_slice sub;
|
137
|
+
grpc_error *error;
|
138
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
139
|
+
grpc_tcp *tcp = stream->data;
|
140
|
+
grpc_closure *cb = tcp->read_cb;
|
141
|
+
if (nread == 0) {
|
142
|
+
// Nothing happened. Wait for the next callback
|
143
|
+
return;
|
144
|
+
}
|
145
|
+
TCP_UNREF(&exec_ctx, tcp, "read");
|
146
|
+
tcp->read_cb = NULL;
|
147
|
+
// TODO(murgatroid99): figure out what the return value here means
|
148
|
+
uv_read_stop(stream);
|
149
|
+
if (nread == UV_EOF) {
|
150
|
+
error = GRPC_ERROR_CREATE("EOF");
|
151
|
+
} else if (nread > 0) {
|
152
|
+
// Successful read
|
153
|
+
sub = grpc_slice_sub_no_ref(tcp->read_slice, 0, (size_t)nread);
|
154
|
+
grpc_slice_buffer_add(tcp->read_slices, sub);
|
155
|
+
error = GRPC_ERROR_NONE;
|
156
|
+
if (grpc_tcp_trace) {
|
157
|
+
size_t i;
|
158
|
+
const char *str = grpc_error_string(error);
|
159
|
+
gpr_log(GPR_DEBUG, "read: error=%s", str);
|
160
|
+
grpc_error_free_string(str);
|
161
|
+
for (i = 0; i < tcp->read_slices->count; i++) {
|
162
|
+
char *dump = grpc_dump_slice(tcp->read_slices->slices[i],
|
163
|
+
GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
164
|
+
gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string,
|
165
|
+
dump);
|
166
|
+
gpr_free(dump);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
} else {
|
170
|
+
// nread < 0: Error
|
171
|
+
error = GRPC_ERROR_CREATE("TCP Read failed");
|
172
|
+
}
|
173
|
+
grpc_closure_sched(&exec_ctx, cb, error);
|
174
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
175
|
+
}
|
176
|
+
|
177
|
+
static void uv_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
178
|
+
grpc_slice_buffer *read_slices, grpc_closure *cb) {
|
179
|
+
grpc_tcp *tcp = (grpc_tcp *)ep;
|
180
|
+
int status;
|
181
|
+
grpc_error *error = GRPC_ERROR_NONE;
|
182
|
+
GPR_ASSERT(tcp->read_cb == NULL);
|
183
|
+
tcp->read_cb = cb;
|
184
|
+
tcp->read_slices = read_slices;
|
185
|
+
grpc_slice_buffer_reset_and_unref_internal(exec_ctx, read_slices);
|
186
|
+
TCP_REF(tcp, "read");
|
187
|
+
// TODO(murgatroid99): figure out what the return value here means
|
188
|
+
status =
|
189
|
+
uv_read_start((uv_stream_t *)tcp->handle, alloc_uv_buf, read_callback);
|
190
|
+
if (status != 0) {
|
191
|
+
error = GRPC_ERROR_CREATE("TCP Read failed at start");
|
192
|
+
error =
|
193
|
+
grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status));
|
194
|
+
grpc_closure_sched(exec_ctx, cb, error);
|
195
|
+
}
|
196
|
+
if (grpc_tcp_trace) {
|
197
|
+
const char *str = grpc_error_string(error);
|
198
|
+
gpr_log(GPR_DEBUG, "Initiating read on %p: error=%s", tcp, str);
|
199
|
+
}
|
200
|
+
}
|
201
|
+
|
202
|
+
static void write_callback(uv_write_t *req, int status) {
|
203
|
+
grpc_tcp *tcp = req->data;
|
204
|
+
grpc_error *error;
|
205
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
206
|
+
grpc_closure *cb = tcp->write_cb;
|
207
|
+
tcp->write_cb = NULL;
|
208
|
+
TCP_UNREF(&exec_ctx, tcp, "write");
|
209
|
+
if (status == 0) {
|
210
|
+
error = GRPC_ERROR_NONE;
|
211
|
+
} else {
|
212
|
+
error = GRPC_ERROR_CREATE("TCP Write failed");
|
213
|
+
}
|
214
|
+
if (grpc_tcp_trace) {
|
215
|
+
const char *str = grpc_error_string(error);
|
216
|
+
gpr_log(GPR_DEBUG, "write complete on %p: error=%s", tcp, str);
|
217
|
+
}
|
218
|
+
gpr_free(tcp->write_buffers);
|
219
|
+
grpc_resource_user_free(&exec_ctx, tcp->resource_user,
|
220
|
+
sizeof(uv_buf_t) * tcp->write_slices->count);
|
221
|
+
grpc_closure_sched(&exec_ctx, cb, error);
|
222
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
223
|
+
}
|
224
|
+
|
225
|
+
static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
226
|
+
grpc_slice_buffer *write_slices,
|
227
|
+
grpc_closure *cb) {
|
228
|
+
grpc_tcp *tcp = (grpc_tcp *)ep;
|
229
|
+
uv_buf_t *buffers;
|
230
|
+
unsigned int buffer_count;
|
231
|
+
unsigned int i;
|
232
|
+
grpc_slice *slice;
|
233
|
+
uv_write_t *write_req;
|
234
|
+
|
235
|
+
if (grpc_tcp_trace) {
|
236
|
+
size_t j;
|
237
|
+
|
238
|
+
for (j = 0; j < write_slices->count; j++) {
|
239
|
+
char *data = grpc_dump_slice(write_slices->slices[j],
|
240
|
+
GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
241
|
+
gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data);
|
242
|
+
gpr_free(data);
|
243
|
+
}
|
244
|
+
}
|
245
|
+
|
246
|
+
if (tcp->shutting_down) {
|
247
|
+
grpc_closure_sched(exec_ctx, cb,
|
248
|
+
GRPC_ERROR_CREATE("TCP socket is shutting down"));
|
249
|
+
return;
|
250
|
+
}
|
251
|
+
|
252
|
+
GPR_ASSERT(tcp->write_cb == NULL);
|
253
|
+
tcp->write_slices = write_slices;
|
254
|
+
GPR_ASSERT(tcp->write_slices->count <= UINT_MAX);
|
255
|
+
if (tcp->write_slices->count == 0) {
|
256
|
+
// No slices means we don't have to do anything,
|
257
|
+
// and libuv doesn't like empty writes
|
258
|
+
grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_NONE);
|
259
|
+
return;
|
260
|
+
}
|
261
|
+
|
262
|
+
tcp->write_cb = cb;
|
263
|
+
buffer_count = (unsigned int)tcp->write_slices->count;
|
264
|
+
buffers = gpr_malloc(sizeof(uv_buf_t) * buffer_count);
|
265
|
+
grpc_resource_user_alloc(exec_ctx, tcp->resource_user,
|
266
|
+
sizeof(uv_buf_t) * buffer_count, NULL);
|
267
|
+
for (i = 0; i < buffer_count; i++) {
|
268
|
+
slice = &tcp->write_slices->slices[i];
|
269
|
+
buffers[i].base = (char *)GRPC_SLICE_START_PTR(*slice);
|
270
|
+
buffers[i].len = GRPC_SLICE_LENGTH(*slice);
|
271
|
+
}
|
272
|
+
tcp->write_buffers = buffers;
|
273
|
+
write_req = &tcp->write_req;
|
274
|
+
write_req->data = tcp;
|
275
|
+
TCP_REF(tcp, "write");
|
276
|
+
// TODO(murgatroid99): figure out what the return value here means
|
277
|
+
uv_write(write_req, (uv_stream_t *)tcp->handle, buffers, buffer_count,
|
278
|
+
write_callback);
|
279
|
+
}
|
280
|
+
|
281
|
+
static void uv_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
282
|
+
grpc_pollset *pollset) {
|
283
|
+
// No-op. We're ignoring pollsets currently
|
284
|
+
(void)exec_ctx;
|
285
|
+
(void)ep;
|
286
|
+
(void)pollset;
|
287
|
+
grpc_tcp *tcp = (grpc_tcp *)ep;
|
288
|
+
tcp->pollset = pollset;
|
289
|
+
}
|
290
|
+
|
291
|
+
static void uv_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
292
|
+
grpc_pollset_set *pollset) {
|
293
|
+
// No-op. We're ignoring pollsets currently
|
294
|
+
(void)exec_ctx;
|
295
|
+
(void)ep;
|
296
|
+
(void)pollset;
|
297
|
+
}
|
298
|
+
|
299
|
+
static void shutdown_callback(uv_shutdown_t *req, int status) {}
|
300
|
+
|
301
|
+
static void uv_endpoint_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
|
302
|
+
grpc_tcp *tcp = (grpc_tcp *)ep;
|
303
|
+
if (!tcp->shutting_down) {
|
304
|
+
tcp->shutting_down = true;
|
305
|
+
uv_shutdown_t *req = &tcp->shutdown_req;
|
306
|
+
uv_shutdown(req, (uv_stream_t *)tcp->handle, shutdown_callback);
|
307
|
+
}
|
308
|
+
}
|
309
|
+
|
310
|
+
static void uv_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
|
311
|
+
grpc_network_status_unregister_endpoint(ep);
|
312
|
+
grpc_tcp *tcp = (grpc_tcp *)ep;
|
313
|
+
uv_close((uv_handle_t *)tcp->handle, uv_close_callback);
|
314
|
+
TCP_UNREF(exec_ctx, tcp, "destroy");
|
315
|
+
}
|
316
|
+
|
317
|
+
static char *uv_get_peer(grpc_endpoint *ep) {
|
318
|
+
grpc_tcp *tcp = (grpc_tcp *)ep;
|
319
|
+
return gpr_strdup(tcp->peer_string);
|
320
|
+
}
|
321
|
+
|
322
|
+
static grpc_resource_user *uv_get_resource_user(grpc_endpoint *ep) {
|
323
|
+
grpc_tcp *tcp = (grpc_tcp *)ep;
|
324
|
+
return tcp->resource_user;
|
325
|
+
}
|
326
|
+
|
327
|
+
static grpc_workqueue *uv_get_workqueue(grpc_endpoint *ep) { return NULL; }
|
328
|
+
|
329
|
+
static int uv_get_fd(grpc_endpoint *ep) { return -1; }
|
330
|
+
|
331
|
+
static grpc_endpoint_vtable vtable = {
|
332
|
+
uv_endpoint_read, uv_endpoint_write, uv_get_workqueue,
|
333
|
+
uv_add_to_pollset, uv_add_to_pollset_set, uv_endpoint_shutdown,
|
334
|
+
uv_destroy, uv_get_resource_user, uv_get_peer,
|
335
|
+
uv_get_fd};
|
336
|
+
|
337
|
+
grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle,
|
338
|
+
grpc_resource_quota *resource_quota,
|
339
|
+
char *peer_string) {
|
340
|
+
grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp));
|
341
|
+
|
342
|
+
if (grpc_tcp_trace) {
|
343
|
+
gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp);
|
344
|
+
}
|
345
|
+
|
346
|
+
/* Disable Nagle's Algorithm */
|
347
|
+
uv_tcp_nodelay(handle, 1);
|
348
|
+
|
349
|
+
memset(tcp, 0, sizeof(grpc_tcp));
|
350
|
+
tcp->base.vtable = &vtable;
|
351
|
+
tcp->handle = handle;
|
352
|
+
handle->data = tcp;
|
353
|
+
gpr_ref_init(&tcp->refcount, 1);
|
354
|
+
tcp->peer_string = gpr_strdup(peer_string);
|
355
|
+
tcp->shutting_down = false;
|
356
|
+
tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
|
357
|
+
/* Tell network status tracking code about the new endpoint */
|
358
|
+
grpc_network_status_register_endpoint(&tcp->base);
|
359
|
+
|
360
|
+
#ifndef GRPC_UV_TCP_HOLD_LOOP
|
361
|
+
uv_unref((uv_handle_t *)handle);
|
362
|
+
#endif
|
363
|
+
|
364
|
+
return &tcp->base;
|
365
|
+
}
|
366
|
+
|
367
|
+
#endif /* GRPC_UV */
|
@@ -0,0 +1,59 @@
|
|
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
|
+
#ifndef GRPC_CORE_LIB_IOMGR_TCP_UV_H
|
35
|
+
#define GRPC_CORE_LIB_IOMGR_TCP_UV_H
|
36
|
+
/*
|
37
|
+
Low level TCP "bottom half" implementation, for use by transports built on
|
38
|
+
top of a TCP connection.
|
39
|
+
|
40
|
+
Note that this file does not (yet) include APIs for creating the socket in
|
41
|
+
the first place.
|
42
|
+
|
43
|
+
All calls passing slice transfer ownership of a slice refcount unless
|
44
|
+
otherwise specified.
|
45
|
+
*/
|
46
|
+
|
47
|
+
#include "src/core/lib/iomgr/endpoint.h"
|
48
|
+
|
49
|
+
#include <uv.h>
|
50
|
+
|
51
|
+
extern int grpc_tcp_trace;
|
52
|
+
|
53
|
+
#define GRPC_TCP_DEFAULT_READ_SLICE_SIZE 8192
|
54
|
+
|
55
|
+
grpc_endpoint *grpc_tcp_create(uv_tcp_t *handle,
|
56
|
+
grpc_resource_quota *resource_quota,
|
57
|
+
char *peer_string);
|
58
|
+
|
59
|
+
#endif /* GRPC_CORE_LIB_IOMGR_TCP_UV_H */
|
@@ -31,19 +31,19 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#include
|
34
|
+
#include "src/core/lib/iomgr/port.h"
|
35
35
|
|
36
|
-
#ifdef
|
36
|
+
#ifdef GRPC_WINSOCK_SOCKET
|
37
37
|
|
38
38
|
#include <limits.h>
|
39
39
|
|
40
40
|
#include "src/core/lib/iomgr/network_status_tracker.h"
|
41
41
|
#include "src/core/lib/iomgr/sockaddr_windows.h"
|
42
42
|
|
43
|
+
#include <grpc/slice_buffer.h>
|
43
44
|
#include <grpc/support/alloc.h>
|
44
45
|
#include <grpc/support/log.h>
|
45
46
|
#include <grpc/support/log_windows.h>
|
46
|
-
#include <grpc/support/slice_buffer.h>
|
47
47
|
#include <grpc/support/string_util.h>
|
48
48
|
#include <grpc/support/useful.h>
|
49
49
|
|
@@ -53,6 +53,7 @@
|
|
53
53
|
#include "src/core/lib/iomgr/socket_windows.h"
|
54
54
|
#include "src/core/lib/iomgr/tcp_client.h"
|
55
55
|
#include "src/core/lib/iomgr/timer.h"
|
56
|
+
#include "src/core/lib/slice/slice_internal.h"
|
56
57
|
|
57
58
|
#if defined(__MSYS__) && defined(GPR_ARCH_64)
|
58
59
|
/* Nasty workaround for nasty bug when using the 64 bits msys compiler
|
@@ -105,9 +106,11 @@ typedef struct grpc_tcp {
|
|
105
106
|
|
106
107
|
grpc_closure *read_cb;
|
107
108
|
grpc_closure *write_cb;
|
108
|
-
|
109
|
-
|
110
|
-
|
109
|
+
grpc_slice read_slice;
|
110
|
+
grpc_slice_buffer *write_slices;
|
111
|
+
grpc_slice_buffer *read_slices;
|
112
|
+
|
113
|
+
grpc_resource_user *resource_user;
|
111
114
|
|
112
115
|
/* The IO Completion Port runs from another thread. We need some mechanism
|
113
116
|
to protect ourselves when requesting a shutdown. */
|
@@ -117,23 +120,25 @@ typedef struct grpc_tcp {
|
|
117
120
|
char *peer_string;
|
118
121
|
} grpc_tcp;
|
119
122
|
|
120
|
-
static void tcp_free(grpc_tcp *tcp) {
|
123
|
+
static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
121
124
|
grpc_winsocket_destroy(tcp->socket);
|
122
125
|
gpr_mu_destroy(&tcp->mu);
|
123
126
|
gpr_free(tcp->peer_string);
|
127
|
+
grpc_resource_user_unref(exec_ctx, tcp->resource_user);
|
124
128
|
gpr_free(tcp);
|
125
129
|
}
|
126
130
|
|
127
131
|
/*#define GRPC_TCP_REFCOUNT_DEBUG*/
|
128
132
|
#ifdef GRPC_TCP_REFCOUNT_DEBUG
|
129
|
-
#define TCP_UNREF(
|
133
|
+
#define TCP_UNREF(exec_ctx, tcp, reason) \
|
134
|
+
tcp_unref((exec_ctx), (tcp), (reason), __FILE__, __LINE__)
|
130
135
|
#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
|
131
|
-
static void tcp_unref(
|
132
|
-
int line) {
|
136
|
+
static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
|
137
|
+
const char *reason, const char *file, int line) {
|
133
138
|
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "TCP unref %p : %s %d -> %d", tcp,
|
134
139
|
reason, tcp->refcount.count, tcp->refcount.count - 1);
|
135
140
|
if (gpr_unref(&tcp->refcount)) {
|
136
|
-
tcp_free(tcp);
|
141
|
+
tcp_free(exec_ctx, tcp);
|
137
142
|
}
|
138
143
|
}
|
139
144
|
|
@@ -144,11 +149,11 @@ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
|
|
144
149
|
gpr_ref(&tcp->refcount);
|
145
150
|
}
|
146
151
|
#else
|
147
|
-
#define TCP_UNREF(tcp, reason) tcp_unref((tcp))
|
152
|
+
#define TCP_UNREF(exec_ctx, tcp, reason) tcp_unref((exec_ctx), (tcp))
|
148
153
|
#define TCP_REF(tcp, reason) tcp_ref((tcp))
|
149
|
-
static void tcp_unref(grpc_tcp *tcp) {
|
154
|
+
static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
150
155
|
if (gpr_unref(&tcp->refcount)) {
|
151
|
-
tcp_free(tcp);
|
156
|
+
tcp_free(exec_ctx, tcp);
|
152
157
|
}
|
153
158
|
}
|
154
159
|
|
@@ -160,7 +165,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) {
|
|
160
165
|
grpc_tcp *tcp = tcpp;
|
161
166
|
grpc_closure *cb = tcp->read_cb;
|
162
167
|
grpc_winsocket *socket = tcp->socket;
|
163
|
-
|
168
|
+
grpc_slice sub;
|
164
169
|
grpc_winsocket_callback_info *info = &socket->read_info;
|
165
170
|
|
166
171
|
GRPC_ERROR_REF(error);
|
@@ -170,25 +175,25 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) {
|
|
170
175
|
char *utf8_message = gpr_format_message(info->wsa_error);
|
171
176
|
error = GRPC_ERROR_CREATE(utf8_message);
|
172
177
|
gpr_free(utf8_message);
|
173
|
-
|
178
|
+
grpc_slice_unref_internal(exec_ctx, tcp->read_slice);
|
174
179
|
} else {
|
175
180
|
if (info->bytes_transfered != 0 && !tcp->shutting_down) {
|
176
|
-
sub =
|
177
|
-
|
181
|
+
sub = grpc_slice_sub_no_ref(tcp->read_slice, 0, info->bytes_transfered);
|
182
|
+
grpc_slice_buffer_add(tcp->read_slices, sub);
|
178
183
|
} else {
|
179
|
-
|
184
|
+
grpc_slice_unref_internal(exec_ctx, tcp->read_slice);
|
180
185
|
error = GRPC_ERROR_CREATE("End of TCP stream");
|
181
186
|
}
|
182
187
|
}
|
183
188
|
}
|
184
189
|
|
185
190
|
tcp->read_cb = NULL;
|
186
|
-
TCP_UNREF(tcp, "read");
|
187
|
-
|
191
|
+
TCP_UNREF(exec_ctx, tcp, "read");
|
192
|
+
grpc_closure_sched(exec_ctx, cb, error);
|
188
193
|
}
|
189
194
|
|
190
195
|
static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
191
|
-
|
196
|
+
grpc_slice_buffer *read_slices, grpc_closure *cb) {
|
192
197
|
grpc_tcp *tcp = (grpc_tcp *)ep;
|
193
198
|
grpc_winsocket *handle = tcp->socket;
|
194
199
|
grpc_winsocket_callback_info *info = &handle->read_info;
|
@@ -198,20 +203,20 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
198
203
|
WSABUF buffer;
|
199
204
|
|
200
205
|
if (tcp->shutting_down) {
|
201
|
-
|
202
|
-
|
206
|
+
grpc_closure_sched(exec_ctx, cb,
|
207
|
+
GRPC_ERROR_CREATE("TCP socket is shutting down"));
|
203
208
|
return;
|
204
209
|
}
|
205
210
|
|
206
211
|
tcp->read_cb = cb;
|
207
212
|
tcp->read_slices = read_slices;
|
208
|
-
|
213
|
+
grpc_slice_buffer_reset_and_unref_internal(exec_ctx, read_slices);
|
209
214
|
|
210
|
-
tcp->read_slice =
|
215
|
+
tcp->read_slice = grpc_slice_malloc(8192);
|
211
216
|
|
212
|
-
buffer.len = (ULONG)
|
217
|
+
buffer.len = (ULONG)GRPC_SLICE_LENGTH(
|
213
218
|
tcp->read_slice); // we know slice size fits in 32bit.
|
214
|
-
buffer.buf = (char *)
|
219
|
+
buffer.buf = (char *)GRPC_SLICE_START_PTR(tcp->read_slice);
|
215
220
|
|
216
221
|
TCP_REF(tcp, "read");
|
217
222
|
|
@@ -223,7 +228,7 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
223
228
|
/* Did we get data immediately ? Yay. */
|
224
229
|
if (info->wsa_error != WSAEWOULDBLOCK) {
|
225
230
|
info->bytes_transfered = bytes_read;
|
226
|
-
|
231
|
+
grpc_closure_sched(exec_ctx, &tcp->on_read, GRPC_ERROR_NONE);
|
227
232
|
return;
|
228
233
|
}
|
229
234
|
|
@@ -236,8 +241,8 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
236
241
|
int wsa_error = WSAGetLastError();
|
237
242
|
if (wsa_error != WSA_IO_PENDING) {
|
238
243
|
info->wsa_error = wsa_error;
|
239
|
-
|
240
|
-
|
244
|
+
grpc_closure_sched(exec_ctx, &tcp->on_read,
|
245
|
+
GRPC_WSA_ERROR(info->wsa_error, "WSARecv"));
|
241
246
|
return;
|
242
247
|
}
|
243
248
|
}
|
@@ -267,13 +272,13 @@ static void on_write(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) {
|
|
267
272
|
}
|
268
273
|
}
|
269
274
|
|
270
|
-
TCP_UNREF(tcp, "write");
|
271
|
-
|
275
|
+
TCP_UNREF(exec_ctx, tcp, "write");
|
276
|
+
grpc_closure_sched(exec_ctx, cb, error);
|
272
277
|
}
|
273
278
|
|
274
279
|
/* Initiates a write. */
|
275
280
|
static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
276
|
-
|
281
|
+
grpc_slice_buffer *slices, grpc_closure *cb) {
|
277
282
|
grpc_tcp *tcp = (grpc_tcp *)ep;
|
278
283
|
grpc_winsocket *socket = tcp->socket;
|
279
284
|
grpc_winsocket_callback_info *info = &socket->write_info;
|
@@ -286,8 +291,8 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
286
291
|
size_t len;
|
287
292
|
|
288
293
|
if (tcp->shutting_down) {
|
289
|
-
|
290
|
-
|
294
|
+
grpc_closure_sched(exec_ctx, cb,
|
295
|
+
GRPC_ERROR_CREATE("TCP socket is shutting down"));
|
291
296
|
return;
|
292
297
|
}
|
293
298
|
|
@@ -300,10 +305,10 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
300
305
|
}
|
301
306
|
|
302
307
|
for (i = 0; i < tcp->write_slices->count; i++) {
|
303
|
-
len =
|
308
|
+
len = GRPC_SLICE_LENGTH(tcp->write_slices->slices[i]);
|
304
309
|
GPR_ASSERT(len <= ULONG_MAX);
|
305
310
|
buffers[i].len = (ULONG)len;
|
306
|
-
buffers[i].buf = (char *)
|
311
|
+
buffers[i].buf = (char *)GRPC_SLICE_START_PTR(tcp->write_slices->slices[i]);
|
307
312
|
}
|
308
313
|
|
309
314
|
/* First, let's try a synchronous, non-blocking write. */
|
@@ -318,7 +323,7 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
318
323
|
grpc_error *error = status == 0
|
319
324
|
? GRPC_ERROR_NONE
|
320
325
|
: GRPC_WSA_ERROR(info->wsa_error, "WSASend");
|
321
|
-
|
326
|
+
grpc_closure_sched(exec_ctx, cb, error);
|
322
327
|
if (allocated) gpr_free(allocated);
|
323
328
|
return;
|
324
329
|
}
|
@@ -335,9 +340,8 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
335
340
|
if (status != 0) {
|
336
341
|
int wsa_error = WSAGetLastError();
|
337
342
|
if (wsa_error != WSA_IO_PENDING) {
|
338
|
-
TCP_UNREF(tcp, "write");
|
339
|
-
|
340
|
-
NULL);
|
343
|
+
TCP_UNREF(exec_ctx, tcp, "write");
|
344
|
+
grpc_closure_sched(exec_ctx, cb, GRPC_WSA_ERROR(wsa_error, "WSASend"));
|
341
345
|
return;
|
342
346
|
}
|
343
347
|
}
|
@@ -377,12 +381,13 @@ static void win_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
|
|
377
381
|
tcp->shutting_down = 1;
|
378
382
|
grpc_winsocket_shutdown(tcp->socket);
|
379
383
|
gpr_mu_unlock(&tcp->mu);
|
384
|
+
grpc_resource_user_shutdown(exec_ctx, tcp->resource_user);
|
380
385
|
}
|
381
386
|
|
382
387
|
static void win_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
|
383
388
|
grpc_network_status_unregister_endpoint(ep);
|
384
389
|
grpc_tcp *tcp = (grpc_tcp *)ep;
|
385
|
-
TCP_UNREF(tcp, "destroy");
|
390
|
+
TCP_UNREF(exec_ctx, tcp, "destroy");
|
386
391
|
}
|
387
392
|
|
388
393
|
static char *win_get_peer(grpc_endpoint *ep) {
|
@@ -392,6 +397,13 @@ static char *win_get_peer(grpc_endpoint *ep) {
|
|
392
397
|
|
393
398
|
static grpc_workqueue *win_get_workqueue(grpc_endpoint *ep) { return NULL; }
|
394
399
|
|
400
|
+
static grpc_resource_user *win_get_resource_user(grpc_endpoint *ep) {
|
401
|
+
grpc_tcp *tcp = (grpc_tcp *)ep;
|
402
|
+
return tcp->resource_user;
|
403
|
+
}
|
404
|
+
|
405
|
+
static int win_get_fd(grpc_endpoint *ep) { return -1; }
|
406
|
+
|
395
407
|
static grpc_endpoint_vtable vtable = {win_read,
|
396
408
|
win_write,
|
397
409
|
win_get_workqueue,
|
@@ -399,22 +411,27 @@ static grpc_endpoint_vtable vtable = {win_read,
|
|
399
411
|
win_add_to_pollset_set,
|
400
412
|
win_shutdown,
|
401
413
|
win_destroy,
|
402
|
-
|
414
|
+
win_get_resource_user,
|
415
|
+
win_get_peer,
|
416
|
+
win_get_fd};
|
403
417
|
|
404
|
-
grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket,
|
418
|
+
grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket,
|
419
|
+
grpc_resource_quota *resource_quota,
|
420
|
+
char *peer_string) {
|
405
421
|
grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp));
|
406
422
|
memset(tcp, 0, sizeof(grpc_tcp));
|
407
423
|
tcp->base.vtable = &vtable;
|
408
424
|
tcp->socket = socket;
|
409
425
|
gpr_mu_init(&tcp->mu);
|
410
426
|
gpr_ref_init(&tcp->refcount, 1);
|
411
|
-
grpc_closure_init(&tcp->on_read, on_read, tcp);
|
412
|
-
grpc_closure_init(&tcp->on_write, on_write, tcp);
|
427
|
+
grpc_closure_init(&tcp->on_read, on_read, tcp, grpc_schedule_on_exec_ctx);
|
428
|
+
grpc_closure_init(&tcp->on_write, on_write, tcp, grpc_schedule_on_exec_ctx);
|
413
429
|
tcp->peer_string = gpr_strdup(peer_string);
|
430
|
+
tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
|
414
431
|
/* Tell network status tracking code about the new endpoint */
|
415
432
|
grpc_network_status_register_endpoint(&tcp->base);
|
416
433
|
|
417
434
|
return &tcp->base;
|
418
435
|
}
|
419
436
|
|
420
|
-
#endif /*
|
437
|
+
#endif /* GRPC_WINSOCK_SOCKET */
|