grpc 1.0.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/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
|
@@ -66,22 +66,59 @@ static grpc_arg copy_arg(const grpc_arg *src) {
|
|
|
66
66
|
grpc_channel_args *grpc_channel_args_copy_and_add(const grpc_channel_args *src,
|
|
67
67
|
const grpc_arg *to_add,
|
|
68
68
|
size_t num_to_add) {
|
|
69
|
+
return grpc_channel_args_copy_and_add_and_remove(src, NULL, 0, to_add,
|
|
70
|
+
num_to_add);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
grpc_channel_args *grpc_channel_args_copy_and_remove(
|
|
74
|
+
const grpc_channel_args *src, const char **to_remove,
|
|
75
|
+
size_t num_to_remove) {
|
|
76
|
+
return grpc_channel_args_copy_and_add_and_remove(src, to_remove,
|
|
77
|
+
num_to_remove, NULL, 0);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static bool should_remove_arg(const grpc_arg *arg, const char **to_remove,
|
|
81
|
+
size_t num_to_remove) {
|
|
82
|
+
for (size_t i = 0; i < num_to_remove; ++i) {
|
|
83
|
+
if (strcmp(arg->key, to_remove[i]) == 0) return true;
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
grpc_channel_args *grpc_channel_args_copy_and_add_and_remove(
|
|
89
|
+
const grpc_channel_args *src, const char **to_remove, size_t num_to_remove,
|
|
90
|
+
const grpc_arg *to_add, size_t num_to_add) {
|
|
91
|
+
// Figure out how many args we'll be copying.
|
|
92
|
+
size_t num_args_to_copy = 0;
|
|
93
|
+
if (src != NULL) {
|
|
94
|
+
for (size_t i = 0; i < src->num_args; ++i) {
|
|
95
|
+
if (!should_remove_arg(&src->args[i], to_remove, num_to_remove)) {
|
|
96
|
+
++num_args_to_copy;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Create result.
|
|
69
101
|
grpc_channel_args *dst = gpr_malloc(sizeof(grpc_channel_args));
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (!src && !to_add) {
|
|
73
|
-
dst->num_args = 0;
|
|
102
|
+
dst->num_args = num_args_to_copy + num_to_add;
|
|
103
|
+
if (dst->num_args == 0) {
|
|
74
104
|
dst->args = NULL;
|
|
75
105
|
return dst;
|
|
76
106
|
}
|
|
77
|
-
dst->num_args = src_num_args + num_to_add;
|
|
78
107
|
dst->args = gpr_malloc(sizeof(grpc_arg) * dst->num_args);
|
|
79
|
-
|
|
80
|
-
|
|
108
|
+
// Copy args from src that are not being removed.
|
|
109
|
+
size_t dst_idx = 0;
|
|
110
|
+
if (src != NULL) {
|
|
111
|
+
for (size_t i = 0; i < src->num_args; ++i) {
|
|
112
|
+
if (!should_remove_arg(&src->args[i], to_remove, num_to_remove)) {
|
|
113
|
+
dst->args[dst_idx++] = copy_arg(&src->args[i]);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
81
116
|
}
|
|
82
|
-
|
|
83
|
-
|
|
117
|
+
// Add args from to_add.
|
|
118
|
+
for (size_t i = 0; i < num_to_add; ++i) {
|
|
119
|
+
dst->args[dst_idx++] = copy_arg(&to_add[i]);
|
|
84
120
|
}
|
|
121
|
+
GPR_ASSERT(dst_idx == dst->num_args);
|
|
85
122
|
return dst;
|
|
86
123
|
}
|
|
87
124
|
|
|
@@ -147,7 +184,7 @@ grpc_channel_args *grpc_channel_args_normalize(const grpc_channel_args *a) {
|
|
|
147
184
|
return b;
|
|
148
185
|
}
|
|
149
186
|
|
|
150
|
-
void grpc_channel_args_destroy(grpc_channel_args *a) {
|
|
187
|
+
void grpc_channel_args_destroy(grpc_exec_ctx *exec_ctx, grpc_channel_args *a) {
|
|
151
188
|
size_t i;
|
|
152
189
|
if (!a) return;
|
|
153
190
|
for (i = 0; i < a->num_args; i++) {
|
|
@@ -158,7 +195,8 @@ void grpc_channel_args_destroy(grpc_channel_args *a) {
|
|
|
158
195
|
case GRPC_ARG_INTEGER:
|
|
159
196
|
break;
|
|
160
197
|
case GRPC_ARG_POINTER:
|
|
161
|
-
a->args[i].value.pointer.vtable->destroy(
|
|
198
|
+
a->args[i].value.pointer.vtable->destroy(exec_ctx,
|
|
199
|
+
a->args[i].value.pointer.p);
|
|
162
200
|
break;
|
|
163
201
|
}
|
|
164
202
|
gpr_free(a->args[i].key);
|
|
@@ -212,7 +250,8 @@ static int find_compression_algorithm_states_bitset(const grpc_channel_args *a,
|
|
|
212
250
|
}
|
|
213
251
|
|
|
214
252
|
grpc_channel_args *grpc_channel_args_compression_algorithm_set_state(
|
|
215
|
-
grpc_channel_args **a,
|
|
253
|
+
grpc_exec_ctx *exec_ctx, grpc_channel_args **a,
|
|
254
|
+
grpc_compression_algorithm algorithm, int state) {
|
|
216
255
|
int *states_arg = NULL;
|
|
217
256
|
grpc_channel_args *result = *a;
|
|
218
257
|
const int states_arg_found =
|
|
@@ -245,7 +284,7 @@ grpc_channel_args *grpc_channel_args_compression_algorithm_set_state(
|
|
|
245
284
|
GPR_BITCLEAR((unsigned *)&tmp.value.integer, algorithm);
|
|
246
285
|
}
|
|
247
286
|
result = grpc_channel_args_copy_and_add(*a, &tmp, 1);
|
|
248
|
-
grpc_channel_args_destroy(*a);
|
|
287
|
+
grpc_channel_args_destroy(exec_ctx, *a);
|
|
249
288
|
*a = result;
|
|
250
289
|
}
|
|
251
290
|
return result;
|
|
@@ -261,6 +300,12 @@ uint32_t grpc_channel_args_compression_algorithm_get_states(
|
|
|
261
300
|
}
|
|
262
301
|
}
|
|
263
302
|
|
|
303
|
+
grpc_channel_args *grpc_channel_args_set_socket_mutator(
|
|
304
|
+
grpc_channel_args *a, grpc_socket_mutator *mutator) {
|
|
305
|
+
grpc_arg tmp = grpc_socket_mutator_to_arg(mutator);
|
|
306
|
+
return grpc_channel_args_copy_and_add(a, &tmp, 1);
|
|
307
|
+
}
|
|
308
|
+
|
|
264
309
|
int grpc_channel_args_compare(const grpc_channel_args *a,
|
|
265
310
|
const grpc_channel_args *b) {
|
|
266
311
|
int c = GPR_ICMP(a->num_args, b->num_args);
|
|
@@ -272,6 +317,18 @@ int grpc_channel_args_compare(const grpc_channel_args *a,
|
|
|
272
317
|
return 0;
|
|
273
318
|
}
|
|
274
319
|
|
|
320
|
+
const grpc_arg *grpc_channel_args_find(const grpc_channel_args *args,
|
|
321
|
+
const char *name) {
|
|
322
|
+
if (args != NULL) {
|
|
323
|
+
for (size_t i = 0; i < args->num_args; ++i) {
|
|
324
|
+
if (strcmp(args->args[i].key, name) == 0) {
|
|
325
|
+
return &args->args[i];
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return NULL;
|
|
330
|
+
}
|
|
331
|
+
|
|
275
332
|
int grpc_channel_arg_get_integer(grpc_arg *arg, grpc_integer_options options) {
|
|
276
333
|
if (arg->type != GRPC_ARG_INTEGER) {
|
|
277
334
|
gpr_log(GPR_ERROR, "%s ignored: it must be an integer", arg->key);
|
|
@@ -36,6 +36,9 @@
|
|
|
36
36
|
|
|
37
37
|
#include <grpc/compression.h>
|
|
38
38
|
#include <grpc/grpc.h>
|
|
39
|
+
#include "src/core/lib/iomgr/socket_mutator.h"
|
|
40
|
+
|
|
41
|
+
// Channel args are intentionally immutable, to avoid the need for locking.
|
|
39
42
|
|
|
40
43
|
/** Copy the arguments in \a src into a new instance */
|
|
41
44
|
grpc_channel_args *grpc_channel_args_copy(const grpc_channel_args *src);
|
|
@@ -49,12 +52,23 @@ grpc_channel_args *grpc_channel_args_copy_and_add(const grpc_channel_args *src,
|
|
|
49
52
|
const grpc_arg *to_add,
|
|
50
53
|
size_t num_to_add);
|
|
51
54
|
|
|
55
|
+
/** Copies the arguments in \a src except for those whose keys are in
|
|
56
|
+
\a to_remove. */
|
|
57
|
+
grpc_channel_args *grpc_channel_args_copy_and_remove(
|
|
58
|
+
const grpc_channel_args *src, const char **to_remove, size_t num_to_remove);
|
|
59
|
+
|
|
60
|
+
/** Copies the arguments from \a src except for those whose keys are in
|
|
61
|
+
\a to_remove and appends the arguments in \a to_add. */
|
|
62
|
+
grpc_channel_args *grpc_channel_args_copy_and_add_and_remove(
|
|
63
|
+
const grpc_channel_args *src, const char **to_remove, size_t num_to_remove,
|
|
64
|
+
const grpc_arg *to_add, size_t num_to_add);
|
|
65
|
+
|
|
52
66
|
/** Concatenate args from \a a and \a b into a new instance */
|
|
53
67
|
grpc_channel_args *grpc_channel_args_merge(const grpc_channel_args *a,
|
|
54
68
|
const grpc_channel_args *b);
|
|
55
69
|
|
|
56
70
|
/** Destroy arguments created by \a grpc_channel_args_copy */
|
|
57
|
-
void grpc_channel_args_destroy(grpc_channel_args *a);
|
|
71
|
+
void grpc_channel_args_destroy(grpc_exec_ctx *exec_ctx, grpc_channel_args *a);
|
|
58
72
|
|
|
59
73
|
/** Returns the compression algorithm set in \a a. */
|
|
60
74
|
grpc_compression_algorithm grpc_channel_args_get_compression_algorithm(
|
|
@@ -74,7 +88,8 @@ grpc_channel_args *grpc_channel_args_set_compression_algorithm(
|
|
|
74
88
|
* modified to point to the returned instance (which may be different from the
|
|
75
89
|
* input value of \a a). */
|
|
76
90
|
grpc_channel_args *grpc_channel_args_compression_algorithm_set_state(
|
|
77
|
-
grpc_channel_args **a,
|
|
91
|
+
grpc_exec_ctx *exec_ctx, grpc_channel_args **a,
|
|
92
|
+
grpc_compression_algorithm algorithm, int enabled);
|
|
78
93
|
|
|
79
94
|
/** Returns the bitset representing the support state (true for enabled, false
|
|
80
95
|
* for disabled) for compression algorithms.
|
|
@@ -87,6 +102,17 @@ uint32_t grpc_channel_args_compression_algorithm_get_states(
|
|
|
87
102
|
int grpc_channel_args_compare(const grpc_channel_args *a,
|
|
88
103
|
const grpc_channel_args *b);
|
|
89
104
|
|
|
105
|
+
/** Returns a channel arg instance with socket mutator added. The socket mutator
|
|
106
|
+
* will perform its mutate_fd method on all file descriptors used by the
|
|
107
|
+
* channel.
|
|
108
|
+
* If \a a is non-MULL, its args are copied. */
|
|
109
|
+
grpc_channel_args *grpc_channel_args_set_socket_mutator(
|
|
110
|
+
grpc_channel_args *a, grpc_socket_mutator *mutator);
|
|
111
|
+
|
|
112
|
+
/** Returns the value of argument \a name from \a args, or NULL if not found. */
|
|
113
|
+
const grpc_arg *grpc_channel_args_find(const grpc_channel_args *args,
|
|
114
|
+
const char *name);
|
|
115
|
+
|
|
90
116
|
typedef struct grpc_integer_options {
|
|
91
117
|
int default_value; // Return this if value is outside of expected bounds.
|
|
92
118
|
int min_value;
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
*/
|
|
33
33
|
|
|
34
34
|
#include "src/core/lib/channel/channel_stack.h"
|
|
35
|
+
#include <grpc/support/alloc.h>
|
|
35
36
|
#include <grpc/support/log.h>
|
|
36
37
|
|
|
37
38
|
#include <stdlib.h>
|
|
@@ -101,13 +102,11 @@ grpc_call_element *grpc_call_stack_element(grpc_call_stack *call_stack,
|
|
|
101
102
|
return CALL_ELEMS_FROM_STACK(call_stack) + index;
|
|
102
103
|
}
|
|
103
104
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
grpc_transport *optional_transport,
|
|
110
|
-
const char *name, grpc_channel_stack *stack) {
|
|
105
|
+
grpc_error *grpc_channel_stack_init(
|
|
106
|
+
grpc_exec_ctx *exec_ctx, int initial_refs, grpc_iomgr_cb_func destroy,
|
|
107
|
+
void *destroy_arg, const grpc_channel_filter **filters, size_t filter_count,
|
|
108
|
+
const grpc_channel_args *channel_args, grpc_transport *optional_transport,
|
|
109
|
+
const char *name, grpc_channel_stack *stack) {
|
|
111
110
|
size_t call_size =
|
|
112
111
|
ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call_stack)) +
|
|
113
112
|
ROUND_UP_TO_ALIGNMENT_SIZE(filter_count * sizeof(grpc_call_element));
|
|
@@ -125,6 +124,7 @@ void grpc_channel_stack_init(grpc_exec_ctx *exec_ctx, int initial_refs,
|
|
|
125
124
|
ROUND_UP_TO_ALIGNMENT_SIZE(filter_count * sizeof(grpc_channel_element));
|
|
126
125
|
|
|
127
126
|
/* init per-filter data */
|
|
127
|
+
grpc_error *first_error = GRPC_ERROR_NONE;
|
|
128
128
|
for (i = 0; i < filter_count; i++) {
|
|
129
129
|
args.channel_stack = stack;
|
|
130
130
|
args.channel_args = channel_args;
|
|
@@ -133,7 +133,15 @@ void grpc_channel_stack_init(grpc_exec_ctx *exec_ctx, int initial_refs,
|
|
|
133
133
|
args.is_last = i == (filter_count - 1);
|
|
134
134
|
elems[i].filter = filters[i];
|
|
135
135
|
elems[i].channel_data = user_data;
|
|
136
|
-
|
|
136
|
+
grpc_error *error =
|
|
137
|
+
elems[i].filter->init_channel_elem(exec_ctx, &elems[i], &args);
|
|
138
|
+
if (error != GRPC_ERROR_NONE) {
|
|
139
|
+
if (first_error == GRPC_ERROR_NONE) {
|
|
140
|
+
first_error = error;
|
|
141
|
+
} else {
|
|
142
|
+
GRPC_ERROR_UNREF(error);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
137
145
|
user_data += ROUND_UP_TO_ALIGNMENT_SIZE(filters[i]->sizeof_channel_data);
|
|
138
146
|
call_size += ROUND_UP_TO_ALIGNMENT_SIZE(filters[i]->sizeof_call_data);
|
|
139
147
|
}
|
|
@@ -143,6 +151,7 @@ void grpc_channel_stack_init(grpc_exec_ctx *exec_ctx, int initial_refs,
|
|
|
143
151
|
grpc_channel_stack_size(filters, filter_count));
|
|
144
152
|
|
|
145
153
|
stack->call_stack_size = call_size;
|
|
154
|
+
return first_error;
|
|
146
155
|
}
|
|
147
156
|
|
|
148
157
|
void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
|
|
@@ -157,12 +166,12 @@ void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
|
|
|
157
166
|
}
|
|
158
167
|
}
|
|
159
168
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
169
|
+
grpc_error *grpc_call_stack_init(
|
|
170
|
+
grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack,
|
|
171
|
+
int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg,
|
|
172
|
+
grpc_call_context_element *context, const void *transport_server_data,
|
|
173
|
+
grpc_mdstr *path, gpr_timespec start_time, gpr_timespec deadline,
|
|
174
|
+
grpc_call_stack *call_stack) {
|
|
166
175
|
grpc_channel_element *channel_elems = CHANNEL_ELEMS_FROM_STACK(channel_stack);
|
|
167
176
|
grpc_call_element_args args;
|
|
168
177
|
size_t count = channel_stack->count;
|
|
@@ -178,17 +187,30 @@ void grpc_call_stack_init(grpc_exec_ctx *exec_ctx,
|
|
|
178
187
|
ROUND_UP_TO_ALIGNMENT_SIZE(count * sizeof(grpc_call_element));
|
|
179
188
|
|
|
180
189
|
/* init per-filter data */
|
|
190
|
+
grpc_error *first_error = GRPC_ERROR_NONE;
|
|
191
|
+
args.start_time = start_time;
|
|
181
192
|
for (i = 0; i < count; i++) {
|
|
182
193
|
args.call_stack = call_stack;
|
|
183
194
|
args.server_transport_data = transport_server_data;
|
|
184
195
|
args.context = context;
|
|
196
|
+
args.path = path;
|
|
197
|
+
args.deadline = deadline;
|
|
185
198
|
call_elems[i].filter = channel_elems[i].filter;
|
|
186
199
|
call_elems[i].channel_data = channel_elems[i].channel_data;
|
|
187
200
|
call_elems[i].call_data = user_data;
|
|
188
|
-
|
|
201
|
+
grpc_error *error =
|
|
202
|
+
call_elems[i].filter->init_call_elem(exec_ctx, &call_elems[i], &args);
|
|
203
|
+
if (error != GRPC_ERROR_NONE) {
|
|
204
|
+
if (first_error == GRPC_ERROR_NONE) {
|
|
205
|
+
first_error = error;
|
|
206
|
+
} else {
|
|
207
|
+
GRPC_ERROR_UNREF(error);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
189
210
|
user_data +=
|
|
190
211
|
ROUND_UP_TO_ALIGNMENT_SIZE(call_elems[i].filter->sizeof_call_data);
|
|
191
212
|
}
|
|
213
|
+
return first_error;
|
|
192
214
|
}
|
|
193
215
|
|
|
194
216
|
void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
|
|
@@ -217,7 +239,7 @@ void grpc_call_stack_ignore_set_pollset_or_pollset_set(
|
|
|
217
239
|
grpc_polling_entity *pollent) {}
|
|
218
240
|
|
|
219
241
|
void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack,
|
|
220
|
-
const
|
|
242
|
+
const grpc_call_final_info *final_info,
|
|
221
243
|
void *and_free_memory) {
|
|
222
244
|
grpc_call_element *elems = CALL_ELEMS_FROM_STACK(stack);
|
|
223
245
|
size_t count = stack->count;
|
|
@@ -225,7 +247,7 @@ void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack,
|
|
|
225
247
|
|
|
226
248
|
/* destroy per-filter data */
|
|
227
249
|
for (i = 0; i < count; i++) {
|
|
228
|
-
elems[i].filter->destroy_call_elem(exec_ctx, &elems[i],
|
|
250
|
+
elems[i].filter->destroy_call_elem(exec_ctx, &elems[i], final_info,
|
|
229
251
|
i == count - 1 ? and_free_memory : NULL);
|
|
230
252
|
}
|
|
231
253
|
}
|
|
@@ -242,6 +264,13 @@ char *grpc_call_next_get_peer(grpc_exec_ctx *exec_ctx,
|
|
|
242
264
|
return next_elem->filter->get_peer(exec_ctx, next_elem);
|
|
243
265
|
}
|
|
244
266
|
|
|
267
|
+
void grpc_channel_next_get_info(grpc_exec_ctx *exec_ctx,
|
|
268
|
+
grpc_channel_element *elem,
|
|
269
|
+
const grpc_channel_info *channel_info) {
|
|
270
|
+
grpc_channel_element *next_elem = elem + 1;
|
|
271
|
+
next_elem->filter->get_channel_info(exec_ctx, next_elem, channel_info);
|
|
272
|
+
}
|
|
273
|
+
|
|
245
274
|
void grpc_channel_next_op(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem,
|
|
246
275
|
grpc_transport_op *op) {
|
|
247
276
|
grpc_channel_element *next_elem = elem + 1;
|
|
@@ -259,21 +288,41 @@ grpc_call_stack *grpc_call_stack_from_top_element(grpc_call_element *elem) {
|
|
|
259
288
|
sizeof(grpc_call_stack)));
|
|
260
289
|
}
|
|
261
290
|
|
|
291
|
+
static void destroy_op(grpc_exec_ctx *exec_ctx, void *op, grpc_error *error) {
|
|
292
|
+
gpr_free(op);
|
|
293
|
+
}
|
|
294
|
+
|
|
262
295
|
void grpc_call_element_send_cancel(grpc_exec_ctx *exec_ctx,
|
|
263
|
-
grpc_call_element *
|
|
264
|
-
grpc_transport_stream_op op;
|
|
265
|
-
memset(
|
|
266
|
-
op
|
|
267
|
-
|
|
296
|
+
grpc_call_element *elem) {
|
|
297
|
+
grpc_transport_stream_op *op = gpr_malloc(sizeof(*op));
|
|
298
|
+
memset(op, 0, sizeof(*op));
|
|
299
|
+
op->cancel_error = GRPC_ERROR_CANCELLED;
|
|
300
|
+
op->on_complete =
|
|
301
|
+
grpc_closure_create(destroy_op, op, grpc_schedule_on_exec_ctx);
|
|
302
|
+
elem->filter->start_transport_stream_op(exec_ctx, elem, op);
|
|
268
303
|
}
|
|
269
304
|
|
|
270
305
|
void grpc_call_element_send_cancel_with_message(grpc_exec_ctx *exec_ctx,
|
|
271
|
-
grpc_call_element *
|
|
306
|
+
grpc_call_element *elem,
|
|
272
307
|
grpc_status_code status,
|
|
273
|
-
|
|
274
|
-
grpc_transport_stream_op op;
|
|
275
|
-
memset(
|
|
276
|
-
|
|
308
|
+
grpc_slice *optional_message) {
|
|
309
|
+
grpc_transport_stream_op *op = gpr_malloc(sizeof(*op));
|
|
310
|
+
memset(op, 0, sizeof(*op));
|
|
311
|
+
op->on_complete =
|
|
312
|
+
grpc_closure_create(destroy_op, op, grpc_schedule_on_exec_ctx);
|
|
313
|
+
grpc_transport_stream_op_add_cancellation_with_message(exec_ctx, op, status,
|
|
277
314
|
optional_message);
|
|
278
|
-
|
|
315
|
+
elem->filter->start_transport_stream_op(exec_ctx, elem, op);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
void grpc_call_element_send_close_with_message(grpc_exec_ctx *exec_ctx,
|
|
319
|
+
grpc_call_element *elem,
|
|
320
|
+
grpc_status_code status,
|
|
321
|
+
grpc_slice *optional_message) {
|
|
322
|
+
grpc_transport_stream_op *op = gpr_malloc(sizeof(*op));
|
|
323
|
+
memset(op, 0, sizeof(*op));
|
|
324
|
+
op->on_complete =
|
|
325
|
+
grpc_closure_create(destroy_op, op, grpc_schedule_on_exec_ctx);
|
|
326
|
+
grpc_transport_stream_op_add_close(exec_ctx, op, status, optional_message);
|
|
327
|
+
elem->filter->start_transport_stream_op(exec_ctx, elem, op);
|
|
279
328
|
}
|
|
@@ -34,6 +34,13 @@
|
|
|
34
34
|
#ifndef GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H
|
|
35
35
|
#define GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H
|
|
36
36
|
|
|
37
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
38
|
+
// IMPORTANT NOTE:
|
|
39
|
+
//
|
|
40
|
+
// When you update this API, please make the corresponding changes to
|
|
41
|
+
// the C++ API in src/cpp/common/channel_filter.{h,cc}
|
|
42
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
43
|
+
|
|
37
44
|
/* A channel filter defines how operations on a channel are implemented.
|
|
38
45
|
Channel filters are chained together to create full channels, and if those
|
|
39
46
|
chains are linear, then channel stacks provide a mechanism to minimize
|
|
@@ -51,6 +58,10 @@
|
|
|
51
58
|
#include "src/core/lib/iomgr/polling_entity.h"
|
|
52
59
|
#include "src/core/lib/transport/transport.h"
|
|
53
60
|
|
|
61
|
+
#ifdef __cplusplus
|
|
62
|
+
extern "C" {
|
|
63
|
+
#endif
|
|
64
|
+
|
|
54
65
|
typedef struct grpc_channel_element grpc_channel_element;
|
|
55
66
|
typedef struct grpc_call_element grpc_call_element;
|
|
56
67
|
|
|
@@ -70,14 +81,22 @@ typedef struct {
|
|
|
70
81
|
grpc_call_stack *call_stack;
|
|
71
82
|
const void *server_transport_data;
|
|
72
83
|
grpc_call_context_element *context;
|
|
84
|
+
grpc_mdstr *path;
|
|
85
|
+
gpr_timespec start_time;
|
|
86
|
+
gpr_timespec deadline;
|
|
73
87
|
} grpc_call_element_args;
|
|
74
88
|
|
|
75
89
|
typedef struct {
|
|
76
90
|
grpc_transport_stream_stats transport_stream_stats;
|
|
77
91
|
gpr_timespec latency; /* From call creating to enqueing of received status */
|
|
78
|
-
grpc_status_code final_status;
|
|
79
92
|
} grpc_call_stats;
|
|
80
93
|
|
|
94
|
+
/** Information about the call upon completion. */
|
|
95
|
+
typedef struct {
|
|
96
|
+
grpc_call_stats stats;
|
|
97
|
+
grpc_status_code final_status;
|
|
98
|
+
} grpc_call_final_info;
|
|
99
|
+
|
|
81
100
|
/* Channel filters specify:
|
|
82
101
|
1. the amount of memory needed in the channel & call (via the sizeof_XXX
|
|
83
102
|
members)
|
|
@@ -110,8 +129,9 @@ typedef struct {
|
|
|
110
129
|
on a client; if it is non-NULL, then it points to memory owned by the
|
|
111
130
|
transport and is on the server. Most filters want to ignore this
|
|
112
131
|
argument. */
|
|
113
|
-
|
|
114
|
-
|
|
132
|
+
grpc_error *(*init_call_elem)(grpc_exec_ctx *exec_ctx,
|
|
133
|
+
grpc_call_element *elem,
|
|
134
|
+
grpc_call_element_args *args);
|
|
115
135
|
void (*set_pollset_or_pollset_set)(grpc_exec_ctx *exec_ctx,
|
|
116
136
|
grpc_call_element *elem,
|
|
117
137
|
grpc_polling_entity *pollent);
|
|
@@ -119,21 +139,23 @@ typedef struct {
|
|
|
119
139
|
The filter does not need to do any chaining.
|
|
120
140
|
The bottom filter of a stack will be passed a non-NULL pointer to
|
|
121
141
|
\a and_free_memory that should be passed to gpr_free when destruction
|
|
122
|
-
is complete.
|
|
142
|
+
is complete. \a final_info contains data about the completed call, mainly
|
|
143
|
+
for reporting purposes. */
|
|
123
144
|
void (*destroy_call_elem)(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
|
124
|
-
const
|
|
145
|
+
const grpc_call_final_info *final_info,
|
|
125
146
|
void *and_free_memory);
|
|
126
147
|
|
|
127
148
|
/* sizeof(per channel data) */
|
|
128
149
|
size_t sizeof_channel_data;
|
|
129
150
|
/* Initialize per-channel data.
|
|
130
|
-
elem is initialized at the
|
|
131
|
-
what needs initializing.
|
|
151
|
+
elem is initialized at the creating of the channel, and elem->channel_data
|
|
152
|
+
is what needs initializing.
|
|
132
153
|
is_first, is_last designate this elements position in the stack, and are
|
|
133
154
|
useful for asserting correct configuration by upper layer code.
|
|
134
155
|
The filter does not need to do any chaining */
|
|
135
|
-
|
|
136
|
-
|
|
156
|
+
grpc_error *(*init_channel_elem)(grpc_exec_ctx *exec_ctx,
|
|
157
|
+
grpc_channel_element *elem,
|
|
158
|
+
grpc_channel_element_args *args);
|
|
137
159
|
/* Destroy per channel data.
|
|
138
160
|
The filter does not need to do any chaining */
|
|
139
161
|
void (*destroy_channel_elem)(grpc_exec_ctx *exec_ctx,
|
|
@@ -142,6 +164,10 @@ typedef struct {
|
|
|
142
164
|
/* Implement grpc_call_get_peer() */
|
|
143
165
|
char *(*get_peer)(grpc_exec_ctx *exec_ctx, grpc_call_element *elem);
|
|
144
166
|
|
|
167
|
+
/* Implement grpc_channel_get_info() */
|
|
168
|
+
void (*get_channel_info)(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem,
|
|
169
|
+
const grpc_channel_info *channel_info);
|
|
170
|
+
|
|
145
171
|
/* The name of this filter */
|
|
146
172
|
const char *name;
|
|
147
173
|
} grpc_channel_filter;
|
|
@@ -196,12 +222,11 @@ grpc_call_element *grpc_call_stack_element(grpc_call_stack *stack, size_t i);
|
|
|
196
222
|
size_t grpc_channel_stack_size(const grpc_channel_filter **filters,
|
|
197
223
|
size_t filter_count);
|
|
198
224
|
/* Initialize a channel stack given some filters */
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const char *name, grpc_channel_stack *stack);
|
|
225
|
+
grpc_error *grpc_channel_stack_init(
|
|
226
|
+
grpc_exec_ctx *exec_ctx, int initial_refs, grpc_iomgr_cb_func destroy,
|
|
227
|
+
void *destroy_arg, const grpc_channel_filter **filters, size_t filter_count,
|
|
228
|
+
const grpc_channel_args *args, grpc_transport *optional_transport,
|
|
229
|
+
const char *name, grpc_channel_stack *stack);
|
|
205
230
|
/* Destroy a channel stack */
|
|
206
231
|
void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
|
|
207
232
|
grpc_channel_stack *stack);
|
|
@@ -209,12 +234,12 @@ void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
|
|
|
209
234
|
/* Initialize a call stack given a channel stack. transport_server_data is
|
|
210
235
|
expected to be NULL on a client, or an opaque transport owned pointer on the
|
|
211
236
|
server. */
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
237
|
+
grpc_error *grpc_call_stack_init(
|
|
238
|
+
grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack,
|
|
239
|
+
int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg,
|
|
240
|
+
grpc_call_context_element *context, const void *transport_server_data,
|
|
241
|
+
grpc_mdstr *path, gpr_timespec start_time, gpr_timespec deadline,
|
|
242
|
+
grpc_call_stack *call_stack);
|
|
218
243
|
/* Set a pollset or a pollset_set for a call stack: must occur before the first
|
|
219
244
|
* op is started */
|
|
220
245
|
void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
|
|
@@ -243,7 +268,7 @@ void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
|
|
|
243
268
|
|
|
244
269
|
/* Destroy a call stack */
|
|
245
270
|
void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack,
|
|
246
|
-
const
|
|
271
|
+
const grpc_call_final_info *final_info,
|
|
247
272
|
void *and_free_memory);
|
|
248
273
|
|
|
249
274
|
/* Ignore set pollset{_set} - used by filters if they don't care about pollsets
|
|
@@ -260,6 +285,10 @@ void grpc_channel_next_op(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem,
|
|
|
260
285
|
grpc_transport_op *op);
|
|
261
286
|
/* Pass through a request to get_peer to the next child element */
|
|
262
287
|
char *grpc_call_next_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem);
|
|
288
|
+
/* Pass through a request to get_channel_info() to the next child element */
|
|
289
|
+
void grpc_channel_next_get_info(grpc_exec_ctx *exec_ctx,
|
|
290
|
+
grpc_channel_element *elem,
|
|
291
|
+
const grpc_channel_info *channel_info);
|
|
263
292
|
|
|
264
293
|
/* Given the top element of a channel stack, get the channel stack itself */
|
|
265
294
|
grpc_channel_stack *grpc_channel_stack_from_top_element(
|
|
@@ -276,11 +305,20 @@ void grpc_call_element_send_cancel(grpc_exec_ctx *exec_ctx,
|
|
|
276
305
|
void grpc_call_element_send_cancel_with_message(grpc_exec_ctx *exec_ctx,
|
|
277
306
|
grpc_call_element *cur_elem,
|
|
278
307
|
grpc_status_code status,
|
|
279
|
-
|
|
308
|
+
grpc_slice *optional_message);
|
|
309
|
+
|
|
310
|
+
void grpc_call_element_send_close_with_message(grpc_exec_ctx *exec_ctx,
|
|
311
|
+
grpc_call_element *cur_elem,
|
|
312
|
+
grpc_status_code status,
|
|
313
|
+
grpc_slice *optional_message);
|
|
280
314
|
|
|
281
315
|
extern int grpc_trace_channel;
|
|
282
316
|
|
|
283
317
|
#define GRPC_CALL_LOG_OP(sev, elem, op) \
|
|
284
318
|
if (grpc_trace_channel) grpc_call_log_op(sev, elem, op)
|
|
285
319
|
|
|
320
|
+
#ifdef __cplusplus
|
|
321
|
+
}
|
|
322
|
+
#endif
|
|
323
|
+
|
|
286
324
|
#endif /* GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_H */
|