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
@@ -50,7 +50,9 @@
|
|
50
50
|
/* Create a tcp endpoint given a winsock handle.
|
51
51
|
* Takes ownership of the handle.
|
52
52
|
*/
|
53
|
-
grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket,
|
53
|
+
grpc_endpoint *grpc_tcp_create(grpc_winsocket *socket,
|
54
|
+
grpc_resource_quota *resource_quota,
|
55
|
+
char *peer_string);
|
54
56
|
|
55
57
|
grpc_error *grpc_tcp_prepare_socket(SOCKET sock);
|
56
58
|
|
data/src/core/lib/iomgr/timer.h
CHANGED
@@ -34,29 +34,30 @@
|
|
34
34
|
#ifndef GRPC_CORE_LIB_IOMGR_TIMER_H
|
35
35
|
#define GRPC_CORE_LIB_IOMGR_TIMER_H
|
36
36
|
|
37
|
+
#include "src/core/lib/iomgr/port.h"
|
38
|
+
|
39
|
+
#ifdef GRPC_UV
|
40
|
+
#include "src/core/lib/iomgr/timer_uv.h"
|
41
|
+
#else
|
42
|
+
#include "src/core/lib/iomgr/timer_generic.h"
|
43
|
+
#endif /* GRPC_UV */
|
44
|
+
|
37
45
|
#include <grpc/support/port_platform.h>
|
38
46
|
#include <grpc/support/time.h>
|
39
47
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
40
48
|
#include "src/core/lib/iomgr/iomgr.h"
|
41
49
|
|
42
|
-
typedef struct grpc_timer
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
/* Initialize *timer. When expired or canceled, timer_cb will be called with
|
52
|
-
*timer_cb_arg and status to indicate if it expired (SUCCESS) or was
|
53
|
-
canceled (CANCELLED). timer_cb is guaranteed to be called exactly once,
|
54
|
-
and application code should check the status to determine how it was
|
55
|
-
invoked. The application callback is also responsible for maintaining
|
56
|
-
information about when to free up any user-level state. */
|
50
|
+
typedef struct grpc_timer grpc_timer;
|
51
|
+
|
52
|
+
/* Initialize *timer. When expired or canceled, closure will be called with
|
53
|
+
error set to indicate if it expired (GRPC_ERROR_NONE) or was canceled
|
54
|
+
(GRPC_ERROR_CANCELLED). timer_cb is guaranteed to be called exactly once, and
|
55
|
+
application code should check the error to determine how it was invoked. The
|
56
|
+
application callback is also responsible for maintaining information about
|
57
|
+
when to free up any user-level state. */
|
57
58
|
void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
|
58
|
-
gpr_timespec deadline,
|
59
|
-
|
59
|
+
gpr_timespec deadline, grpc_closure *closure,
|
60
|
+
gpr_timespec now);
|
60
61
|
|
61
62
|
/* Note that there is no timer destroy function. This is because the
|
62
63
|
timer is a one-time occurrence with a guarantee that the callback will
|
@@ -74,8 +75,8 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
|
|
74
75
|
|
75
76
|
In all of these cases, the cancellation is still considered successful.
|
76
77
|
They are essentially distinguished in that the timer_cb will be run
|
77
|
-
exactly once from either the cancellation (with
|
78
|
-
or from the activation (with
|
78
|
+
exactly once from either the cancellation (with error GRPC_ERROR_CANCELLED)
|
79
|
+
or from the activation (with error GRPC_ERROR_NONE).
|
79
80
|
|
80
81
|
Note carefully that the callback function MAY occur in the same callstack
|
81
82
|
as grpc_timer_cancel. It's expected that most timers will be cancelled (their
|
@@ -83,14 +84,13 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
|
|
83
84
|
that cancellation costs as little as possible. Making callbacks run inline
|
84
85
|
matches this aim.
|
85
86
|
|
86
|
-
Requires:
|
87
|
+
Requires: cancel() must happen after init() on a given timer */
|
87
88
|
void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer);
|
88
89
|
|
89
90
|
/* iomgr internal api for dealing with timers */
|
90
91
|
|
91
92
|
/* Check for timers to be run, and run them.
|
92
93
|
Return true if timer callbacks were executed.
|
93
|
-
Drops drop_mu if it is non-null before executing callbacks.
|
94
94
|
If next is non-null, TRY to update *next with the next running timer
|
95
95
|
IF that timer occurs before *next current value.
|
96
96
|
*next is never guaranteed to be updated on any given execution; however,
|
@@ -31,6 +31,10 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
+
#include "src/core/lib/iomgr/port.h"
|
35
|
+
|
36
|
+
#ifdef GRPC_TIMER_USE_GENERIC
|
37
|
+
|
34
38
|
#include "src/core/lib/iomgr/timer.h"
|
35
39
|
|
36
40
|
#include <grpc/support/log.h>
|
@@ -174,28 +178,27 @@ static void note_deadline_change(shard_type *shard) {
|
|
174
178
|
}
|
175
179
|
|
176
180
|
void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
|
177
|
-
gpr_timespec deadline,
|
178
|
-
|
181
|
+
gpr_timespec deadline, grpc_closure *closure,
|
182
|
+
gpr_timespec now) {
|
179
183
|
int is_first_timer = 0;
|
180
184
|
shard_type *shard = &g_shards[shard_idx(timer)];
|
181
185
|
GPR_ASSERT(deadline.clock_type == g_clock_type);
|
182
186
|
GPR_ASSERT(now.clock_type == g_clock_type);
|
183
|
-
|
187
|
+
timer->closure = closure;
|
184
188
|
timer->deadline = deadline;
|
185
189
|
timer->triggered = 0;
|
186
190
|
|
187
191
|
if (!g_initialized) {
|
188
192
|
timer->triggered = 1;
|
189
|
-
|
190
|
-
exec_ctx,
|
191
|
-
GRPC_ERROR_CREATE("Attempt to create timer before initialization")
|
192
|
-
NULL);
|
193
|
+
grpc_closure_sched(
|
194
|
+
exec_ctx, timer->closure,
|
195
|
+
GRPC_ERROR_CREATE("Attempt to create timer before initialization"));
|
193
196
|
return;
|
194
197
|
}
|
195
198
|
|
196
199
|
if (gpr_time_cmp(deadline, now) <= 0) {
|
197
200
|
timer->triggered = 1;
|
198
|
-
|
201
|
+
grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_NONE);
|
199
202
|
return;
|
200
203
|
}
|
201
204
|
|
@@ -247,7 +250,7 @@ void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) {
|
|
247
250
|
shard_type *shard = &g_shards[shard_idx(timer)];
|
248
251
|
gpr_mu_lock(&shard->mu);
|
249
252
|
if (!timer->triggered) {
|
250
|
-
|
253
|
+
grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_CANCELLED);
|
251
254
|
timer->triggered = 1;
|
252
255
|
if (timer->heap_index == INVALID_HEAP_INDEX) {
|
253
256
|
list_remove(timer);
|
@@ -313,7 +316,7 @@ static size_t pop_timers(grpc_exec_ctx *exec_ctx, shard_type *shard,
|
|
313
316
|
grpc_timer *timer;
|
314
317
|
gpr_mu_lock(&shard->mu);
|
315
318
|
while ((timer = pop_one(shard, now))) {
|
316
|
-
|
319
|
+
grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_REF(error));
|
317
320
|
n++;
|
318
321
|
}
|
319
322
|
*new_min_deadline = compute_min_deadline(shard);
|
@@ -382,3 +385,5 @@ bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now,
|
|
382
385
|
? GRPC_ERROR_NONE
|
383
386
|
: GRPC_ERROR_CREATE("Shutting down timer system"));
|
384
387
|
}
|
388
|
+
|
389
|
+
#endif /* GRPC_TIMER_USE_GENERIC */
|
@@ -0,0 +1,49 @@
|
|
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_TIMER_GENERIC_H
|
35
|
+
#define GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H
|
36
|
+
|
37
|
+
#include <grpc/support/time.h>
|
38
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
39
|
+
|
40
|
+
struct grpc_timer {
|
41
|
+
gpr_timespec deadline;
|
42
|
+
uint32_t heap_index; /* INVALID_HEAP_INDEX if not in heap */
|
43
|
+
int triggered;
|
44
|
+
struct grpc_timer *next;
|
45
|
+
struct grpc_timer *prev;
|
46
|
+
grpc_closure *closure;
|
47
|
+
};
|
48
|
+
|
49
|
+
#endif /* GRPC_CORE_LIB_IOMGR_TIMER_GENERIC_H */
|
@@ -31,6 +31,10 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
+
#include "src/core/lib/iomgr/port.h"
|
35
|
+
|
36
|
+
#ifdef GRPC_TIMER_USE_GENERIC
|
37
|
+
|
34
38
|
#include "src/core/lib/iomgr/timer_heap.h"
|
35
39
|
|
36
40
|
#include <string.h>
|
@@ -144,3 +148,5 @@ grpc_timer *grpc_timer_heap_top(grpc_timer_heap *heap) {
|
|
144
148
|
void grpc_timer_heap_pop(grpc_timer_heap *heap) {
|
145
149
|
grpc_timer_heap_remove(heap, grpc_timer_heap_top(heap));
|
146
150
|
}
|
151
|
+
|
152
|
+
#endif /* GRPC_TIMER_USE_GENERIC */
|
@@ -0,0 +1,99 @@
|
|
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
|
+
#if GRPC_UV
|
37
|
+
|
38
|
+
#include <grpc/support/alloc.h>
|
39
|
+
#include <grpc/support/log.h>
|
40
|
+
|
41
|
+
#include "src/core/lib/iomgr/timer.h"
|
42
|
+
|
43
|
+
#include <uv.h>
|
44
|
+
|
45
|
+
static void timer_close_callback(uv_handle_t *handle) { gpr_free(handle); }
|
46
|
+
|
47
|
+
static void stop_uv_timer(uv_timer_t *handle) {
|
48
|
+
uv_timer_stop(handle);
|
49
|
+
uv_unref((uv_handle_t *)handle);
|
50
|
+
uv_close((uv_handle_t *)handle, timer_close_callback);
|
51
|
+
}
|
52
|
+
|
53
|
+
void run_expired_timer(uv_timer_t *handle) {
|
54
|
+
grpc_timer *timer = (grpc_timer *)handle->data;
|
55
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
56
|
+
GPR_ASSERT(!timer->triggered);
|
57
|
+
timer->triggered = 1;
|
58
|
+
grpc_closure_sched(&exec_ctx, timer->closure, GRPC_ERROR_NONE);
|
59
|
+
stop_uv_timer(handle);
|
60
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
61
|
+
}
|
62
|
+
|
63
|
+
void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer,
|
64
|
+
gpr_timespec deadline, grpc_closure *closure,
|
65
|
+
gpr_timespec now) {
|
66
|
+
uint64_t timeout;
|
67
|
+
uv_timer_t *uv_timer;
|
68
|
+
timer->closure = closure;
|
69
|
+
if (gpr_time_cmp(deadline, now) <= 0) {
|
70
|
+
timer->triggered = 1;
|
71
|
+
grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_NONE);
|
72
|
+
return;
|
73
|
+
}
|
74
|
+
timer->triggered = 0;
|
75
|
+
timeout = (uint64_t)gpr_time_to_millis(gpr_time_sub(deadline, now));
|
76
|
+
uv_timer = gpr_malloc(sizeof(uv_timer_t));
|
77
|
+
uv_timer_init(uv_default_loop(), uv_timer);
|
78
|
+
uv_timer->data = timer;
|
79
|
+
timer->uv_timer = uv_timer;
|
80
|
+
uv_timer_start(uv_timer, run_expired_timer, timeout, 0);
|
81
|
+
}
|
82
|
+
|
83
|
+
void grpc_timer_cancel(grpc_exec_ctx *exec_ctx, grpc_timer *timer) {
|
84
|
+
if (!timer->triggered) {
|
85
|
+
timer->triggered = 1;
|
86
|
+
grpc_closure_sched(exec_ctx, timer->closure, GRPC_ERROR_CANCELLED);
|
87
|
+
stop_uv_timer((uv_timer_t *)timer->uv_timer);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now,
|
92
|
+
gpr_timespec *next) {
|
93
|
+
return false;
|
94
|
+
}
|
95
|
+
|
96
|
+
void grpc_timer_list_init(gpr_timespec now) {}
|
97
|
+
void grpc_timer_list_shutdown(grpc_exec_ctx *exec_ctx) {}
|
98
|
+
|
99
|
+
#endif /* GRPC_UV */
|
@@ -0,0 +1,47 @@
|
|
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_TIMER_UV_H
|
35
|
+
#define GRPC_CORE_LIB_IOMGR_TIMER_UV_H
|
36
|
+
|
37
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
38
|
+
|
39
|
+
struct grpc_timer {
|
40
|
+
grpc_closure *closure;
|
41
|
+
/* This is actually a uv_timer_t*, but we want to keep platform-specific
|
42
|
+
types out of headers */
|
43
|
+
void *uv_timer;
|
44
|
+
int triggered;
|
45
|
+
};
|
46
|
+
|
47
|
+
#endif /* GRPC_CORE_LIB_IOMGR_TIMER_UV_H */
|
@@ -36,10 +36,9 @@
|
|
36
36
|
#define _GNU_SOURCE
|
37
37
|
#endif
|
38
38
|
|
39
|
-
#include
|
39
|
+
#include "src/core/lib/iomgr/port.h"
|
40
40
|
|
41
|
-
#ifdef
|
42
|
-
#ifdef GPR_POSIX_SOCKET
|
41
|
+
#ifdef GRPC_POSIX_SOCKET
|
43
42
|
|
44
43
|
#include "src/core/lib/iomgr/udp_server.h"
|
45
44
|
|
@@ -63,32 +62,30 @@
|
|
63
62
|
#include "src/core/lib/iomgr/error.h"
|
64
63
|
#include "src/core/lib/iomgr/ev_posix.h"
|
65
64
|
#include "src/core/lib/iomgr/resolve_address.h"
|
65
|
+
#include "src/core/lib/iomgr/sockaddr.h"
|
66
66
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
67
67
|
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
68
|
+
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
68
69
|
#include "src/core/lib/support/string.h"
|
69
70
|
|
70
|
-
#define INIT_PORT_CAP 2
|
71
|
-
|
72
71
|
/* one listening port */
|
73
|
-
typedef struct
|
72
|
+
typedef struct grpc_udp_listener grpc_udp_listener;
|
73
|
+
struct grpc_udp_listener {
|
74
74
|
int fd;
|
75
75
|
grpc_fd *emfd;
|
76
76
|
grpc_udp_server *server;
|
77
|
-
|
78
|
-
uint8_t untyped[GRPC_MAX_SOCKADDR_SIZE];
|
79
|
-
struct sockaddr sockaddr;
|
80
|
-
} addr;
|
81
|
-
size_t addr_len;
|
77
|
+
grpc_resolved_address addr;
|
82
78
|
grpc_closure read_closure;
|
83
79
|
grpc_closure destroyed_closure;
|
84
80
|
grpc_udp_server_read_cb read_cb;
|
85
81
|
grpc_udp_server_orphan_cb orphan_cb;
|
86
|
-
|
82
|
+
|
83
|
+
struct grpc_udp_listener *next;
|
84
|
+
};
|
87
85
|
|
88
86
|
/* the overall server */
|
89
87
|
struct grpc_udp_server {
|
90
88
|
gpr_mu mu;
|
91
|
-
gpr_cv cv;
|
92
89
|
|
93
90
|
/* active port count: how many ports are actually still listening */
|
94
91
|
size_t active_ports;
|
@@ -98,10 +95,10 @@ struct grpc_udp_server {
|
|
98
95
|
/* is this server shutting down? (boolean) */
|
99
96
|
int shutdown;
|
100
97
|
|
101
|
-
/*
|
102
|
-
|
103
|
-
|
104
|
-
|
98
|
+
/* linked list of server ports */
|
99
|
+
grpc_udp_listener *head;
|
100
|
+
grpc_udp_listener *tail;
|
101
|
+
unsigned nports;
|
105
102
|
|
106
103
|
/* shutdown callback */
|
107
104
|
grpc_closure *shutdown_complete;
|
@@ -117,24 +114,29 @@ struct grpc_udp_server {
|
|
117
114
|
grpc_udp_server *grpc_udp_server_create(void) {
|
118
115
|
grpc_udp_server *s = gpr_malloc(sizeof(grpc_udp_server));
|
119
116
|
gpr_mu_init(&s->mu);
|
120
|
-
gpr_cv_init(&s->cv);
|
121
117
|
s->active_ports = 0;
|
122
118
|
s->destroyed_ports = 0;
|
123
119
|
s->shutdown = 0;
|
124
|
-
s->
|
120
|
+
s->head = NULL;
|
121
|
+
s->tail = NULL;
|
125
122
|
s->nports = 0;
|
126
|
-
s->port_capacity = INIT_PORT_CAP;
|
127
123
|
|
128
124
|
return s;
|
129
125
|
}
|
130
126
|
|
131
127
|
static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
|
132
|
-
|
128
|
+
if (s->shutdown_complete != NULL) {
|
129
|
+
grpc_closure_sched(exec_ctx, s->shutdown_complete, GRPC_ERROR_NONE);
|
130
|
+
}
|
133
131
|
|
134
132
|
gpr_mu_destroy(&s->mu);
|
135
|
-
gpr_cv_destroy(&s->cv);
|
136
133
|
|
137
|
-
|
134
|
+
while (s->head) {
|
135
|
+
grpc_udp_listener *sp = s->head;
|
136
|
+
s->head = sp->next;
|
137
|
+
gpr_free(sp);
|
138
|
+
}
|
139
|
+
|
138
140
|
gpr_free(s);
|
139
141
|
}
|
140
142
|
|
@@ -155,8 +157,6 @@ static void destroyed_port(grpc_exec_ctx *exec_ctx, void *server,
|
|
155
157
|
events will be received on them - at this point it's safe to destroy
|
156
158
|
things */
|
157
159
|
static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
|
158
|
-
size_t i;
|
159
|
-
|
160
160
|
/* delete ALL the things */
|
161
161
|
gpr_mu_lock(&s->mu);
|
162
162
|
|
@@ -165,12 +165,16 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
|
|
165
165
|
return;
|
166
166
|
}
|
167
167
|
|
168
|
-
if (s->
|
169
|
-
|
170
|
-
|
171
|
-
sp->
|
172
|
-
|
168
|
+
if (s->head) {
|
169
|
+
grpc_udp_listener *sp;
|
170
|
+
for (sp = s->head; sp; sp = sp->next) {
|
171
|
+
grpc_unlink_if_unix_domain_socket(&sp->addr);
|
172
|
+
|
173
|
+
grpc_closure_init(&sp->destroyed_closure, destroyed_port, s,
|
174
|
+
grpc_schedule_on_exec_ctx);
|
173
175
|
|
176
|
+
/* Call the orphan_cb to signal that the FD is about to be closed and
|
177
|
+
* should no longer be used. */
|
174
178
|
GPR_ASSERT(sp->orphan_cb);
|
175
179
|
sp->orphan_cb(sp->emfd);
|
176
180
|
|
@@ -186,7 +190,7 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
|
|
186
190
|
|
187
191
|
void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
|
188
192
|
grpc_closure *on_done) {
|
189
|
-
|
193
|
+
grpc_udp_listener *sp;
|
190
194
|
gpr_mu_lock(&s->mu);
|
191
195
|
|
192
196
|
GPR_ASSERT(!s->shutdown);
|
@@ -196,8 +200,10 @@ void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
|
|
196
200
|
|
197
201
|
/* shutdown all fd's */
|
198
202
|
if (s->active_ports) {
|
199
|
-
for (
|
200
|
-
|
203
|
+
for (sp = s->head; sp; sp = sp->next) {
|
204
|
+
GPR_ASSERT(sp->orphan_cb);
|
205
|
+
sp->orphan_cb(sp->emfd);
|
206
|
+
grpc_fd_shutdown(exec_ctx, sp->emfd);
|
201
207
|
}
|
202
208
|
gpr_mu_unlock(&s->mu);
|
203
209
|
} else {
|
@@ -207,10 +213,9 @@ void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
|
|
207
213
|
}
|
208
214
|
|
209
215
|
/* Prepare a recently-created socket for listening. */
|
210
|
-
static int prepare_socket(int fd, const
|
211
|
-
|
212
|
-
struct
|
213
|
-
socklen_t sockname_len;
|
216
|
+
static int prepare_socket(int fd, const grpc_resolved_address *addr) {
|
217
|
+
grpc_resolved_address sockname_temp;
|
218
|
+
struct sockaddr *addr_ptr = (struct sockaddr *)addr->addr;
|
214
219
|
/* Set send/receive socket buffers to 1 MB */
|
215
220
|
int buffer_size_bytes = 1024 * 1024;
|
216
221
|
|
@@ -230,15 +235,15 @@ static int prepare_socket(int fd, const struct sockaddr *addr,
|
|
230
235
|
if (grpc_set_socket_ip_pktinfo_if_possible(fd) != GRPC_ERROR_NONE) {
|
231
236
|
gpr_log(GPR_ERROR, "Unable to set ip_pktinfo.");
|
232
237
|
goto error;
|
233
|
-
} else if (
|
238
|
+
} else if (addr_ptr->sa_family == AF_INET6) {
|
234
239
|
if (grpc_set_socket_ipv6_recvpktinfo_if_possible(fd) != GRPC_ERROR_NONE) {
|
235
240
|
gpr_log(GPR_ERROR, "Unable to set ipv6_recvpktinfo.");
|
236
241
|
goto error;
|
237
242
|
}
|
238
243
|
}
|
239
244
|
|
240
|
-
GPR_ASSERT(
|
241
|
-
if (bind(fd, addr, (socklen_t)
|
245
|
+
GPR_ASSERT(addr->len < ~(socklen_t)0);
|
246
|
+
if (bind(fd, (struct sockaddr *)addr, (socklen_t)addr->len) < 0) {
|
242
247
|
char *addr_str;
|
243
248
|
grpc_sockaddr_to_string(&addr_str, addr, 0);
|
244
249
|
gpr_log(GPR_ERROR, "bind addr=%s: %s", addr_str, strerror(errno));
|
@@ -246,8 +251,10 @@ static int prepare_socket(int fd, const struct sockaddr *addr,
|
|
246
251
|
goto error;
|
247
252
|
}
|
248
253
|
|
249
|
-
|
250
|
-
|
254
|
+
sockname_temp.len = sizeof(struct sockaddr_storage);
|
255
|
+
|
256
|
+
if (getsockname(fd, (struct sockaddr *)sockname_temp.addr,
|
257
|
+
(socklen_t *)&sockname_temp.len) < 0) {
|
251
258
|
goto error;
|
252
259
|
}
|
253
260
|
|
@@ -263,7 +270,7 @@ static int prepare_socket(int fd, const struct sockaddr *addr,
|
|
263
270
|
goto error;
|
264
271
|
}
|
265
272
|
|
266
|
-
return grpc_sockaddr_get_port(
|
273
|
+
return grpc_sockaddr_get_port(&sockname_temp);
|
267
274
|
|
268
275
|
error:
|
269
276
|
if (fd >= 0) {
|
@@ -274,10 +281,10 @@ error:
|
|
274
281
|
|
275
282
|
/* event manager callback when reads are ready */
|
276
283
|
static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
277
|
-
|
284
|
+
grpc_udp_listener *sp = arg;
|
278
285
|
|
286
|
+
gpr_mu_lock(&sp->server->mu);
|
279
287
|
if (error != GRPC_ERROR_NONE) {
|
280
|
-
gpr_mu_lock(&sp->server->mu);
|
281
288
|
if (0 == --sp->server->active_ports) {
|
282
289
|
gpr_mu_unlock(&sp->server->mu);
|
283
290
|
deactivated_all_ports(exec_ctx, sp->server);
|
@@ -293,34 +300,37 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
|
293
300
|
|
294
301
|
/* Re-arm the notification event so we get another chance to read. */
|
295
302
|
grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
|
303
|
+
gpr_mu_unlock(&sp->server->mu);
|
296
304
|
}
|
297
305
|
|
298
306
|
static int add_socket_to_server(grpc_udp_server *s, int fd,
|
299
|
-
const
|
307
|
+
const grpc_resolved_address *addr,
|
300
308
|
grpc_udp_server_read_cb read_cb,
|
301
309
|
grpc_udp_server_orphan_cb orphan_cb) {
|
302
|
-
|
310
|
+
grpc_udp_listener *sp;
|
303
311
|
int port;
|
304
312
|
char *addr_str;
|
305
313
|
char *name;
|
306
314
|
|
307
|
-
port = prepare_socket(fd, addr
|
315
|
+
port = prepare_socket(fd, addr);
|
308
316
|
if (port >= 0) {
|
309
|
-
grpc_sockaddr_to_string(&addr_str,
|
317
|
+
grpc_sockaddr_to_string(&addr_str, addr, 1);
|
310
318
|
gpr_asprintf(&name, "udp-server-listener:%s", addr_str);
|
311
319
|
gpr_free(addr_str);
|
312
320
|
gpr_mu_lock(&s->mu);
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
321
|
+
s->nports++;
|
322
|
+
sp = gpr_malloc(sizeof(grpc_udp_listener));
|
323
|
+
sp->next = NULL;
|
324
|
+
if (s->head == NULL) {
|
325
|
+
s->head = sp;
|
326
|
+
} else {
|
327
|
+
s->tail->next = sp;
|
317
328
|
}
|
318
|
-
|
329
|
+
s->tail = sp;
|
319
330
|
sp->server = s;
|
320
331
|
sp->fd = fd;
|
321
332
|
sp->emfd = grpc_fd_create(fd, name);
|
322
|
-
memcpy(sp->addr
|
323
|
-
sp->addr_len = addr_len;
|
333
|
+
memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
|
324
334
|
sp->read_cb = read_cb;
|
325
335
|
sp->orphan_cb = orphan_cb;
|
326
336
|
GPR_ASSERT(sp->emfd);
|
@@ -331,34 +341,34 @@ static int add_socket_to_server(grpc_udp_server *s, int fd,
|
|
331
341
|
return port;
|
332
342
|
}
|
333
343
|
|
334
|
-
int grpc_udp_server_add_port(grpc_udp_server *s,
|
335
|
-
|
344
|
+
int grpc_udp_server_add_port(grpc_udp_server *s,
|
345
|
+
const grpc_resolved_address *addr,
|
346
|
+
grpc_udp_server_read_cb read_cb,
|
336
347
|
grpc_udp_server_orphan_cb orphan_cb) {
|
348
|
+
grpc_udp_listener *sp;
|
337
349
|
int allocated_port1 = -1;
|
338
350
|
int allocated_port2 = -1;
|
339
|
-
unsigned i;
|
340
351
|
int fd;
|
341
352
|
grpc_dualstack_mode dsmode;
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
socklen_t sockname_len;
|
353
|
+
grpc_resolved_address addr6_v4mapped;
|
354
|
+
grpc_resolved_address wild4;
|
355
|
+
grpc_resolved_address wild6;
|
356
|
+
grpc_resolved_address addr4_copy;
|
357
|
+
grpc_resolved_address *allocated_addr = NULL;
|
358
|
+
grpc_resolved_address sockname_temp;
|
349
359
|
int port;
|
350
360
|
|
351
361
|
/* Check if this is a wildcard port, and if so, try to keep the port the same
|
352
362
|
as some previously created listener. */
|
353
363
|
if (grpc_sockaddr_get_port(addr) == 0) {
|
354
|
-
for (
|
355
|
-
|
356
|
-
if (0 == getsockname(
|
357
|
-
&
|
358
|
-
port = grpc_sockaddr_get_port(
|
364
|
+
for (sp = s->head; sp; sp = sp->next) {
|
365
|
+
sockname_temp.len = sizeof(struct sockaddr_storage);
|
366
|
+
if (0 == getsockname(sp->fd, (struct sockaddr *)sockname_temp.addr,
|
367
|
+
(socklen_t *)&sockname_temp.len)) {
|
368
|
+
port = grpc_sockaddr_get_port(&sockname_temp);
|
359
369
|
if (port > 0) {
|
360
|
-
allocated_addr = gpr_malloc(
|
361
|
-
memcpy(allocated_addr, addr,
|
370
|
+
allocated_addr = gpr_malloc(sizeof(grpc_resolved_address));
|
371
|
+
memcpy(allocated_addr, addr, sizeof(grpc_resolved_address));
|
362
372
|
grpc_sockaddr_set_port(allocated_addr, port);
|
363
373
|
addr = allocated_addr;
|
364
374
|
break;
|
@@ -368,8 +378,7 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
|
|
368
378
|
}
|
369
379
|
|
370
380
|
if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
|
371
|
-
addr =
|
372
|
-
addr_len = sizeof(addr6_v4mapped);
|
381
|
+
addr = &addr6_v4mapped;
|
373
382
|
}
|
374
383
|
|
375
384
|
/* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
|
@@ -377,36 +386,33 @@ int grpc_udp_server_add_port(grpc_udp_server *s, const void *addr,
|
|
377
386
|
grpc_sockaddr_make_wildcards(port, &wild4, &wild6);
|
378
387
|
|
379
388
|
/* Try listening on IPv6 first. */
|
380
|
-
addr =
|
381
|
-
addr_len = sizeof(wild6);
|
389
|
+
addr = &wild6;
|
382
390
|
// TODO(rjshade): Test and propagate the returned grpc_error*:
|
383
|
-
grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP,
|
384
|
-
|
385
|
-
|
391
|
+
GRPC_ERROR_UNREF(grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP,
|
392
|
+
&dsmode, &fd));
|
393
|
+
allocated_port1 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb);
|
386
394
|
if (fd >= 0 && dsmode == GRPC_DSMODE_DUALSTACK) {
|
387
395
|
goto done;
|
388
396
|
}
|
389
397
|
|
390
398
|
/* If we didn't get a dualstack socket, also listen on 0.0.0.0. */
|
391
399
|
if (port == 0 && allocated_port1 > 0) {
|
392
|
-
grpc_sockaddr_set_port(
|
400
|
+
grpc_sockaddr_set_port(&wild4, allocated_port1);
|
393
401
|
}
|
394
|
-
addr =
|
395
|
-
addr_len = sizeof(wild4);
|
402
|
+
addr = &wild4;
|
396
403
|
}
|
397
404
|
|
398
405
|
// TODO(rjshade): Test and propagate the returned grpc_error*:
|
399
|
-
grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP,
|
406
|
+
GRPC_ERROR_UNREF(grpc_create_dualstack_socket(addr, SOCK_DGRAM, IPPROTO_UDP,
|
407
|
+
&dsmode, &fd));
|
400
408
|
if (fd < 0) {
|
401
409
|
gpr_log(GPR_ERROR, "Unable to create socket: %s", strerror(errno));
|
402
410
|
}
|
403
411
|
if (dsmode == GRPC_DSMODE_IPV4 &&
|
404
412
|
grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) {
|
405
|
-
addr =
|
406
|
-
addr_len = sizeof(addr4_copy);
|
413
|
+
addr = &addr4_copy;
|
407
414
|
}
|
408
|
-
allocated_port2 =
|
409
|
-
add_socket_to_server(s, fd, addr, addr_len, read_cb, orphan_cb);
|
415
|
+
allocated_port2 = add_socket_to_server(s, fd, addr, read_cb, orphan_cb);
|
410
416
|
|
411
417
|
done:
|
412
418
|
gpr_free(allocated_addr);
|
@@ -414,29 +420,41 @@ done:
|
|
414
420
|
}
|
415
421
|
|
416
422
|
int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned port_index) {
|
417
|
-
|
423
|
+
grpc_udp_listener *sp;
|
424
|
+
if (port_index >= s->nports) {
|
425
|
+
return -1;
|
426
|
+
}
|
427
|
+
|
428
|
+
for (sp = s->head; sp && port_index != 0; sp = sp->next) {
|
429
|
+
--port_index;
|
430
|
+
}
|
431
|
+
return sp->fd;
|
418
432
|
}
|
419
433
|
|
420
434
|
void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
|
421
435
|
grpc_pollset **pollsets, size_t pollset_count,
|
422
436
|
grpc_server *server) {
|
423
|
-
size_t i
|
437
|
+
size_t i;
|
424
438
|
gpr_mu_lock(&s->mu);
|
439
|
+
grpc_udp_listener *sp;
|
425
440
|
GPR_ASSERT(s->active_ports == 0);
|
426
441
|
s->pollsets = pollsets;
|
427
442
|
s->grpc_server = server;
|
428
|
-
|
429
|
-
|
430
|
-
|
443
|
+
|
444
|
+
sp = s->head;
|
445
|
+
while (sp != NULL) {
|
446
|
+
for (i = 0; i < pollset_count; i++) {
|
447
|
+
grpc_pollset_add_fd(exec_ctx, pollsets[i], sp->emfd);
|
431
448
|
}
|
432
|
-
|
433
|
-
|
434
|
-
grpc_fd_notify_on_read(exec_ctx,
|
435
|
-
|
449
|
+
grpc_closure_init(&sp->read_closure, on_read, sp,
|
450
|
+
grpc_schedule_on_exec_ctx);
|
451
|
+
grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
|
452
|
+
|
436
453
|
s->active_ports++;
|
454
|
+
sp = sp->next;
|
437
455
|
}
|
456
|
+
|
438
457
|
gpr_mu_unlock(&s->mu);
|
439
458
|
}
|
440
459
|
|
441
460
|
#endif
|
442
|
-
#endif
|