grpc 1.0.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +3696 -867
- data/etc/roots.pem +39 -111
- data/include/grpc/byte_buffer.h +64 -1
- data/include/grpc/census.h +40 -96
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +42 -7
- data/include/grpc/grpc_posix.h +8 -5
- data/include/grpc/impl/codegen/atm.h +3 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
- data/include/grpc/impl/codegen/compression_types.h +1 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
- data/include/grpc/impl/codegen/gpr_slice.h +84 -0
- data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
- data/include/grpc/impl/codegen/grpc_types.h +91 -9
- data/include/grpc/impl/codegen/port_platform.h +25 -92
- data/include/grpc/impl/codegen/slice.h +54 -97
- data/include/grpc/impl/codegen/sync.h +0 -253
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice.h +132 -0
- data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
- data/include/grpc/support/alloc.h +40 -1
- data/include/grpc/support/log.h +80 -1
- data/include/grpc/support/log_windows.h +2 -0
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +252 -0
- data/include/grpc/support/time.h +67 -1
- data/src/boringssl/err_data.c +639 -627
- data/src/core/ext/census/base_resources.c +71 -0
- data/src/core/ext/census/base_resources.h +39 -0
- data/src/core/ext/census/gen/census.pb.c +26 -29
- data/src/core/ext/census/gen/census.pb.h +68 -67
- data/src/core/ext/census/gen/trace_context.pb.c +81 -0
- data/src/core/ext/census/gen/trace_context.pb.h +99 -0
- data/src/core/ext/census/grpc_filter.c +22 -16
- data/src/core/ext/census/grpc_plugin.c +2 -1
- data/src/core/ext/census/initialize.c +16 -4
- data/src/core/ext/census/mlog.h +1 -1
- data/src/core/ext/census/placeholders.c +0 -45
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +68 -0
- data/src/core/ext/census/tracing.c +8 -2
- data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
- data/src/core/ext/client_channel/client_channel.c +1218 -0
- data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
- data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
- data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
- data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
- data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
- data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
- data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
- data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
- data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
- data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
- data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
- data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
- data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
- data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
- data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
- data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
- data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
- data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
- data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
- data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
- data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
- data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
- data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
- data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
- data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
- data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
- data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
- data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
- data/src/core/ext/load_reporting/load_reporting.c +7 -56
- data/src/core/ext/load_reporting/load_reporting.h +41 -28
- data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
- data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
- data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
- data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
- data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
- data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
- data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
- data/src/core/lib/channel/channel_args.c +70 -13
- data/src/core/lib/channel/channel_args.h +28 -2
- data/src/core/lib/channel/channel_stack.c +77 -28
- data/src/core/lib/channel/channel_stack.h +61 -23
- data/src/core/lib/channel/channel_stack_builder.c +33 -25
- data/src/core/lib/channel/channel_stack_builder.h +17 -8
- data/src/core/lib/channel/compress_filter.c +52 -36
- data/src/core/lib/channel/connected_channel.c +20 -12
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +13 -1
- data/src/core/lib/channel/deadline_filter.c +344 -0
- data/src/core/lib/channel/deadline_filter.h +99 -0
- data/src/core/lib/channel/handshaker.c +240 -0
- data/src/core/lib/channel/handshaker.h +164 -0
- data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
- data/src/core/lib/channel/http_client_filter.c +248 -46
- data/src/core/lib/channel/http_client_filter.h +3 -0
- data/src/core/lib/channel/http_server_filter.c +136 -24
- data/src/core/lib/channel/message_size_filter.c +261 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/message_compress.c +43 -37
- data/src/core/lib/compression/message_compress.h +7 -5
- data/src/core/lib/http/format_request.c +26 -11
- data/src/core/lib/http/format_request.h +7 -5
- data/src/core/lib/http/httpcli.c +45 -27
- data/src/core/lib/http/httpcli.h +4 -4
- data/src/core/lib/http/httpcli_security_connector.c +56 -46
- data/src/core/lib/http/parser.c +17 -14
- data/src/core/lib/http/parser.h +4 -2
- data/src/core/lib/iomgr/closure.c +49 -7
- data/src/core/lib/iomgr/closure.h +56 -14
- data/src/core/lib/iomgr/combiner.c +422 -0
- data/src/core/lib/iomgr/combiner.h +64 -0
- data/src/core/lib/iomgr/endpoint.c +8 -2
- data/src/core/lib/iomgr/endpoint.h +17 -7
- data/src/core/lib/iomgr/endpoint_pair.h +3 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
- data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
- data/src/core/lib/iomgr/error.c +72 -6
- data/src/core/lib/iomgr/error.h +30 -3
- data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
- data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
- data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
- data/src/core/lib/iomgr/ev_posix.c +26 -5
- data/src/core/lib/iomgr/ev_posix.h +12 -1
- data/src/core/lib/iomgr/exec_ctx.c +27 -94
- data/src/core/lib/iomgr/exec_ctx.h +19 -22
- data/src/core/lib/iomgr/executor.c +29 -8
- data/src/core/lib/iomgr/executor.h +2 -4
- data/src/core/lib/iomgr/iocp_windows.c +3 -4
- data/src/core/lib/iomgr/iomgr.c +14 -10
- data/src/core/lib/iomgr/iomgr.h +6 -2
- data/src/core/lib/iomgr/iomgr_posix.c +2 -2
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +2 -2
- data/src/core/lib/iomgr/load_file.c +3 -3
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/network_status_tracker.c +1 -1
- data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
- data/src/core/lib/iomgr/pollset_uv.c +142 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +5 -6
- data/src/core/lib/iomgr/port.h +129 -0
- data/src/core/lib/iomgr/resolve_address.h +2 -1
- data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
- data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
- data/src/core/lib/iomgr/resource_quota.c +832 -0
- data/src/core/lib/iomgr/resource_quota.h +159 -0
- data/src/core/lib/iomgr/sockaddr.h +10 -2
- data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
- data/src/core/lib/iomgr/socket_mutator.c +98 -0
- data/src/core/lib/iomgr/socket_mutator.h +80 -0
- data/src/core/lib/iomgr/socket_utils.h +42 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
- data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
- data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
- data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
- data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
- data/src/core/lib/iomgr/socket_windows.c +14 -6
- data/src/core/lib/iomgr/socket_windows.h +1 -0
- data/src/core/lib/iomgr/tcp_client.h +8 -2
- data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
- data/src/core/lib/iomgr/tcp_posix.c +135 -56
- data/src/core/lib/iomgr/tcp_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server.h +14 -6
- data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
- data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
- data/src/core/lib/iomgr/tcp_uv.c +367 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +65 -48
- data/src/core/lib/iomgr/tcp_windows.h +3 -1
- data/src/core/lib/iomgr/timer.h +21 -21
- data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +6 -0
- data/src/core/lib/iomgr/timer_uv.c +99 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +116 -98
- data/src/core/lib/iomgr/udp_server.h +5 -3
- data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
- data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
- data/src/core/lib/iomgr/workqueue.h +12 -20
- data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
- data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
- data/src/core/lib/iomgr/workqueue_windows.c +9 -8
- data/src/core/lib/json/json.c +3 -3
- data/src/core/lib/json/json.h +11 -11
- data/src/core/lib/json/json_reader.c +9 -5
- data/src/core/lib/profiling/basic_timers.c +10 -1
- data/src/core/lib/profiling/timers.h +2 -0
- data/src/core/lib/security/context/security_context.c +13 -3
- data/src/core/lib/security/context/security_context.h +20 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.c +48 -19
- data/src/core/lib/security/credentials/credentials.h +36 -19
- data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
- data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
- data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
- data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
- data/src/core/lib/security/transport/client_auth_filter.c +33 -27
- data/src/core/lib/security/transport/secure_endpoint.c +93 -68
- data/src/core/lib/security/transport/secure_endpoint.h +2 -2
- data/src/core/lib/security/transport/security_connector.c +133 -168
- data/src/core/lib/security/transport/security_connector.h +31 -46
- data/src/core/lib/security/transport/security_handshaker.c +501 -0
- data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
- data/src/core/lib/security/transport/server_auth_filter.c +50 -38
- data/src/core/lib/security/util/b64.c +11 -8
- data/src/core/lib/security/util/b64.h +5 -4
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/{support → slice}/slice.c +81 -50
- data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.c +90 -0
- data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
- data/src/core/lib/support/backoff.c +24 -13
- data/src/core/lib/support/backoff.h +5 -2
- data/src/core/lib/support/env.h +0 -2
- data/src/core/lib/support/log.c +5 -4
- data/src/core/lib/support/log_linux.c +0 -1
- data/src/core/lib/support/log_posix.c +1 -1
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/string.c +58 -49
- data/src/core/lib/support/string.h +11 -8
- data/src/core/lib/support/subprocess_posix.c +5 -2
- data/src/core/lib/support/thd.c +1 -1
- data/src/core/lib/support/time.c +43 -79
- data/src/core/lib/support/time_posix.c +1 -1
- data/src/core/lib/support/tmpfile.h +0 -2
- data/src/core/lib/surface/alarm.c +4 -1
- data/src/core/lib/surface/byte_buffer.c +17 -11
- data/src/core/lib/surface/byte_buffer_reader.c +23 -15
- data/src/core/lib/surface/call.c +294 -276
- data/src/core/lib/surface/call.h +24 -9
- data/src/core/lib/surface/call_log_batch.c +5 -3
- data/src/core/lib/surface/channel.c +127 -111
- data/src/core/lib/surface/channel.h +14 -5
- data/src/core/lib/surface/channel_init.c +1 -1
- data/src/core/lib/surface/channel_init.h +10 -1
- data/src/core/lib/surface/channel_ping.c +7 -6
- data/src/core/lib/surface/completion_queue.c +154 -18
- data/src/core/lib/surface/completion_queue.h +5 -0
- data/src/core/lib/surface/init.c +40 -6
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.c +5 -2
- data/src/core/lib/surface/lame_client.c +28 -18
- data/src/core/lib/surface/server.c +134 -87
- data/src/core/lib/surface/server.h +8 -0
- data/src/core/lib/surface/validate_metadata.c +1 -1
- data/src/core/lib/surface/version.c +3 -1
- data/src/core/lib/transport/byte_stream.c +7 -4
- data/src/core/lib/transport/byte_stream.h +6 -10
- data/src/core/lib/transport/connectivity_state.c +21 -12
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/mdstr_hash_table.c +118 -0
- data/src/core/lib/transport/mdstr_hash_table.h +77 -0
- data/src/core/lib/transport/metadata.c +83 -60
- data/src/core/lib/transport/metadata.h +41 -23
- data/src/core/lib/transport/metadata_batch.c +17 -11
- data/src/core/lib/transport/metadata_batch.h +20 -6
- data/src/core/lib/transport/pid_controller.c +57 -0
- data/src/core/lib/transport/pid_controller.h +64 -0
- data/src/core/lib/transport/service_config.c +251 -0
- data/src/core/lib/transport/service_config.h +71 -0
- data/src/core/lib/transport/static_metadata.c +18 -16
- data/src/core/lib/transport/static_metadata.h +113 -107
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
- data/src/core/lib/transport/transport.c +84 -23
- data/src/core/lib/transport/transport.h +53 -8
- data/src/core/lib/transport/transport_impl.h +3 -0
- data/src/core/lib/transport/transport_op_string.c +92 -20
- data/src/core/lib/tsi/ssl_transport_security.c +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
- data/src/ruby/ext/grpc/extconf.rb +0 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
- data/src/ruby/ext/grpc/rb_call.c +15 -5
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
- data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
- data/src/ruby/ext/grpc/rb_grpc.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
- data/src/ruby/ext/grpc/rb_server.c +18 -12
- data/src/ruby/lib/grpc/errors.rb +154 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
- data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
- data/src/ruby/lib/grpc/generic/service.rb +3 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
- data/src/ruby/pb/test/client.rb +307 -7
- data/src/ruby/pb/test/server.rb +26 -1
- data/src/ruby/spec/compression_options_spec.rb +164 -0
- data/src/ruby/spec/error_sanity_spec.rb +64 -0
- data/src/ruby/spec/generic/active_call_spec.rb +290 -12
- data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
- data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
- data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
- data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
- data/src/ruby/spec/spec_helper.rb +2 -0
- data/third_party/boringssl/crypto/aes/aes.c +12 -12
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
- data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
- data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
- data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
- data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
- data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl/crypto/base64/base64.c +249 -285
- data/third_party/boringssl/crypto/bio/bio.c +13 -23
- data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
- data/third_party/boringssl/crypto/bio/connect.c +12 -3
- data/third_party/boringssl/crypto/bio/fd.c +22 -15
- data/third_party/boringssl/crypto/bio/file.c +2 -38
- data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
- data/third_party/boringssl/crypto/bio/internal.h +3 -0
- data/third_party/boringssl/crypto/bio/pair.c +1 -1
- data/third_party/boringssl/crypto/bio/socket.c +10 -2
- data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
- data/third_party/boringssl/crypto/bn/bn.c +38 -0
- data/third_party/boringssl/crypto/bn/cmp.c +25 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -76
- data/third_party/boringssl/crypto/bn/div.c +136 -70
- data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
- data/third_party/boringssl/crypto/bn/gcd.c +213 -296
- data/third_party/boringssl/crypto/bn/generic.c +0 -80
- data/third_party/boringssl/crypto/bn/internal.h +15 -3
- data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +2 -1
- data/third_party/boringssl/crypto/bn/prime.c +24 -8
- data/third_party/boringssl/crypto/bn/random.c +47 -33
- data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
- data/third_party/boringssl/crypto/buf/buf.c +25 -21
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
- data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
- data/third_party/boringssl/crypto/cipher/aead.c +11 -22
- data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
- data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
- data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
- data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
- data/third_party/boringssl/crypto/cipher/internal.h +8 -10
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
- data/third_party/boringssl/crypto/conf/conf.c +2 -1
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
- data/third_party/boringssl/crypto/cpu-arm.c +0 -161
- data/third_party/boringssl/crypto/cpu-intel.c +5 -3
- data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
- data/third_party/boringssl/crypto/crypto.c +29 -7
- data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
- data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
- data/third_party/boringssl/crypto/dh/check.c +22 -6
- data/third_party/boringssl/crypto/dh/dh.c +45 -21
- data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
- data/third_party/boringssl/crypto/dh/params.c +30 -78
- data/third_party/boringssl/crypto/digest/digest.c +3 -3
- data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
- data/third_party/boringssl/crypto/ec/ec.c +84 -140
- data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
- data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
- data/third_party/boringssl/crypto/ec/internal.h +12 -36
- data/third_party/boringssl/crypto/ec/oct.c +11 -11
- data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
- data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
- data/third_party/boringssl/crypto/ec/simple.c +81 -201
- data/third_party/boringssl/crypto/ec/util-64.c +0 -74
- data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
- data/third_party/boringssl/crypto/engine/engine.c +1 -1
- data/third_party/boringssl/crypto/err/err.c +3 -3
- data/third_party/boringssl/crypto/evp/evp.c +14 -59
- data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
- data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
- data/third_party/boringssl/crypto/evp/internal.h +4 -46
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
- data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
- data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/ex_data.c +4 -6
- data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
- data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
- data/third_party/boringssl/crypto/internal.h +57 -77
- data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
- data/third_party/boringssl/crypto/md4/md4.c +9 -0
- data/third_party/boringssl/crypto/mem.c +19 -19
- data/third_party/boringssl/crypto/modes/cfb.c +5 -6
- data/third_party/boringssl/crypto/modes/ctr.c +10 -18
- data/third_party/boringssl/crypto/modes/gcm.c +100 -66
- data/third_party/boringssl/crypto/modes/internal.h +15 -27
- data/third_party/boringssl/crypto/modes/ofb.c +9 -22
- data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
- data/third_party/boringssl/crypto/newhope/internal.h +71 -0
- data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
- data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
- data/third_party/boringssl/crypto/newhope/poly.c +183 -0
- data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
- data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
- data/third_party/boringssl/crypto/obj/obj.c +111 -135
- data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
- data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
- data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
- data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/rand.c +4 -1
- data/third_party/boringssl/crypto/rand/urandom.c +5 -7
- data/third_party/boringssl/crypto/rand/windows.c +5 -8
- data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
- data/third_party/boringssl/crypto/rsa/internal.h +5 -13
- data/third_party/boringssl/crypto/rsa/padding.c +64 -63
- data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
- data/third_party/boringssl/crypto/sha/sha256.c +2 -2
- data/third_party/boringssl/crypto/sha/sha512.c +7 -7
- data/third_party/boringssl/crypto/stack/stack.c +13 -22
- data/third_party/boringssl/crypto/thread.c +21 -12
- data/third_party/boringssl/crypto/thread_none.c +6 -2
- data/third_party/boringssl/crypto/thread_pthread.c +16 -7
- data/third_party/boringssl/crypto/thread_win.c +38 -85
- data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
- data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
- data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
- data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
- data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
- data/third_party/boringssl/crypto/x509/x509.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
- data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
- data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
- data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
- data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
- data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl/crypto/x509/x_name.c +14 -17
- data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
- data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
- data/third_party/boringssl/include/openssl/aead.h +72 -73
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
- data/third_party/boringssl/include/openssl/asn1.h +103 -235
- data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
- data/third_party/boringssl/include/openssl/asn1t.h +1 -11
- data/third_party/boringssl/include/openssl/base.h +145 -3
- data/third_party/boringssl/include/openssl/base64.h +20 -17
- data/third_party/boringssl/include/openssl/bio.h +59 -34
- data/third_party/boringssl/include/openssl/bn.h +118 -51
- data/third_party/boringssl/include/openssl/buf.h +15 -0
- data/third_party/boringssl/include/openssl/bytestring.h +52 -4
- data/third_party/boringssl/include/openssl/chacha.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +18 -1
- data/third_party/boringssl/include/openssl/cmac.h +11 -0
- data/third_party/boringssl/include/openssl/conf.h +13 -2
- data/third_party/boringssl/include/openssl/cpu.h +20 -23
- data/third_party/boringssl/include/openssl/crypto.h +22 -1
- data/third_party/boringssl/include/openssl/curve25519.h +96 -4
- data/third_party/boringssl/include/openssl/dh.h +71 -16
- data/third_party/boringssl/include/openssl/digest.h +38 -11
- data/third_party/boringssl/include/openssl/dsa.h +40 -4
- data/third_party/boringssl/include/openssl/ec.h +44 -18
- data/third_party/boringssl/include/openssl/ec_key.h +27 -6
- data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
- data/third_party/boringssl/include/openssl/engine.h +11 -0
- data/third_party/boringssl/include/openssl/evp.h +52 -88
- data/third_party/boringssl/include/openssl/hkdf.h +24 -4
- data/third_party/boringssl/include/openssl/hmac.h +20 -6
- data/third_party/boringssl/include/openssl/md4.h +4 -0
- data/third_party/boringssl/include/openssl/mem.h +19 -0
- data/third_party/boringssl/include/openssl/newhope.h +158 -0
- data/third_party/boringssl/include/openssl/nid.h +4166 -0
- data/third_party/boringssl/include/openssl/obj.h +31 -3
- data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
- data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
- data/third_party/boringssl/include/openssl/pem.h +5 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
- data/third_party/boringssl/include/openssl/rand.h +6 -0
- data/third_party/boringssl/include/openssl/rc4.h +6 -0
- data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
- data/third_party/boringssl/include/openssl/rsa.h +127 -65
- data/third_party/boringssl/include/openssl/sha.h +14 -10
- data/third_party/boringssl/include/openssl/ssl.h +561 -275
- data/third_party/boringssl/include/openssl/ssl3.h +18 -25
- data/third_party/boringssl/include/openssl/stack.h +2 -4
- data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
- data/third_party/boringssl/include/openssl/thread.h +31 -13
- data/third_party/boringssl/include/openssl/time_support.h +1 -0
- data/third_party/boringssl/include/openssl/tls1.h +37 -33
- data/third_party/boringssl/include/openssl/x509.h +69 -26
- data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
- data/third_party/boringssl/include/openssl/x509v3.h +23 -2
- data/third_party/boringssl/ssl/custom_extensions.c +3 -5
- data/third_party/boringssl/ssl/d1_both.c +463 -499
- data/third_party/boringssl/ssl/d1_lib.c +38 -109
- data/third_party/boringssl/ssl/d1_pkt.c +173 -334
- data/third_party/boringssl/ssl/d1_srtp.c +20 -18
- data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
- data/third_party/boringssl/ssl/dtls_record.c +27 -26
- data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +712 -439
- data/third_party/boringssl/ssl/s3_both.c +445 -257
- data/third_party/boringssl/ssl/s3_enc.c +53 -36
- data/third_party/boringssl/ssl/s3_lib.c +23 -268
- data/third_party/boringssl/ssl/s3_pkt.c +168 -364
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
- data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
- data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
- data/third_party/boringssl/ssl/ssl_cert.c +324 -49
- data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
- data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
- data/third_party/boringssl/ssl/ssl_file.c +21 -68
- data/third_party/boringssl/ssl/ssl_lib.c +881 -510
- data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
- data/third_party/boringssl/ssl/ssl_session.c +324 -103
- data/third_party/boringssl/ssl/ssl_stat.c +6 -88
- data/third_party/boringssl/ssl/t1_enc.c +23 -39
- data/third_party/boringssl/ssl/t1_lib.c +1120 -622
- data/third_party/boringssl/ssl/tls13_both.c +440 -0
- data/third_party/boringssl/ssl/tls13_client.c +682 -0
- data/third_party/boringssl/ssl/tls13_enc.c +391 -0
- data/third_party/boringssl/ssl/tls13_server.c +672 -0
- data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
- data/third_party/boringssl/ssl/tls_record.c +159 -77
- data/third_party/nanopb/pb.h +60 -28
- data/third_party/nanopb/pb_decode.c +120 -92
- data/third_party/nanopb/pb_decode.h +3 -3
- data/third_party/nanopb/pb_encode.c +73 -67
- data/third_party/nanopb/pb_encode.h +4 -4
- metadata +155 -89
- data/include/grpc/impl/codegen/byte_buffer.h +0 -122
- data/include/grpc/impl/codegen/log.h +0 -118
- data/include/grpc/impl/codegen/time.h +0 -130
- data/src/core/ext/client_config/client_channel.c +0 -593
- data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
- data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
- data/src/core/lib/iomgr/workqueue_posix.c +0 -151
- data/src/core/lib/security/transport/handshake.c +0 -368
- data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
- data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
- data/third_party/boringssl/crypto/directory.h +0 -66
- data/third_party/boringssl/crypto/directory_posix.c +0 -108
- data/third_party/boringssl/crypto/directory_win.c +0 -144
- data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
- data/third_party/boringssl/include/openssl/pqueue.h +0 -146
- data/third_party/boringssl/ssl/d1_clnt.c +0 -561
- data/third_party/boringssl/ssl/d1_srvr.c +0 -476
- data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
- data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
- data/third_party/boringssl/ssl/test/async_bio.h +0 -45
- data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
- data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -0,0 +1,66 @@
|
|
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_CHANNEL_HANDSHAKER_FACTORY_H
|
35
|
+
#define GRPC_CORE_LIB_CHANNEL_HANDSHAKER_FACTORY_H
|
36
|
+
|
37
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
38
|
+
|
39
|
+
#include "src/core/lib/channel/handshaker.h"
|
40
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
41
|
+
|
42
|
+
// A handshaker factory is used to create handshakers.
|
43
|
+
|
44
|
+
typedef struct grpc_handshaker_factory grpc_handshaker_factory;
|
45
|
+
|
46
|
+
typedef struct {
|
47
|
+
void (*add_handshakers)(grpc_exec_ctx *exec_ctx,
|
48
|
+
grpc_handshaker_factory *handshaker_factory,
|
49
|
+
const grpc_channel_args *args,
|
50
|
+
grpc_handshake_manager *handshake_mgr);
|
51
|
+
void (*destroy)(grpc_exec_ctx *exec_ctx,
|
52
|
+
grpc_handshaker_factory *handshaker_factory);
|
53
|
+
} grpc_handshaker_factory_vtable;
|
54
|
+
|
55
|
+
struct grpc_handshaker_factory {
|
56
|
+
const grpc_handshaker_factory_vtable *vtable;
|
57
|
+
};
|
58
|
+
|
59
|
+
void grpc_handshaker_factory_add_handshakers(
|
60
|
+
grpc_exec_ctx *exec_ctx, grpc_handshaker_factory *handshaker_factory,
|
61
|
+
const grpc_channel_args *args, grpc_handshake_manager *handshake_mgr);
|
62
|
+
|
63
|
+
void grpc_handshaker_factory_destroy(
|
64
|
+
grpc_exec_ctx *exec_ctx, grpc_handshaker_factory *handshaker_factory);
|
65
|
+
|
66
|
+
#endif /* GRPC_CORE_LIB_CHANNEL_HANDSHAKER_FACTORY_H */
|
@@ -0,0 +1,113 @@
|
|
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/channel/handshaker_registry.h"
|
35
|
+
|
36
|
+
#include <string.h>
|
37
|
+
|
38
|
+
#include <grpc/support/alloc.h>
|
39
|
+
|
40
|
+
//
|
41
|
+
// grpc_handshaker_factory_list
|
42
|
+
//
|
43
|
+
|
44
|
+
typedef struct {
|
45
|
+
grpc_handshaker_factory** list;
|
46
|
+
size_t num_factories;
|
47
|
+
} grpc_handshaker_factory_list;
|
48
|
+
|
49
|
+
static void grpc_handshaker_factory_list_register(
|
50
|
+
grpc_handshaker_factory_list* list, bool at_start,
|
51
|
+
grpc_handshaker_factory* factory) {
|
52
|
+
list->list = gpr_realloc(
|
53
|
+
list->list, (list->num_factories + 1) * sizeof(grpc_handshaker_factory*));
|
54
|
+
if (at_start) {
|
55
|
+
memmove(list->list + 1, list->list,
|
56
|
+
sizeof(grpc_handshaker_factory*) * list->num_factories);
|
57
|
+
list->list[0] = factory;
|
58
|
+
} else {
|
59
|
+
list->list[list->num_factories] = factory;
|
60
|
+
}
|
61
|
+
++list->num_factories;
|
62
|
+
}
|
63
|
+
|
64
|
+
static void grpc_handshaker_factory_list_add_handshakers(
|
65
|
+
grpc_exec_ctx* exec_ctx, grpc_handshaker_factory_list* list,
|
66
|
+
const grpc_channel_args* args, grpc_handshake_manager* handshake_mgr) {
|
67
|
+
for (size_t i = 0; i < list->num_factories; ++i) {
|
68
|
+
grpc_handshaker_factory_add_handshakers(exec_ctx, list->list[i], args,
|
69
|
+
handshake_mgr);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
static void grpc_handshaker_factory_list_destroy(
|
74
|
+
grpc_exec_ctx* exec_ctx, grpc_handshaker_factory_list* list) {
|
75
|
+
for (size_t i = 0; i < list->num_factories; ++i) {
|
76
|
+
grpc_handshaker_factory_destroy(exec_ctx, list->list[i]);
|
77
|
+
}
|
78
|
+
gpr_free(list->list);
|
79
|
+
}
|
80
|
+
|
81
|
+
//
|
82
|
+
// plugin
|
83
|
+
//
|
84
|
+
|
85
|
+
static grpc_handshaker_factory_list
|
86
|
+
g_handshaker_factory_lists[NUM_HANDSHAKER_TYPES];
|
87
|
+
|
88
|
+
void grpc_handshaker_factory_registry_init() {
|
89
|
+
memset(g_handshaker_factory_lists, 0, sizeof(g_handshaker_factory_lists));
|
90
|
+
}
|
91
|
+
|
92
|
+
void grpc_handshaker_factory_registry_shutdown(grpc_exec_ctx* exec_ctx) {
|
93
|
+
for (size_t i = 0; i < NUM_HANDSHAKER_TYPES; ++i) {
|
94
|
+
grpc_handshaker_factory_list_destroy(exec_ctx,
|
95
|
+
&g_handshaker_factory_lists[i]);
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
void grpc_handshaker_factory_register(bool at_start,
|
100
|
+
grpc_handshaker_type handshaker_type,
|
101
|
+
grpc_handshaker_factory* factory) {
|
102
|
+
grpc_handshaker_factory_list_register(
|
103
|
+
&g_handshaker_factory_lists[handshaker_type], at_start, factory);
|
104
|
+
}
|
105
|
+
|
106
|
+
void grpc_handshakers_add(grpc_exec_ctx* exec_ctx,
|
107
|
+
grpc_handshaker_type handshaker_type,
|
108
|
+
const grpc_channel_args* args,
|
109
|
+
grpc_handshake_manager* handshake_mgr) {
|
110
|
+
grpc_handshaker_factory_list_add_handshakers(
|
111
|
+
exec_ctx, &g_handshaker_factory_lists[handshaker_type], args,
|
112
|
+
handshake_mgr);
|
113
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
*
|
3
|
-
* Copyright
|
3
|
+
* Copyright 2016, Google Inc.
|
4
4
|
* All rights reserved.
|
5
5
|
*
|
6
6
|
* Redistribution and use in source and binary forms, with or without
|
@@ -31,23 +31,33 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#ifndef
|
35
|
-
#define
|
34
|
+
#ifndef GRPC_CORE_LIB_CHANNEL_HANDSHAKER_REGISTRY_H
|
35
|
+
#define GRPC_CORE_LIB_CHANNEL_HANDSHAKER_REGISTRY_H
|
36
36
|
|
37
|
-
#include
|
37
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
typedef struct grpc_client_config grpc_client_config;
|
39
|
+
#include "src/core/lib/channel/handshaker_factory.h"
|
40
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
typedef enum {
|
43
|
+
HANDSHAKER_CLIENT = 0,
|
44
|
+
HANDSHAKER_SERVER,
|
45
|
+
NUM_HANDSHAKER_TYPES, // Must be last.
|
46
|
+
} grpc_handshaker_type;
|
47
47
|
|
48
|
-
void
|
49
|
-
|
50
|
-
grpc_lb_policy *grpc_client_config_get_lb_policy(
|
51
|
-
grpc_client_config *client_config);
|
48
|
+
void grpc_handshaker_factory_registry_init();
|
49
|
+
void grpc_handshaker_factory_registry_shutdown(grpc_exec_ctx* exec_ctx);
|
52
50
|
|
53
|
-
|
51
|
+
/// Registers a new handshaker factory. Takes ownership.
|
52
|
+
/// If \a at_start is true, the new handshaker will be at the beginning of
|
53
|
+
/// the list. Otherwise, it will be added to the end.
|
54
|
+
void grpc_handshaker_factory_register(bool at_start,
|
55
|
+
grpc_handshaker_type handshaker_type,
|
56
|
+
grpc_handshaker_factory* factory);
|
57
|
+
|
58
|
+
void grpc_handshakers_add(grpc_exec_ctx* exec_ctx,
|
59
|
+
grpc_handshaker_type handshaker_type,
|
60
|
+
const grpc_channel_args* args,
|
61
|
+
grpc_handshake_manager* handshake_mgr);
|
62
|
+
|
63
|
+
#endif /* GRPC_CORE_LIB_CHANNEL_HANDSHAKER_REGISTRY_H */
|
@@ -36,6 +36,8 @@
|
|
36
36
|
#include <grpc/support/string_util.h>
|
37
37
|
#include <string.h>
|
38
38
|
#include "src/core/lib/profiling/timers.h"
|
39
|
+
#include "src/core/lib/slice/percent_encoding.h"
|
40
|
+
#include "src/core/lib/slice/slice_internal.h"
|
39
41
|
#include "src/core/lib/support/string.h"
|
40
42
|
#include "src/core/lib/transport/static_metadata.h"
|
41
43
|
#include "src/core/lib/transport/transport_impl.h"
|
@@ -43,6 +45,9 @@
|
|
43
45
|
#define EXPECTED_CONTENT_TYPE "application/grpc"
|
44
46
|
#define EXPECTED_CONTENT_TYPE_LENGTH sizeof(EXPECTED_CONTENT_TYPE) - 1
|
45
47
|
|
48
|
+
/* default maximum size of payload eligable for GET request */
|
49
|
+
static const size_t kMaxPayloadSizeForGet = 2048;
|
50
|
+
|
46
51
|
typedef struct call_data {
|
47
52
|
grpc_linked_mdelem method;
|
48
53
|
grpc_linked_mdelem scheme;
|
@@ -50,40 +55,69 @@ typedef struct call_data {
|
|
50
55
|
grpc_linked_mdelem te_trailers;
|
51
56
|
grpc_linked_mdelem content_type;
|
52
57
|
grpc_linked_mdelem user_agent;
|
58
|
+
grpc_linked_mdelem payload_bin;
|
53
59
|
|
54
60
|
grpc_metadata_batch *recv_initial_metadata;
|
61
|
+
grpc_metadata_batch *recv_trailing_metadata;
|
62
|
+
uint8_t *payload_bytes;
|
63
|
+
|
64
|
+
/* Vars to read data off of send_message */
|
65
|
+
grpc_transport_stream_op send_op;
|
66
|
+
uint32_t send_length;
|
67
|
+
uint32_t send_flags;
|
68
|
+
grpc_slice incoming_slice;
|
69
|
+
grpc_slice_buffer_stream replacement_stream;
|
70
|
+
grpc_slice_buffer slices;
|
71
|
+
/* flag that indicates that all slices of send_messages aren't availble */
|
72
|
+
bool send_message_blocked;
|
55
73
|
|
56
74
|
/** Closure to call when finished with the hc_on_recv hook */
|
57
|
-
grpc_closure *
|
75
|
+
grpc_closure *on_done_recv_initial_metadata;
|
76
|
+
grpc_closure *on_done_recv_trailing_metadata;
|
77
|
+
grpc_closure *on_complete;
|
78
|
+
grpc_closure *post_send;
|
79
|
+
|
58
80
|
/** Receive closures are chained: we inject this closure as the on_done_recv
|
59
81
|
up-call on transport_op, and remember to call our on_done_recv member
|
60
82
|
after handling it. */
|
61
|
-
grpc_closure
|
83
|
+
grpc_closure hc_on_recv_initial_metadata;
|
84
|
+
grpc_closure hc_on_recv_trailing_metadata;
|
85
|
+
grpc_closure hc_on_complete;
|
86
|
+
grpc_closure got_slice;
|
87
|
+
grpc_closure send_done;
|
62
88
|
} call_data;
|
63
89
|
|
64
90
|
typedef struct channel_data {
|
65
91
|
grpc_mdelem *static_scheme;
|
66
92
|
grpc_mdelem *user_agent;
|
93
|
+
size_t max_payload_size_for_get;
|
67
94
|
} channel_data;
|
68
95
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
} client_recv_filter_args;
|
73
|
-
|
74
|
-
static grpc_mdelem *client_recv_filter(void *user_data, grpc_mdelem *md) {
|
75
|
-
client_recv_filter_args *a = user_data;
|
96
|
+
static grpc_mdelem *client_recv_filter(grpc_exec_ctx *exec_ctx, void *user_data,
|
97
|
+
grpc_mdelem *md) {
|
98
|
+
grpc_call_element *elem = user_data;
|
76
99
|
if (md == GRPC_MDELEM_STATUS_200) {
|
77
100
|
return NULL;
|
78
101
|
} else if (md->key == GRPC_MDSTR_STATUS) {
|
79
102
|
char *message_string;
|
80
103
|
gpr_asprintf(&message_string, "Received http2 header with status: %s",
|
81
104
|
grpc_mdstr_as_c_string(md->value));
|
82
|
-
|
105
|
+
grpc_slice message = grpc_slice_from_copied_string(message_string);
|
83
106
|
gpr_free(message_string);
|
84
|
-
|
85
|
-
|
107
|
+
grpc_call_element_send_close_with_message(exec_ctx, elem,
|
108
|
+
GRPC_STATUS_CANCELLED, &message);
|
86
109
|
return NULL;
|
110
|
+
} else if (md->key == GRPC_MDSTR_GRPC_MESSAGE) {
|
111
|
+
grpc_slice pct_decoded_msg =
|
112
|
+
grpc_permissive_percent_decode_slice(md->value->slice);
|
113
|
+
if (grpc_slice_is_equivalent(pct_decoded_msg, md->value->slice)) {
|
114
|
+
grpc_slice_unref_internal(exec_ctx, pct_decoded_msg);
|
115
|
+
return md;
|
116
|
+
} else {
|
117
|
+
return grpc_mdelem_from_metadata_strings(
|
118
|
+
exec_ctx, GRPC_MDSTR_GRPC_MESSAGE,
|
119
|
+
grpc_mdstr_from_slice(exec_ctx, pct_decoded_msg));
|
120
|
+
}
|
87
121
|
} else if (md == GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC) {
|
88
122
|
return NULL;
|
89
123
|
} else if (md->key == GRPC_MDSTR_CONTENT_TYPE) {
|
@@ -107,19 +141,46 @@ static grpc_mdelem *client_recv_filter(void *user_data, grpc_mdelem *md) {
|
|
107
141
|
return md;
|
108
142
|
}
|
109
143
|
|
110
|
-
static void
|
111
|
-
|
144
|
+
static void hc_on_recv_initial_metadata(grpc_exec_ctx *exec_ctx,
|
145
|
+
void *user_data, grpc_error *error) {
|
146
|
+
grpc_call_element *elem = user_data;
|
147
|
+
call_data *calld = elem->call_data;
|
148
|
+
grpc_metadata_batch_filter(exec_ctx, calld->recv_initial_metadata,
|
149
|
+
client_recv_filter, elem);
|
150
|
+
grpc_closure_run(exec_ctx, calld->on_done_recv_initial_metadata,
|
151
|
+
GRPC_ERROR_REF(error));
|
152
|
+
}
|
153
|
+
|
154
|
+
static void hc_on_recv_trailing_metadata(grpc_exec_ctx *exec_ctx,
|
155
|
+
void *user_data, grpc_error *error) {
|
156
|
+
grpc_call_element *elem = user_data;
|
157
|
+
call_data *calld = elem->call_data;
|
158
|
+
grpc_metadata_batch_filter(exec_ctx, calld->recv_trailing_metadata,
|
159
|
+
client_recv_filter, elem);
|
160
|
+
grpc_closure_run(exec_ctx, calld->on_done_recv_trailing_metadata,
|
161
|
+
GRPC_ERROR_REF(error));
|
162
|
+
}
|
163
|
+
|
164
|
+
static void hc_on_complete(grpc_exec_ctx *exec_ctx, void *user_data,
|
165
|
+
grpc_error *error) {
|
112
166
|
grpc_call_element *elem = user_data;
|
113
167
|
call_data *calld = elem->call_data;
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, error);
|
168
|
+
if (calld->payload_bytes) {
|
169
|
+
gpr_free(calld->payload_bytes);
|
170
|
+
calld->payload_bytes = NULL;
|
171
|
+
}
|
172
|
+
calld->on_complete->cb(exec_ctx, calld->on_complete->cb_arg, error);
|
120
173
|
}
|
121
174
|
|
122
|
-
static
|
175
|
+
static void send_done(grpc_exec_ctx *exec_ctx, void *elemp, grpc_error *error) {
|
176
|
+
grpc_call_element *elem = elemp;
|
177
|
+
call_data *calld = elem->call_data;
|
178
|
+
grpc_slice_buffer_reset_and_unref_internal(exec_ctx, &calld->slices);
|
179
|
+
calld->post_send->cb(exec_ctx, calld->post_send->cb_arg, error);
|
180
|
+
}
|
181
|
+
|
182
|
+
static grpc_mdelem *client_strip_filter(grpc_exec_ctx *exec_ctx,
|
183
|
+
void *user_data, grpc_mdelem *md) {
|
123
184
|
/* eat the things we'd like to set ourselves */
|
124
185
|
if (md->key == GRPC_MDSTR_METHOD) return NULL;
|
125
186
|
if (md->key == GRPC_MDSTR_SCHEME) return NULL;
|
@@ -129,22 +190,107 @@ static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) {
|
|
129
190
|
return md;
|
130
191
|
}
|
131
192
|
|
132
|
-
static void
|
193
|
+
static void continue_send_message(grpc_exec_ctx *exec_ctx,
|
194
|
+
grpc_call_element *elem) {
|
195
|
+
call_data *calld = elem->call_data;
|
196
|
+
uint8_t *wrptr = calld->payload_bytes;
|
197
|
+
while (grpc_byte_stream_next(exec_ctx, calld->send_op.send_message,
|
198
|
+
&calld->incoming_slice, ~(size_t)0,
|
199
|
+
&calld->got_slice)) {
|
200
|
+
memcpy(wrptr, GRPC_SLICE_START_PTR(calld->incoming_slice),
|
201
|
+
GRPC_SLICE_LENGTH(calld->incoming_slice));
|
202
|
+
wrptr += GRPC_SLICE_LENGTH(calld->incoming_slice);
|
203
|
+
grpc_slice_buffer_add(&calld->slices, calld->incoming_slice);
|
204
|
+
if (calld->send_length == calld->slices.length) {
|
205
|
+
calld->send_message_blocked = false;
|
206
|
+
break;
|
207
|
+
}
|
208
|
+
}
|
209
|
+
}
|
210
|
+
|
211
|
+
static void got_slice(grpc_exec_ctx *exec_ctx, void *elemp, grpc_error *error) {
|
212
|
+
grpc_call_element *elem = elemp;
|
213
|
+
call_data *calld = elem->call_data;
|
214
|
+
calld->send_message_blocked = false;
|
215
|
+
grpc_slice_buffer_add(&calld->slices, calld->incoming_slice);
|
216
|
+
if (calld->send_length == calld->slices.length) {
|
217
|
+
/* Pass down the original send_message op that was blocked.*/
|
218
|
+
grpc_slice_buffer_stream_init(&calld->replacement_stream, &calld->slices,
|
219
|
+
calld->send_flags);
|
220
|
+
calld->send_op.send_message = &calld->replacement_stream.base;
|
221
|
+
calld->post_send = calld->send_op.on_complete;
|
222
|
+
calld->send_op.on_complete = &calld->send_done;
|
223
|
+
grpc_call_next_op(exec_ctx, elem, &calld->send_op);
|
224
|
+
} else {
|
225
|
+
continue_send_message(exec_ctx, elem);
|
226
|
+
}
|
227
|
+
}
|
228
|
+
|
229
|
+
static void hc_mutate_op(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
133
230
|
grpc_transport_stream_op *op) {
|
134
231
|
/* grab pointers to our data from the call element */
|
135
232
|
call_data *calld = elem->call_data;
|
136
233
|
channel_data *channeld = elem->channel_data;
|
234
|
+
|
137
235
|
if (op->send_initial_metadata != NULL) {
|
138
|
-
|
139
|
-
|
236
|
+
/* Decide which HTTP VERB to use. We use GET if the request is marked
|
237
|
+
cacheable, and the operation contains both initial metadata and send
|
238
|
+
message, and the payload is below the size threshold, and all the data
|
239
|
+
for this request is immediately available. */
|
240
|
+
grpc_mdelem *method = GRPC_MDELEM_METHOD_POST;
|
241
|
+
if ((op->send_initial_metadata_flags &
|
242
|
+
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST) &&
|
243
|
+
op->send_message != NULL &&
|
244
|
+
op->send_message->length < channeld->max_payload_size_for_get) {
|
245
|
+
method = GRPC_MDELEM_METHOD_GET;
|
246
|
+
/* The following write to calld->send_message_blocked isn't racy with
|
247
|
+
reads in hc_start_transport_op (which deals with SEND_MESSAGE ops) because
|
248
|
+
being here means ops->send_message is not NULL, which is primarily
|
249
|
+
guarding the read there. */
|
250
|
+
calld->send_message_blocked = true;
|
251
|
+
} else if (op->send_initial_metadata_flags &
|
252
|
+
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) {
|
253
|
+
method = GRPC_MDELEM_METHOD_PUT;
|
254
|
+
}
|
255
|
+
|
256
|
+
/* Attempt to read the data from send_message and create a header field. */
|
257
|
+
if (method == GRPC_MDELEM_METHOD_GET) {
|
258
|
+
/* allocate memory to hold the entire payload */
|
259
|
+
calld->payload_bytes = gpr_malloc(op->send_message->length);
|
260
|
+
|
261
|
+
/* read slices of send_message and copy into payload_bytes */
|
262
|
+
calld->send_op = *op;
|
263
|
+
calld->send_length = op->send_message->length;
|
264
|
+
calld->send_flags = op->send_message->flags;
|
265
|
+
continue_send_message(exec_ctx, elem);
|
266
|
+
|
267
|
+
if (calld->send_message_blocked == false) {
|
268
|
+
/* when all the send_message data is available, then create a MDELEM and
|
269
|
+
append to headers */
|
270
|
+
grpc_mdelem *payload_bin = grpc_mdelem_from_metadata_strings(
|
271
|
+
exec_ctx, GRPC_MDSTR_GRPC_PAYLOAD_BIN,
|
272
|
+
grpc_mdstr_from_buffer(calld->payload_bytes,
|
273
|
+
op->send_message->length));
|
274
|
+
grpc_metadata_batch_add_tail(op->send_initial_metadata,
|
275
|
+
&calld->payload_bin, payload_bin);
|
276
|
+
calld->on_complete = op->on_complete;
|
277
|
+
op->on_complete = &calld->hc_on_complete;
|
278
|
+
op->send_message = NULL;
|
279
|
+
} else {
|
280
|
+
/* Not all data is available. Fall back to POST. */
|
281
|
+
gpr_log(GPR_DEBUG,
|
282
|
+
"Request is marked Cacheable but not all data is available.\
|
283
|
+
Falling back to POST");
|
284
|
+
method = GRPC_MDELEM_METHOD_POST;
|
285
|
+
}
|
286
|
+
}
|
287
|
+
|
288
|
+
grpc_metadata_batch_filter(exec_ctx, op->send_initial_metadata,
|
289
|
+
client_strip_filter, elem);
|
140
290
|
/* Send : prefixed headers, which have to be before any application
|
141
291
|
layer headers. */
|
142
|
-
grpc_metadata_batch_add_head(
|
143
|
-
|
144
|
-
op->send_initial_metadata_flags &
|
145
|
-
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST
|
146
|
-
? GRPC_MDELEM_METHOD_PUT
|
147
|
-
: GRPC_MDELEM_METHOD_POST);
|
292
|
+
grpc_metadata_batch_add_head(op->send_initial_metadata, &calld->method,
|
293
|
+
method);
|
148
294
|
grpc_metadata_batch_add_head(op->send_initial_metadata, &calld->scheme,
|
149
295
|
channeld->static_scheme);
|
150
296
|
grpc_metadata_batch_add_tail(op->send_initial_metadata, &calld->te_trailers,
|
@@ -159,8 +305,15 @@ static void hc_mutate_op(grpc_call_element *elem,
|
|
159
305
|
if (op->recv_initial_metadata != NULL) {
|
160
306
|
/* substitute our callback for the higher callback */
|
161
307
|
calld->recv_initial_metadata = op->recv_initial_metadata;
|
162
|
-
calld->
|
163
|
-
op->recv_initial_metadata_ready = &calld->
|
308
|
+
calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready;
|
309
|
+
op->recv_initial_metadata_ready = &calld->hc_on_recv_initial_metadata;
|
310
|
+
}
|
311
|
+
|
312
|
+
if (op->recv_trailing_metadata != NULL) {
|
313
|
+
/* substitute our callback for the higher callback */
|
314
|
+
calld->recv_trailing_metadata = op->recv_trailing_metadata;
|
315
|
+
calld->on_done_recv_trailing_metadata = op->on_complete;
|
316
|
+
op->on_complete = &calld->hc_on_recv_trailing_metadata;
|
164
317
|
}
|
165
318
|
}
|
166
319
|
|
@@ -169,22 +322,50 @@ static void hc_start_transport_op(grpc_exec_ctx *exec_ctx,
|
|
169
322
|
grpc_transport_stream_op *op) {
|
170
323
|
GPR_TIMER_BEGIN("hc_start_transport_op", 0);
|
171
324
|
GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
|
172
|
-
hc_mutate_op(elem, op);
|
325
|
+
hc_mutate_op(exec_ctx, elem, op);
|
173
326
|
GPR_TIMER_END("hc_start_transport_op", 0);
|
174
|
-
|
327
|
+
call_data *calld = elem->call_data;
|
328
|
+
if (op->send_message != NULL && calld->send_message_blocked) {
|
329
|
+
/* Don't forward the op. send_message contains slices that aren't ready
|
330
|
+
yet. The call will be forwarded by the op_complete of slice read call. */
|
331
|
+
} else {
|
332
|
+
grpc_call_next_op(exec_ctx, elem, op);
|
333
|
+
}
|
175
334
|
}
|
176
335
|
|
177
336
|
/* Constructor for call_data */
|
178
|
-
static
|
179
|
-
|
337
|
+
static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
|
338
|
+
grpc_call_element *elem,
|
339
|
+
grpc_call_element_args *args) {
|
180
340
|
call_data *calld = elem->call_data;
|
181
|
-
calld->
|
182
|
-
|
341
|
+
calld->on_done_recv_initial_metadata = NULL;
|
342
|
+
calld->on_done_recv_trailing_metadata = NULL;
|
343
|
+
calld->on_complete = NULL;
|
344
|
+
calld->payload_bytes = NULL;
|
345
|
+
calld->send_message_blocked = false;
|
346
|
+
grpc_slice_buffer_init(&calld->slices);
|
347
|
+
grpc_closure_init(&calld->hc_on_recv_initial_metadata,
|
348
|
+
hc_on_recv_initial_metadata, elem,
|
349
|
+
grpc_schedule_on_exec_ctx);
|
350
|
+
grpc_closure_init(&calld->hc_on_recv_trailing_metadata,
|
351
|
+
hc_on_recv_trailing_metadata, elem,
|
352
|
+
grpc_schedule_on_exec_ctx);
|
353
|
+
grpc_closure_init(&calld->hc_on_complete, hc_on_complete, elem,
|
354
|
+
grpc_schedule_on_exec_ctx);
|
355
|
+
grpc_closure_init(&calld->got_slice, got_slice, elem,
|
356
|
+
grpc_schedule_on_exec_ctx);
|
357
|
+
grpc_closure_init(&calld->send_done, send_done, elem,
|
358
|
+
grpc_schedule_on_exec_ctx);
|
359
|
+
return GRPC_ERROR_NONE;
|
183
360
|
}
|
184
361
|
|
185
362
|
/* Destructor for call_data */
|
186
363
|
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
187
|
-
const
|
364
|
+
const grpc_call_final_info *final_info,
|
365
|
+
void *ignored) {
|
366
|
+
call_data *calld = elem->call_data;
|
367
|
+
grpc_slice_buffer_destroy_internal(exec_ctx, &calld->slices);
|
368
|
+
}
|
188
369
|
|
189
370
|
static grpc_mdelem *scheme_from_args(const grpc_channel_args *args) {
|
190
371
|
unsigned i;
|
@@ -207,6 +388,22 @@ static grpc_mdelem *scheme_from_args(const grpc_channel_args *args) {
|
|
207
388
|
return GRPC_MDELEM_SCHEME_HTTP;
|
208
389
|
}
|
209
390
|
|
391
|
+
static size_t max_payload_size_from_args(const grpc_channel_args *args) {
|
392
|
+
if (args != NULL) {
|
393
|
+
for (size_t i = 0; i < args->num_args; ++i) {
|
394
|
+
if (0 == strcmp(args->args[i].key, GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET)) {
|
395
|
+
if (args->args[i].type != GRPC_ARG_INTEGER) {
|
396
|
+
gpr_log(GPR_ERROR, "%s: must be an integer",
|
397
|
+
GRPC_ARG_MAX_PAYLOAD_SIZE_FOR_GET);
|
398
|
+
} else {
|
399
|
+
return (size_t)args->args[i].value.integer;
|
400
|
+
}
|
401
|
+
}
|
402
|
+
}
|
403
|
+
}
|
404
|
+
return kMaxPayloadSizeForGet;
|
405
|
+
}
|
406
|
+
|
210
407
|
static grpc_mdstr *user_agent_from_args(const grpc_channel_args *args,
|
211
408
|
const char *transport_name) {
|
212
409
|
gpr_strvec v;
|
@@ -230,8 +427,9 @@ static grpc_mdstr *user_agent_from_args(const grpc_channel_args *args,
|
|
230
427
|
}
|
231
428
|
}
|
232
429
|
|
233
|
-
gpr_asprintf(&tmp, "%sgrpc-c/%s (%s; %s)", is_first ? "" : " ",
|
234
|
-
grpc_version_string(), GPR_PLATFORM_STRING, transport_name
|
430
|
+
gpr_asprintf(&tmp, "%sgrpc-c/%s (%s; %s; %s)", is_first ? "" : " ",
|
431
|
+
grpc_version_string(), GPR_PLATFORM_STRING, transport_name,
|
432
|
+
grpc_g_stands_for());
|
235
433
|
is_first = 0;
|
236
434
|
gpr_strvec_add(&v, tmp);
|
237
435
|
|
@@ -257,24 +455,27 @@ static grpc_mdstr *user_agent_from_args(const grpc_channel_args *args,
|
|
257
455
|
}
|
258
456
|
|
259
457
|
/* Constructor for channel_data */
|
260
|
-
static
|
261
|
-
|
262
|
-
|
458
|
+
static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
|
459
|
+
grpc_channel_element *elem,
|
460
|
+
grpc_channel_element_args *args) {
|
263
461
|
channel_data *chand = elem->channel_data;
|
264
462
|
GPR_ASSERT(!args->is_last);
|
265
463
|
GPR_ASSERT(args->optional_transport != NULL);
|
266
464
|
chand->static_scheme = scheme_from_args(args->channel_args);
|
465
|
+
chand->max_payload_size_for_get =
|
466
|
+
max_payload_size_from_args(args->channel_args);
|
267
467
|
chand->user_agent = grpc_mdelem_from_metadata_strings(
|
268
|
-
GRPC_MDSTR_USER_AGENT,
|
468
|
+
exec_ctx, GRPC_MDSTR_USER_AGENT,
|
269
469
|
user_agent_from_args(args->channel_args,
|
270
470
|
args->optional_transport->vtable->name));
|
471
|
+
return GRPC_ERROR_NONE;
|
271
472
|
}
|
272
473
|
|
273
474
|
/* Destructor for channel data */
|
274
475
|
static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
|
275
476
|
grpc_channel_element *elem) {
|
276
477
|
channel_data *chand = elem->channel_data;
|
277
|
-
GRPC_MDELEM_UNREF(chand->user_agent);
|
478
|
+
GRPC_MDELEM_UNREF(exec_ctx, chand->user_agent);
|
278
479
|
}
|
279
480
|
|
280
481
|
const grpc_channel_filter grpc_http_client_filter = {
|
@@ -288,4 +489,5 @@ const grpc_channel_filter grpc_http_client_filter = {
|
|
288
489
|
init_channel_elem,
|
289
490
|
destroy_channel_elem,
|
290
491
|
grpc_call_next_get_peer,
|
492
|
+
grpc_channel_next_get_info,
|
291
493
|
"http-client"};
|