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
@@ -34,9 +34,15 @@
|
|
34
34
|
#ifndef GRPC_CORE_LIB_TRANSPORT_METADATA_H
|
35
35
|
#define GRPC_CORE_LIB_TRANSPORT_METADATA_H
|
36
36
|
|
37
|
-
#include <grpc/
|
37
|
+
#include <grpc/slice.h>
|
38
38
|
#include <grpc/support/useful.h>
|
39
39
|
|
40
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
41
|
+
|
42
|
+
#ifdef __cplusplus
|
43
|
+
extern "C" {
|
44
|
+
#endif
|
45
|
+
|
40
46
|
/* This file provides a mechanism for tracking metadata through the grpc stack.
|
41
47
|
It's not intended for consumption outside of the library.
|
42
48
|
|
@@ -73,7 +79,7 @@ typedef struct grpc_mdelem grpc_mdelem;
|
|
73
79
|
|
74
80
|
/* if changing this, make identical changes in internal_string in metadata.c */
|
75
81
|
struct grpc_mdstr {
|
76
|
-
const
|
82
|
+
const grpc_slice slice;
|
77
83
|
const uint32_t hash;
|
78
84
|
/* there is a private part to this in metadata.c */
|
79
85
|
};
|
@@ -92,21 +98,25 @@ void grpc_test_only_set_metadata_hash_seed(uint32_t seed);
|
|
92
98
|
clients may have handy */
|
93
99
|
grpc_mdstr *grpc_mdstr_from_string(const char *str);
|
94
100
|
/* Unrefs the slice. */
|
95
|
-
grpc_mdstr *grpc_mdstr_from_slice(
|
101
|
+
grpc_mdstr *grpc_mdstr_from_slice(grpc_exec_ctx *exec_ctx, grpc_slice slice);
|
96
102
|
grpc_mdstr *grpc_mdstr_from_buffer(const uint8_t *str, size_t length);
|
97
103
|
|
98
104
|
/* Returns a borrowed slice from the mdstr with its contents base64 encoded
|
99
105
|
and huffman compressed */
|
100
|
-
|
106
|
+
grpc_slice grpc_mdstr_as_base64_encoded_and_huffman_compressed(grpc_mdstr *str);
|
101
107
|
|
102
108
|
/* Constructors for grpc_mdelem instances; take a variety of data types that
|
103
109
|
clients may have handy */
|
104
|
-
grpc_mdelem *grpc_mdelem_from_metadata_strings(
|
110
|
+
grpc_mdelem *grpc_mdelem_from_metadata_strings(grpc_exec_ctx *exec_ctx,
|
111
|
+
grpc_mdstr *key,
|
105
112
|
grpc_mdstr *value);
|
106
|
-
grpc_mdelem *grpc_mdelem_from_strings(
|
113
|
+
grpc_mdelem *grpc_mdelem_from_strings(grpc_exec_ctx *exec_ctx, const char *key,
|
114
|
+
const char *value);
|
107
115
|
/* Unrefs the slices. */
|
108
|
-
grpc_mdelem *grpc_mdelem_from_slices(
|
109
|
-
|
116
|
+
grpc_mdelem *grpc_mdelem_from_slices(grpc_exec_ctx *exec_ctx, grpc_slice key,
|
117
|
+
grpc_slice value);
|
118
|
+
grpc_mdelem *grpc_mdelem_from_string_and_buffer(grpc_exec_ctx *exec_ctx,
|
119
|
+
const char *key,
|
110
120
|
const uint8_t *value,
|
111
121
|
size_t value_length);
|
112
122
|
|
@@ -116,36 +126,40 @@ size_t grpc_mdelem_get_size_in_hpack_table(grpc_mdelem *elem);
|
|
116
126
|
is used as a type tag and is checked during user_data fetch. */
|
117
127
|
void *grpc_mdelem_get_user_data(grpc_mdelem *md,
|
118
128
|
void (*if_destroy_func)(void *));
|
119
|
-
void grpc_mdelem_set_user_data(grpc_mdelem *md, void (*destroy_func)(void *),
|
120
|
-
|
129
|
+
void *grpc_mdelem_set_user_data(grpc_mdelem *md, void (*destroy_func)(void *),
|
130
|
+
void *user_data);
|
121
131
|
|
122
132
|
/* Reference counting */
|
123
133
|
//#define GRPC_METADATA_REFCOUNT_DEBUG
|
124
134
|
#ifdef GRPC_METADATA_REFCOUNT_DEBUG
|
125
135
|
#define GRPC_MDSTR_REF(s) grpc_mdstr_ref((s), __FILE__, __LINE__)
|
126
|
-
#define GRPC_MDSTR_UNREF(
|
136
|
+
#define GRPC_MDSTR_UNREF(exec_ctx, s) \
|
137
|
+
grpc_mdstr_unref((exec_ctx), (s), __FILE__, __LINE__)
|
127
138
|
#define GRPC_MDELEM_REF(s) grpc_mdelem_ref((s), __FILE__, __LINE__)
|
128
|
-
#define GRPC_MDELEM_UNREF(
|
139
|
+
#define GRPC_MDELEM_UNREF(exec_ctx, s) \
|
140
|
+
grpc_mdelem_unref((exec_ctx), (s), __FILE__, __LINE__)
|
129
141
|
grpc_mdstr *grpc_mdstr_ref(grpc_mdstr *s, const char *file, int line);
|
130
|
-
void grpc_mdstr_unref(grpc_mdstr *s, const char *file,
|
142
|
+
void grpc_mdstr_unref(grpc_exec_ctx *exec_ctx, grpc_mdstr *s, const char *file,
|
143
|
+
int line);
|
131
144
|
grpc_mdelem *grpc_mdelem_ref(grpc_mdelem *md, const char *file, int line);
|
132
|
-
void grpc_mdelem_unref(
|
145
|
+
void grpc_mdelem_unref(grpc_exec_ctx *exec_ctx, grpc_mdelem *md,
|
146
|
+
const char *file, int line);
|
133
147
|
#else
|
134
148
|
#define GRPC_MDSTR_REF(s) grpc_mdstr_ref((s))
|
135
|
-
#define GRPC_MDSTR_UNREF(s) grpc_mdstr_unref((s))
|
149
|
+
#define GRPC_MDSTR_UNREF(exec_ctx, s) grpc_mdstr_unref((exec_ctx), (s))
|
136
150
|
#define GRPC_MDELEM_REF(s) grpc_mdelem_ref((s))
|
137
|
-
#define GRPC_MDELEM_UNREF(s) grpc_mdelem_unref((s))
|
151
|
+
#define GRPC_MDELEM_UNREF(exec_ctx, s) grpc_mdelem_unref((exec_ctx), (s))
|
138
152
|
grpc_mdstr *grpc_mdstr_ref(grpc_mdstr *s);
|
139
|
-
void grpc_mdstr_unref(grpc_mdstr *s);
|
153
|
+
void grpc_mdstr_unref(grpc_exec_ctx *exec_ctx, grpc_mdstr *s);
|
140
154
|
grpc_mdelem *grpc_mdelem_ref(grpc_mdelem *md);
|
141
|
-
void grpc_mdelem_unref(grpc_mdelem *md);
|
155
|
+
void grpc_mdelem_unref(grpc_exec_ctx *exec_ctx, grpc_mdelem *md);
|
142
156
|
#endif
|
143
157
|
|
144
158
|
/* Recover a char* from a grpc_mdstr. The returned string is null terminated.
|
145
159
|
Does not promise that the returned string has no embedded nulls however. */
|
146
|
-
const char *grpc_mdstr_as_c_string(grpc_mdstr *s);
|
160
|
+
const char *grpc_mdstr_as_c_string(const grpc_mdstr *s);
|
147
161
|
|
148
|
-
#define GRPC_MDSTR_LENGTH(s) (
|
162
|
+
#define GRPC_MDSTR_LENGTH(s) (GRPC_SLICE_LENGTH(s->slice))
|
149
163
|
|
150
164
|
/* We add 32 bytes of padding as per RFC-7540 section 6.5.2. */
|
151
165
|
#define GRPC_MDELEM_LENGTH(e) \
|
@@ -158,10 +172,14 @@ int grpc_mdstr_is_bin_suffixed(grpc_mdstr *s);
|
|
158
172
|
#define GRPC_MDSTR_KV_HASH(k_hash, v_hash) (GPR_ROTL((k_hash), 2) ^ (v_hash))
|
159
173
|
|
160
174
|
void grpc_mdctx_global_init(void);
|
161
|
-
void grpc_mdctx_global_shutdown(
|
175
|
+
void grpc_mdctx_global_shutdown(grpc_exec_ctx *exec_ctx);
|
162
176
|
|
163
177
|
/* Implementation provided by chttp2_transport */
|
164
|
-
extern
|
165
|
-
|
178
|
+
extern grpc_slice (*grpc_chttp2_base64_encode_and_huffman_compress)(
|
179
|
+
grpc_slice input);
|
180
|
+
|
181
|
+
#ifdef __cplusplus
|
182
|
+
}
|
183
|
+
#endif
|
166
184
|
|
167
185
|
#endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_H */
|
@@ -33,6 +33,7 @@
|
|
33
33
|
|
34
34
|
#include "src/core/lib/transport/metadata_batch.h"
|
35
35
|
|
36
|
+
#include <stdbool.h>
|
36
37
|
#include <string.h>
|
37
38
|
|
38
39
|
#include <grpc/support/alloc.h>
|
@@ -71,10 +72,11 @@ void grpc_metadata_batch_init(grpc_metadata_batch *batch) {
|
|
71
72
|
batch->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
72
73
|
}
|
73
74
|
|
74
|
-
void grpc_metadata_batch_destroy(
|
75
|
+
void grpc_metadata_batch_destroy(grpc_exec_ctx *exec_ctx,
|
76
|
+
grpc_metadata_batch *batch) {
|
75
77
|
grpc_linked_mdelem *l;
|
76
78
|
for (l = batch->list.head; l; l = l->next) {
|
77
|
-
GRPC_MDELEM_UNREF(l->md);
|
79
|
+
GRPC_MDELEM_UNREF(exec_ctx, l->md);
|
78
80
|
}
|
79
81
|
}
|
80
82
|
|
@@ -139,8 +141,10 @@ void grpc_metadata_batch_move(grpc_metadata_batch *dst,
|
|
139
141
|
memset(src, 0, sizeof(grpc_metadata_batch));
|
140
142
|
}
|
141
143
|
|
142
|
-
void grpc_metadata_batch_filter(
|
143
|
-
|
144
|
+
void grpc_metadata_batch_filter(grpc_exec_ctx *exec_ctx,
|
145
|
+
grpc_metadata_batch *batch,
|
146
|
+
grpc_mdelem *(*filter)(grpc_exec_ctx *exec_ctx,
|
147
|
+
void *user_data,
|
144
148
|
grpc_mdelem *elem),
|
145
149
|
void *user_data) {
|
146
150
|
grpc_linked_mdelem *l;
|
@@ -151,7 +155,7 @@ void grpc_metadata_batch_filter(grpc_metadata_batch *batch,
|
|
151
155
|
assert_valid_list(&batch->list);
|
152
156
|
for (l = batch->list.head; l; l = next) {
|
153
157
|
grpc_mdelem *orig = l->md;
|
154
|
-
grpc_mdelem *filt = filter(user_data, orig);
|
158
|
+
grpc_mdelem *filt = filter(exec_ctx, user_data, orig);
|
155
159
|
next = l->next;
|
156
160
|
if (filt == NULL) {
|
157
161
|
if (l->prev) {
|
@@ -167,9 +171,9 @@ void grpc_metadata_batch_filter(grpc_metadata_batch *batch,
|
|
167
171
|
batch->list.tail = l->prev;
|
168
172
|
}
|
169
173
|
assert_valid_list(&batch->list);
|
170
|
-
GRPC_MDELEM_UNREF(l->md);
|
174
|
+
GRPC_MDELEM_UNREF(exec_ctx, l->md);
|
171
175
|
} else if (filt != orig) {
|
172
|
-
GRPC_MDELEM_UNREF(orig);
|
176
|
+
GRPC_MDELEM_UNREF(exec_ctx, orig);
|
173
177
|
l->md = filt;
|
174
178
|
}
|
175
179
|
}
|
@@ -178,16 +182,18 @@ void grpc_metadata_batch_filter(grpc_metadata_batch *batch,
|
|
178
182
|
GPR_TIMER_END("grpc_metadata_batch_filter", 0);
|
179
183
|
}
|
180
184
|
|
181
|
-
static grpc_mdelem *no_metadata_for_you(
|
185
|
+
static grpc_mdelem *no_metadata_for_you(grpc_exec_ctx *exec_ctx,
|
186
|
+
void *user_data, grpc_mdelem *elem) {
|
182
187
|
return NULL;
|
183
188
|
}
|
184
189
|
|
185
|
-
void grpc_metadata_batch_clear(
|
190
|
+
void grpc_metadata_batch_clear(grpc_exec_ctx *exec_ctx,
|
191
|
+
grpc_metadata_batch *batch) {
|
186
192
|
batch->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
|
187
|
-
grpc_metadata_batch_filter(batch, no_metadata_for_you, NULL);
|
193
|
+
grpc_metadata_batch_filter(exec_ctx, batch, no_metadata_for_you, NULL);
|
188
194
|
}
|
189
195
|
|
190
|
-
|
196
|
+
bool grpc_metadata_batch_is_empty(grpc_metadata_batch *batch) {
|
191
197
|
return batch->list.head == NULL &&
|
192
198
|
gpr_time_cmp(gpr_inf_future(batch->deadline.clock_type),
|
193
199
|
batch->deadline) == 0;
|
@@ -34,12 +34,18 @@
|
|
34
34
|
#ifndef GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H
|
35
35
|
#define GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H
|
36
36
|
|
37
|
+
#include <stdbool.h>
|
38
|
+
|
37
39
|
#include <grpc/grpc.h>
|
40
|
+
#include <grpc/slice.h>
|
38
41
|
#include <grpc/support/port_platform.h>
|
39
|
-
#include <grpc/support/slice.h>
|
40
42
|
#include <grpc/support/time.h>
|
41
43
|
#include "src/core/lib/transport/metadata.h"
|
42
44
|
|
45
|
+
#ifdef __cplusplus
|
46
|
+
extern "C" {
|
47
|
+
#endif
|
48
|
+
|
43
49
|
typedef struct grpc_linked_mdelem {
|
44
50
|
grpc_mdelem *md;
|
45
51
|
struct grpc_linked_mdelem *next;
|
@@ -62,9 +68,11 @@ typedef struct grpc_metadata_batch {
|
|
62
68
|
} grpc_metadata_batch;
|
63
69
|
|
64
70
|
void grpc_metadata_batch_init(grpc_metadata_batch *batch);
|
65
|
-
void grpc_metadata_batch_destroy(
|
66
|
-
|
67
|
-
|
71
|
+
void grpc_metadata_batch_destroy(grpc_exec_ctx *exec_ctx,
|
72
|
+
grpc_metadata_batch *batch);
|
73
|
+
void grpc_metadata_batch_clear(grpc_exec_ctx *exec_ctx,
|
74
|
+
grpc_metadata_batch *batch);
|
75
|
+
bool grpc_metadata_batch_is_empty(grpc_metadata_batch *batch);
|
68
76
|
|
69
77
|
/* Returns the transport size of the batch. */
|
70
78
|
size_t grpc_metadata_batch_size(grpc_metadata_batch *batch);
|
@@ -112,8 +120,10 @@ void grpc_metadata_batch_add_tail(grpc_metadata_batch *batch,
|
|
112
120
|
The return value from \a filter will be substituted for the
|
113
121
|
grpc_mdelem passed to \a filter. If \a filter returns NULL,
|
114
122
|
the element will be moved to the garbage list. */
|
115
|
-
void grpc_metadata_batch_filter(
|
116
|
-
|
123
|
+
void grpc_metadata_batch_filter(grpc_exec_ctx *exec_ctx,
|
124
|
+
grpc_metadata_batch *batch,
|
125
|
+
grpc_mdelem *(*filter)(grpc_exec_ctx *exec_ctx,
|
126
|
+
void *user_data,
|
117
127
|
grpc_mdelem *elem),
|
118
128
|
void *user_data);
|
119
129
|
|
@@ -125,4 +135,8 @@ void grpc_metadata_batch_assert_ok(grpc_metadata_batch *comd);
|
|
125
135
|
} while (0)
|
126
136
|
#endif
|
127
137
|
|
138
|
+
#ifdef __cplusplus
|
139
|
+
}
|
140
|
+
#endif
|
141
|
+
|
128
142
|
#endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H */
|
@@ -0,0 +1,57 @@
|
|
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/transport/pid_controller.h"
|
35
|
+
|
36
|
+
void grpc_pid_controller_init(grpc_pid_controller *pid_controller,
|
37
|
+
double gain_p, double gain_i, double gain_d) {
|
38
|
+
pid_controller->gain_p = gain_p;
|
39
|
+
pid_controller->gain_i = gain_i;
|
40
|
+
pid_controller->gain_d = gain_d;
|
41
|
+
grpc_pid_controller_reset(pid_controller);
|
42
|
+
}
|
43
|
+
|
44
|
+
void grpc_pid_controller_reset(grpc_pid_controller *pid_controller) {
|
45
|
+
pid_controller->last_error = 0.0;
|
46
|
+
pid_controller->error_integral = 0.0;
|
47
|
+
}
|
48
|
+
|
49
|
+
double grpc_pid_controller_update(grpc_pid_controller *pid_controller,
|
50
|
+
double error, double dt) {
|
51
|
+
pid_controller->error_integral += error * dt;
|
52
|
+
double diff_error = (error - pid_controller->last_error) / dt;
|
53
|
+
pid_controller->last_error = error;
|
54
|
+
return dt * (pid_controller->gain_p * error +
|
55
|
+
pid_controller->gain_i * pid_controller->error_integral +
|
56
|
+
pid_controller->gain_d * diff_error);
|
57
|
+
}
|
@@ -0,0 +1,64 @@
|
|
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_TRANSPORT_PID_CONTROLLER_H
|
35
|
+
#define GRPC_CORE_LIB_TRANSPORT_PID_CONTROLLER_H
|
36
|
+
|
37
|
+
/* \file Simple PID controller.
|
38
|
+
Implements a proportional-integral-derivative controller.
|
39
|
+
Used when we want to iteratively control a variable to converge some other
|
40
|
+
observed value to a 'set-point'.
|
41
|
+
Gains can be set to adjust sensitivity to current error (p), the integral
|
42
|
+
of error (i), and the derivative of error (d). */
|
43
|
+
|
44
|
+
typedef struct {
|
45
|
+
double gain_p;
|
46
|
+
double gain_i;
|
47
|
+
double gain_d;
|
48
|
+
double last_error;
|
49
|
+
double error_integral;
|
50
|
+
} grpc_pid_controller;
|
51
|
+
|
52
|
+
/** Initialize the controller */
|
53
|
+
void grpc_pid_controller_init(grpc_pid_controller *pid_controller,
|
54
|
+
double gain_p, double gain_i, double gain_d);
|
55
|
+
|
56
|
+
/** Reset the controller: useful when things have changed significantly */
|
57
|
+
void grpc_pid_controller_reset(grpc_pid_controller *pid_controller);
|
58
|
+
|
59
|
+
/** Update the controller: given a current error estimate, and the time since
|
60
|
+
the last update, returns a delta to the control value */
|
61
|
+
double grpc_pid_controller_update(grpc_pid_controller *pid_controller,
|
62
|
+
double error, double dt);
|
63
|
+
|
64
|
+
#endif /* GRPC_CORE_LIB_TRANSPORT_PID_CONTROLLER_H */
|
@@ -0,0 +1,251 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2015, Google Inc.
|
3
|
+
// All rights reserved.
|
4
|
+
//
|
5
|
+
// Redistribution and use in source and binary forms, with or without
|
6
|
+
// modification, are permitted provided that the following conditions are
|
7
|
+
// met:
|
8
|
+
//
|
9
|
+
// * Redistributions of source code must retain the above copyright
|
10
|
+
// notice, this list of conditions and the following disclaimer.
|
11
|
+
// * Redistributions in binary form must reproduce the above
|
12
|
+
// copyright notice, this list of conditions and the following disclaimer
|
13
|
+
// in the documentation and/or other materials provided with the
|
14
|
+
// distribution.
|
15
|
+
// * Neither the name of Google Inc. nor the names of its
|
16
|
+
// contributors may be used to endorse or promote products derived from
|
17
|
+
// this software without specific prior written permission.
|
18
|
+
//
|
19
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
20
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
21
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
22
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
23
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
24
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
26
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
27
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
+
//
|
31
|
+
|
32
|
+
#include "src/core/lib/transport/service_config.h"
|
33
|
+
|
34
|
+
#include <string.h>
|
35
|
+
|
36
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
37
|
+
#include <grpc/support/alloc.h>
|
38
|
+
#include <grpc/support/log.h>
|
39
|
+
#include <grpc/support/string_util.h>
|
40
|
+
|
41
|
+
#include "src/core/lib/json/json.h"
|
42
|
+
#include "src/core/lib/support/string.h"
|
43
|
+
#include "src/core/lib/transport/mdstr_hash_table.h"
|
44
|
+
|
45
|
+
// The main purpose of the code here is to parse the service config in
|
46
|
+
// JSON form, which will look like this:
|
47
|
+
//
|
48
|
+
// {
|
49
|
+
// "loadBalancingPolicy": "string", // optional
|
50
|
+
// "methodConfig": [ // array of one or more method_config objects
|
51
|
+
// {
|
52
|
+
// "name": [ // array of one or more name objects
|
53
|
+
// {
|
54
|
+
// "service": "string", // required
|
55
|
+
// "method": "string", // optional
|
56
|
+
// }
|
57
|
+
// ],
|
58
|
+
// // remaining fields are optional.
|
59
|
+
// // see https://developers.google.com/protocol-buffers/docs/proto3#json
|
60
|
+
// // for format details.
|
61
|
+
// "waitForReady": bool,
|
62
|
+
// "timeout": "duration_string",
|
63
|
+
// "maxRequestMessageBytes": "int64_string",
|
64
|
+
// "maxResponseMessageBytes": "int64_string",
|
65
|
+
// }
|
66
|
+
// ]
|
67
|
+
// }
|
68
|
+
|
69
|
+
struct grpc_service_config {
|
70
|
+
char* json_string; // Underlying storage for json_tree.
|
71
|
+
grpc_json* json_tree;
|
72
|
+
};
|
73
|
+
|
74
|
+
grpc_service_config* grpc_service_config_create(const char* json_string) {
|
75
|
+
grpc_service_config* service_config = gpr_malloc(sizeof(*service_config));
|
76
|
+
service_config->json_string = gpr_strdup(json_string);
|
77
|
+
service_config->json_tree =
|
78
|
+
grpc_json_parse_string(service_config->json_string);
|
79
|
+
if (service_config->json_tree == NULL) {
|
80
|
+
gpr_log(GPR_INFO, "failed to parse JSON for service config");
|
81
|
+
gpr_free(service_config->json_string);
|
82
|
+
gpr_free(service_config);
|
83
|
+
return NULL;
|
84
|
+
}
|
85
|
+
return service_config;
|
86
|
+
}
|
87
|
+
|
88
|
+
void grpc_service_config_destroy(grpc_service_config* service_config) {
|
89
|
+
grpc_json_destroy(service_config->json_tree);
|
90
|
+
gpr_free(service_config->json_string);
|
91
|
+
gpr_free(service_config);
|
92
|
+
}
|
93
|
+
|
94
|
+
const char* grpc_service_config_get_lb_policy_name(
|
95
|
+
const grpc_service_config* service_config) {
|
96
|
+
const grpc_json* json = service_config->json_tree;
|
97
|
+
if (json->type != GRPC_JSON_OBJECT || json->key != NULL) return NULL;
|
98
|
+
const char* lb_policy_name = NULL;
|
99
|
+
for (grpc_json* field = json->child; field != NULL; field = field->next) {
|
100
|
+
if (field->key == NULL) return NULL;
|
101
|
+
if (strcmp(field->key, "loadBalancingPolicy") == 0) {
|
102
|
+
if (lb_policy_name != NULL) return NULL; // Duplicate.
|
103
|
+
if (field->type != GRPC_JSON_STRING) return NULL;
|
104
|
+
lb_policy_name = field->value;
|
105
|
+
}
|
106
|
+
}
|
107
|
+
return lb_policy_name;
|
108
|
+
}
|
109
|
+
|
110
|
+
// Returns the number of names specified in the method config \a json.
|
111
|
+
static size_t count_names_in_method_config_json(grpc_json* json) {
|
112
|
+
size_t num_names = 0;
|
113
|
+
for (grpc_json* field = json->child; field != NULL; field = field->next) {
|
114
|
+
if (field->key != NULL && strcmp(field->key, "name") == 0) ++num_names;
|
115
|
+
}
|
116
|
+
return num_names;
|
117
|
+
}
|
118
|
+
|
119
|
+
// Returns a path string for the JSON name object specified by \a json.
|
120
|
+
// Returns NULL on error. Caller takes ownership of result.
|
121
|
+
static char* parse_json_method_name(grpc_json* json) {
|
122
|
+
if (json->type != GRPC_JSON_OBJECT) return NULL;
|
123
|
+
const char* service_name = NULL;
|
124
|
+
const char* method_name = NULL;
|
125
|
+
for (grpc_json* child = json->child; child != NULL; child = child->next) {
|
126
|
+
if (child->key == NULL) return NULL;
|
127
|
+
if (child->type != GRPC_JSON_STRING) return NULL;
|
128
|
+
if (strcmp(child->key, "service") == 0) {
|
129
|
+
if (service_name != NULL) return NULL; // Duplicate.
|
130
|
+
if (child->value == NULL) return NULL;
|
131
|
+
service_name = child->value;
|
132
|
+
} else if (strcmp(child->key, "method") == 0) {
|
133
|
+
if (method_name != NULL) return NULL; // Duplicate.
|
134
|
+
if (child->value == NULL) return NULL;
|
135
|
+
method_name = child->value;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
if (service_name == NULL) return NULL; // Required field.
|
139
|
+
char* path;
|
140
|
+
gpr_asprintf(&path, "/%s/%s", service_name,
|
141
|
+
method_name == NULL ? "*" : method_name);
|
142
|
+
return path;
|
143
|
+
}
|
144
|
+
|
145
|
+
// Parses the method config from \a json. Adds an entry to \a entries for
|
146
|
+
// each name found, incrementing \a idx for each entry added.
|
147
|
+
// Returns false on error.
|
148
|
+
static bool parse_json_method_config(
|
149
|
+
grpc_exec_ctx* exec_ctx, grpc_json* json,
|
150
|
+
void* (*create_value)(const grpc_json* method_config_json),
|
151
|
+
const grpc_mdstr_hash_table_vtable* vtable,
|
152
|
+
grpc_mdstr_hash_table_entry* entries, size_t* idx) {
|
153
|
+
// Construct value.
|
154
|
+
void* method_config = create_value(json);
|
155
|
+
if (method_config == NULL) return false;
|
156
|
+
// Construct list of paths.
|
157
|
+
bool success = false;
|
158
|
+
gpr_strvec paths;
|
159
|
+
gpr_strvec_init(&paths);
|
160
|
+
for (grpc_json* child = json->child; child != NULL; child = child->next) {
|
161
|
+
if (child->key == NULL) continue;
|
162
|
+
if (strcmp(child->key, "name") == 0) {
|
163
|
+
if (child->type != GRPC_JSON_ARRAY) goto done;
|
164
|
+
for (grpc_json* name = child->child; name != NULL; name = name->next) {
|
165
|
+
char* path = parse_json_method_name(name);
|
166
|
+
gpr_strvec_add(&paths, path);
|
167
|
+
}
|
168
|
+
}
|
169
|
+
}
|
170
|
+
if (paths.count == 0) goto done; // No names specified.
|
171
|
+
// Add entry for each path.
|
172
|
+
for (size_t i = 0; i < paths.count; ++i) {
|
173
|
+
entries[*idx].key = grpc_mdstr_from_string(paths.strs[i]);
|
174
|
+
entries[*idx].value = vtable->copy_value(method_config);
|
175
|
+
entries[*idx].vtable = vtable;
|
176
|
+
++*idx;
|
177
|
+
}
|
178
|
+
success = true;
|
179
|
+
done:
|
180
|
+
vtable->destroy_value(exec_ctx, method_config);
|
181
|
+
gpr_strvec_destroy(&paths);
|
182
|
+
return success;
|
183
|
+
}
|
184
|
+
|
185
|
+
grpc_mdstr_hash_table* grpc_service_config_create_method_config_table(
|
186
|
+
grpc_exec_ctx* exec_ctx, const grpc_service_config* service_config,
|
187
|
+
void* (*create_value)(const grpc_json* method_config_json),
|
188
|
+
const grpc_mdstr_hash_table_vtable* vtable) {
|
189
|
+
const grpc_json* json = service_config->json_tree;
|
190
|
+
// Traverse parsed JSON tree.
|
191
|
+
if (json->type != GRPC_JSON_OBJECT || json->key != NULL) return NULL;
|
192
|
+
size_t num_entries = 0;
|
193
|
+
grpc_mdstr_hash_table_entry* entries = NULL;
|
194
|
+
for (grpc_json* field = json->child; field != NULL; field = field->next) {
|
195
|
+
if (field->key == NULL) return NULL;
|
196
|
+
if (strcmp(field->key, "methodConfig") == 0) {
|
197
|
+
if (entries != NULL) return NULL; // Duplicate.
|
198
|
+
if (field->type != GRPC_JSON_ARRAY) return NULL;
|
199
|
+
// Find number of entries.
|
200
|
+
for (grpc_json* method = field->child; method != NULL;
|
201
|
+
method = method->next) {
|
202
|
+
num_entries += count_names_in_method_config_json(method);
|
203
|
+
}
|
204
|
+
// Populate method config table entries.
|
205
|
+
entries = gpr_malloc(num_entries * sizeof(grpc_mdstr_hash_table_entry));
|
206
|
+
size_t idx = 0;
|
207
|
+
for (grpc_json* method = field->child; method != NULL;
|
208
|
+
method = method->next) {
|
209
|
+
if (!parse_json_method_config(exec_ctx, method, create_value, vtable,
|
210
|
+
entries, &idx)) {
|
211
|
+
return NULL;
|
212
|
+
}
|
213
|
+
}
|
214
|
+
GPR_ASSERT(idx == num_entries);
|
215
|
+
}
|
216
|
+
}
|
217
|
+
// Instantiate method config table.
|
218
|
+
grpc_mdstr_hash_table* method_config_table = NULL;
|
219
|
+
if (entries != NULL) {
|
220
|
+
method_config_table = grpc_mdstr_hash_table_create(num_entries, entries);
|
221
|
+
// Clean up.
|
222
|
+
for (size_t i = 0; i < num_entries; ++i) {
|
223
|
+
GRPC_MDSTR_UNREF(exec_ctx, entries[i].key);
|
224
|
+
vtable->destroy_value(exec_ctx, entries[i].value);
|
225
|
+
}
|
226
|
+
gpr_free(entries);
|
227
|
+
}
|
228
|
+
return method_config_table;
|
229
|
+
}
|
230
|
+
|
231
|
+
void* grpc_method_config_table_get(grpc_exec_ctx* exec_ctx,
|
232
|
+
const grpc_mdstr_hash_table* table,
|
233
|
+
const grpc_mdstr* path) {
|
234
|
+
void* value = grpc_mdstr_hash_table_get(table, path);
|
235
|
+
// If we didn't find a match for the path, try looking for a wildcard
|
236
|
+
// entry (i.e., change "/service/method" to "/service/*").
|
237
|
+
if (value == NULL) {
|
238
|
+
const char* path_str = grpc_mdstr_as_c_string(path);
|
239
|
+
const char* sep = strrchr(path_str, '/') + 1;
|
240
|
+
const size_t len = (size_t)(sep - path_str);
|
241
|
+
char* buf = gpr_malloc(len + 2); // '*' and NUL
|
242
|
+
memcpy(buf, path_str, len);
|
243
|
+
buf[len] = '*';
|
244
|
+
buf[len + 1] = '\0';
|
245
|
+
grpc_mdstr* wildcard_path = grpc_mdstr_from_string(buf);
|
246
|
+
gpr_free(buf);
|
247
|
+
value = grpc_mdstr_hash_table_get(table, wildcard_path);
|
248
|
+
GRPC_MDSTR_UNREF(exec_ctx, wildcard_path);
|
249
|
+
}
|
250
|
+
return value;
|
251
|
+
}
|