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
@@ -4,8 +4,6 @@ framework module grpc {
|
|
4
4
|
header "byte_buffer_reader.h"
|
5
5
|
header "grpc_security.h"
|
6
6
|
header "grpc_security_constants.h"
|
7
|
-
header "impl/codegen/alloc.h"
|
8
|
-
header "impl/codegen/byte_buffer_reader.h"
|
9
7
|
header "support/alloc.h"
|
10
8
|
header "support/port_platform.h"
|
11
9
|
header "support/string_util.h"
|
@@ -0,0 +1,132 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, 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_SLICE_H
|
35
|
+
#define GRPC_SLICE_H
|
36
|
+
|
37
|
+
#include <grpc/impl/codegen/slice.h>
|
38
|
+
#include <grpc/support/sync.h>
|
39
|
+
|
40
|
+
#ifdef __cplusplus
|
41
|
+
extern "C" {
|
42
|
+
#endif
|
43
|
+
|
44
|
+
/* Increment the refcount of s. Requires slice is initialized.
|
45
|
+
Returns s. */
|
46
|
+
GPRAPI grpc_slice grpc_slice_ref(grpc_slice s);
|
47
|
+
|
48
|
+
/* Decrement the ref count of s. If the ref count of s reaches zero, all
|
49
|
+
slices sharing the ref count are destroyed, and considered no longer
|
50
|
+
initialized. If s is ultimately derived from a call to grpc_slice_new(start,
|
51
|
+
len, dest) where dest!=NULL , then (*dest)(start) is called, else if s is
|
52
|
+
ultimately derived from a call to grpc_slice_new_with_len(start, len, dest)
|
53
|
+
where dest!=NULL , then (*dest)(start, len). Requires s initialized. */
|
54
|
+
GPRAPI void grpc_slice_unref(grpc_slice s);
|
55
|
+
|
56
|
+
/* Create a slice pointing at some data. Calls malloc to allocate a refcount
|
57
|
+
for the object, and arranges that destroy will be called with the pointer
|
58
|
+
passed in at destruction. */
|
59
|
+
GPRAPI grpc_slice grpc_slice_new(void *p, size_t len, void (*destroy)(void *));
|
60
|
+
|
61
|
+
/* Equivalent to grpc_slice_new, but with a separate pointer that is
|
62
|
+
passed to the destroy function. This function can be useful when
|
63
|
+
the data is part of a larger structure that must be destroyed when
|
64
|
+
the data is no longer needed. */
|
65
|
+
GPRAPI grpc_slice grpc_slice_new_with_user_data(void *p, size_t len,
|
66
|
+
void (*destroy)(void *),
|
67
|
+
void *user_data);
|
68
|
+
|
69
|
+
/* Equivalent to grpc_slice_new, but with a two argument destroy function that
|
70
|
+
also takes the slice length. */
|
71
|
+
GPRAPI grpc_slice grpc_slice_new_with_len(void *p, size_t len,
|
72
|
+
void (*destroy)(void *, size_t));
|
73
|
+
|
74
|
+
/* Equivalent to grpc_slice_new(malloc(len), len, free), but saves one malloc()
|
75
|
+
call.
|
76
|
+
Aborts if malloc() fails. */
|
77
|
+
GPRAPI grpc_slice grpc_slice_malloc(size_t length);
|
78
|
+
|
79
|
+
/* Create a slice by copying a string.
|
80
|
+
Does not preserve null terminators.
|
81
|
+
Equivalent to:
|
82
|
+
size_t len = strlen(source);
|
83
|
+
grpc_slice slice = grpc_slice_malloc(len);
|
84
|
+
memcpy(slice->data, source, len); */
|
85
|
+
GPRAPI grpc_slice grpc_slice_from_copied_string(const char *source);
|
86
|
+
|
87
|
+
/* Create a slice by copying a buffer.
|
88
|
+
Equivalent to:
|
89
|
+
grpc_slice slice = grpc_slice_malloc(len);
|
90
|
+
memcpy(slice->data, source, len); */
|
91
|
+
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len);
|
92
|
+
|
93
|
+
/* Create a slice pointing to constant memory */
|
94
|
+
GPRAPI grpc_slice grpc_slice_from_static_string(const char *source);
|
95
|
+
|
96
|
+
/* Return a result slice derived from s, which shares a ref count with s, where
|
97
|
+
result.data==s.data+begin, and result.length==end-begin.
|
98
|
+
The ref count of s is increased by one.
|
99
|
+
Requires s initialized, begin <= end, begin <= s.length, and
|
100
|
+
end <= source->length. */
|
101
|
+
GPRAPI grpc_slice grpc_slice_sub(grpc_slice s, size_t begin, size_t end);
|
102
|
+
|
103
|
+
/* The same as grpc_slice_sub, but without altering the ref count */
|
104
|
+
GPRAPI grpc_slice grpc_slice_sub_no_ref(grpc_slice s, size_t begin, size_t end);
|
105
|
+
|
106
|
+
/* Splits s into two: modifies s to be s[0:split], and returns a new slice,
|
107
|
+
sharing a refcount with s, that contains s[split:s.length].
|
108
|
+
Requires s intialized, split <= s.length */
|
109
|
+
GPRAPI grpc_slice grpc_slice_split_tail(grpc_slice *s, size_t split);
|
110
|
+
|
111
|
+
/* Splits s into two: modifies s to be s[split:s.length], and returns a new
|
112
|
+
slice, sharing a refcount with s, that contains s[0:split].
|
113
|
+
Requires s intialized, split <= s.length */
|
114
|
+
GPRAPI grpc_slice grpc_slice_split_head(grpc_slice *s, size_t split);
|
115
|
+
|
116
|
+
GPRAPI grpc_slice gpr_empty_slice(void);
|
117
|
+
|
118
|
+
/* Returns <0 if a < b, ==0 if a == b, >0 if a > b
|
119
|
+
The order is arbitrary, and is not guaranteed to be stable across different
|
120
|
+
versions of the API. */
|
121
|
+
GPRAPI int grpc_slice_cmp(grpc_slice a, grpc_slice b);
|
122
|
+
GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char *b);
|
123
|
+
|
124
|
+
/* Do two slices point at the same memory, with the same length
|
125
|
+
If a or b is inlined, actually compares data */
|
126
|
+
GPRAPI int grpc_slice_is_equivalent(grpc_slice a, grpc_slice b);
|
127
|
+
|
128
|
+
#ifdef __cplusplus
|
129
|
+
}
|
130
|
+
#endif
|
131
|
+
|
132
|
+
#endif /* GRPC_SLICE_H */
|
@@ -31,40 +31,23 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#ifndef
|
35
|
-
#define
|
34
|
+
#ifndef GRPC_SLICE_BUFFER_H
|
35
|
+
#define GRPC_SLICE_BUFFER_H
|
36
36
|
|
37
|
-
#include <grpc/
|
37
|
+
#include <grpc/slice.h>
|
38
38
|
|
39
39
|
#ifdef __cplusplus
|
40
40
|
extern "C" {
|
41
41
|
#endif
|
42
42
|
|
43
|
-
#define GRPC_SLICE_BUFFER_INLINE_ELEMENTS 8
|
44
|
-
|
45
|
-
/* Represents an expandable array of slices, to be interpreted as a
|
46
|
-
single item. */
|
47
|
-
typedef struct {
|
48
|
-
/* slices in the array */
|
49
|
-
gpr_slice *slices;
|
50
|
-
/* the number of slices in the array */
|
51
|
-
size_t count;
|
52
|
-
/* the number of slices allocated in the array */
|
53
|
-
size_t capacity;
|
54
|
-
/* the combined length of all slices in the array */
|
55
|
-
size_t length;
|
56
|
-
/* inlined elements to avoid allocations */
|
57
|
-
gpr_slice inlined[GRPC_SLICE_BUFFER_INLINE_ELEMENTS];
|
58
|
-
} gpr_slice_buffer;
|
59
|
-
|
60
43
|
/* initialize a slice buffer */
|
61
|
-
GPRAPI void
|
44
|
+
GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer *sb);
|
62
45
|
/* destroy a slice buffer - unrefs any held elements */
|
63
|
-
GPRAPI void
|
46
|
+
GPRAPI void grpc_slice_buffer_destroy(grpc_slice_buffer *sb);
|
64
47
|
/* Add an element to a slice buffer - takes ownership of the slice.
|
65
48
|
This function is allowed to concatenate the passed in slice to the end of
|
66
49
|
some other slice if desired by the slice buffer. */
|
67
|
-
GPRAPI void
|
50
|
+
GPRAPI void grpc_slice_buffer_add(grpc_slice_buffer *sb, grpc_slice slice);
|
68
51
|
/* add an element to a slice buffer - takes ownership of the slice and returns
|
69
52
|
the index of the slice.
|
70
53
|
Guarantees that the slice will not be concatenated at the end of another
|
@@ -72,33 +55,33 @@ GPRAPI void gpr_slice_buffer_add(gpr_slice_buffer *sb, gpr_slice slice);
|
|
72
55
|
slice at the returned index in sb->slices)
|
73
56
|
The implementation MAY decide to concatenate data at the end of a small
|
74
57
|
slice added in this fashion. */
|
75
|
-
GPRAPI size_t
|
76
|
-
|
77
|
-
GPRAPI void
|
78
|
-
|
58
|
+
GPRAPI size_t grpc_slice_buffer_add_indexed(grpc_slice_buffer *sb,
|
59
|
+
grpc_slice slice);
|
60
|
+
GPRAPI void grpc_slice_buffer_addn(grpc_slice_buffer *sb, grpc_slice *slices,
|
61
|
+
size_t n);
|
79
62
|
/* add a very small (less than 8 bytes) amount of data to the end of a slice
|
80
63
|
buffer: returns a pointer into which to add the data */
|
81
|
-
GPRAPI uint8_t *
|
64
|
+
GPRAPI uint8_t *grpc_slice_buffer_tiny_add(grpc_slice_buffer *sb, size_t len);
|
82
65
|
/* pop the last buffer, but don't unref it */
|
83
|
-
GPRAPI void
|
66
|
+
GPRAPI void grpc_slice_buffer_pop(grpc_slice_buffer *sb);
|
84
67
|
/* clear a slice buffer, unref all elements */
|
85
|
-
GPRAPI void
|
68
|
+
GPRAPI void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer *sb);
|
86
69
|
/* swap the contents of two slice buffers */
|
87
|
-
GPRAPI void
|
70
|
+
GPRAPI void grpc_slice_buffer_swap(grpc_slice_buffer *a, grpc_slice_buffer *b);
|
88
71
|
/* move all of the elements of src into dst */
|
89
|
-
GPRAPI void
|
90
|
-
|
72
|
+
GPRAPI void grpc_slice_buffer_move_into(grpc_slice_buffer *src,
|
73
|
+
grpc_slice_buffer *dst);
|
91
74
|
/* remove n bytes from the end of a slice buffer */
|
92
|
-
GPRAPI void
|
93
|
-
|
75
|
+
GPRAPI void grpc_slice_buffer_trim_end(grpc_slice_buffer *src, size_t n,
|
76
|
+
grpc_slice_buffer *garbage);
|
94
77
|
/* move the first n bytes of src into dst */
|
95
|
-
GPRAPI void
|
96
|
-
|
78
|
+
GPRAPI void grpc_slice_buffer_move_first(grpc_slice_buffer *src, size_t n,
|
79
|
+
grpc_slice_buffer *dst);
|
97
80
|
/* take the first slice in the slice buffer */
|
98
|
-
GPRAPI
|
81
|
+
GPRAPI grpc_slice grpc_slice_buffer_take_first(grpc_slice_buffer *src);
|
99
82
|
|
100
83
|
#ifdef __cplusplus
|
101
84
|
}
|
102
85
|
#endif
|
103
86
|
|
104
|
-
#endif /*
|
87
|
+
#endif /* GRPC_SLICE_BUFFER_H */
|
@@ -34,6 +34,45 @@
|
|
34
34
|
#ifndef GRPC_SUPPORT_ALLOC_H
|
35
35
|
#define GRPC_SUPPORT_ALLOC_H
|
36
36
|
|
37
|
-
#include <
|
37
|
+
#include <stddef.h>
|
38
|
+
|
39
|
+
#include <grpc/impl/codegen/port_platform.h>
|
40
|
+
|
41
|
+
#ifdef __cplusplus
|
42
|
+
extern "C" {
|
43
|
+
#endif
|
44
|
+
|
45
|
+
typedef struct gpr_allocation_functions {
|
46
|
+
void *(*malloc_fn)(size_t size);
|
47
|
+
void *(*realloc_fn)(void *ptr, size_t size);
|
48
|
+
void (*free_fn)(void *ptr);
|
49
|
+
} gpr_allocation_functions;
|
50
|
+
|
51
|
+
/* malloc.
|
52
|
+
* If size==0, always returns NULL. Otherwise this function never returns NULL.
|
53
|
+
* The pointer returned is suitably aligned for any kind of variable it could
|
54
|
+
* contain.
|
55
|
+
*/
|
56
|
+
GPRAPI void *gpr_malloc(size_t size);
|
57
|
+
/* free */
|
58
|
+
GPRAPI void gpr_free(void *ptr);
|
59
|
+
/* realloc, never returns NULL */
|
60
|
+
GPRAPI void *gpr_realloc(void *p, size_t size);
|
61
|
+
/* aligned malloc, never returns NULL, will align to 1 << alignment_log */
|
62
|
+
GPRAPI void *gpr_malloc_aligned(size_t size, size_t alignment_log);
|
63
|
+
/* free memory allocated by gpr_malloc_aligned */
|
64
|
+
GPRAPI void gpr_free_aligned(void *ptr);
|
65
|
+
|
66
|
+
/** Request the family of allocation functions in \a functions be used. NOTE
|
67
|
+
* that this request will be honored in a *best effort* basis and that no
|
68
|
+
* guarantees are made about the default functions (eg, malloc) being called. */
|
69
|
+
GPRAPI void gpr_set_allocation_functions(gpr_allocation_functions functions);
|
70
|
+
|
71
|
+
/** Return the family of allocation functions currently in effect. */
|
72
|
+
GPRAPI gpr_allocation_functions gpr_get_allocation_functions();
|
73
|
+
|
74
|
+
#ifdef __cplusplus
|
75
|
+
}
|
76
|
+
#endif
|
38
77
|
|
39
78
|
#endif /* GRPC_SUPPORT_ALLOC_H */
|
data/include/grpc/support/log.h
CHANGED
@@ -34,6 +34,85 @@
|
|
34
34
|
#ifndef GRPC_SUPPORT_LOG_H
|
35
35
|
#define GRPC_SUPPORT_LOG_H
|
36
36
|
|
37
|
-
#include <
|
37
|
+
#include <inttypes.h>
|
38
|
+
#include <stdarg.h>
|
39
|
+
#include <stdlib.h> /* for abort() */
|
40
|
+
|
41
|
+
#include <grpc/impl/codegen/port_platform.h>
|
42
|
+
|
43
|
+
#ifdef __cplusplus
|
44
|
+
extern "C" {
|
45
|
+
#endif
|
46
|
+
|
47
|
+
/* GPR log API.
|
48
|
+
|
49
|
+
Usage (within grpc):
|
50
|
+
|
51
|
+
int argument1 = 3;
|
52
|
+
char* argument2 = "hello";
|
53
|
+
gpr_log(GPR_DEBUG, "format string %d", argument1);
|
54
|
+
gpr_log(GPR_INFO, "hello world");
|
55
|
+
gpr_log(GPR_ERROR, "%d %s!!", argument1, argument2); */
|
56
|
+
|
57
|
+
/* The severity of a log message - use the #defines below when calling into
|
58
|
+
gpr_log to additionally supply file and line data */
|
59
|
+
typedef enum gpr_log_severity {
|
60
|
+
GPR_LOG_SEVERITY_DEBUG,
|
61
|
+
GPR_LOG_SEVERITY_INFO,
|
62
|
+
GPR_LOG_SEVERITY_ERROR
|
63
|
+
} gpr_log_severity;
|
64
|
+
|
65
|
+
#define GPR_LOG_VERBOSITY_UNSET -1
|
66
|
+
|
67
|
+
/* Returns a string representation of the log severity */
|
68
|
+
const char *gpr_log_severity_string(gpr_log_severity severity);
|
69
|
+
|
70
|
+
/* Macros to build log contexts at various severity levels */
|
71
|
+
#define GPR_DEBUG __FILE__, __LINE__, GPR_LOG_SEVERITY_DEBUG
|
72
|
+
#define GPR_INFO __FILE__, __LINE__, GPR_LOG_SEVERITY_INFO
|
73
|
+
#define GPR_ERROR __FILE__, __LINE__, GPR_LOG_SEVERITY_ERROR
|
74
|
+
|
75
|
+
/* Log a message. It's advised to use GPR_xxx above to generate the context
|
76
|
+
* for each message */
|
77
|
+
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity,
|
78
|
+
const char *format, ...) GPR_PRINT_FORMAT_CHECK(4, 5);
|
79
|
+
|
80
|
+
GPRAPI void gpr_log_message(const char *file, int line,
|
81
|
+
gpr_log_severity severity, const char *message);
|
82
|
+
|
83
|
+
/* Set global log verbosity */
|
84
|
+
GPRAPI void gpr_set_log_verbosity(gpr_log_severity min_severity_to_print);
|
85
|
+
|
86
|
+
GPRAPI void gpr_log_verbosity_init();
|
87
|
+
|
88
|
+
/* Log overrides: applications can use this API to intercept logging calls
|
89
|
+
and use their own implementations */
|
90
|
+
|
91
|
+
typedef struct {
|
92
|
+
const char *file;
|
93
|
+
int line;
|
94
|
+
gpr_log_severity severity;
|
95
|
+
const char *message;
|
96
|
+
} gpr_log_func_args;
|
97
|
+
|
98
|
+
typedef void (*gpr_log_func)(gpr_log_func_args *args);
|
99
|
+
GPRAPI void gpr_set_log_function(gpr_log_func func);
|
100
|
+
|
101
|
+
/* abort() the process if x is zero, having written a line to the log.
|
102
|
+
|
103
|
+
Intended for internal invariants. If the error can be recovered from,
|
104
|
+
without the possibility of corruption, or might best be reflected via
|
105
|
+
an exception in a higher-level language, consider returning error code. */
|
106
|
+
#define GPR_ASSERT(x) \
|
107
|
+
do { \
|
108
|
+
if (!(x)) { \
|
109
|
+
gpr_log(GPR_ERROR, "assertion failed: %s", #x); \
|
110
|
+
abort(); \
|
111
|
+
} \
|
112
|
+
} while (0)
|
113
|
+
|
114
|
+
#ifdef __cplusplus
|
115
|
+
}
|
116
|
+
#endif
|
38
117
|
|
39
118
|
#endif /* GRPC_SUPPORT_LOG_H */
|
@@ -55,7 +55,7 @@ GPRAPI char *gpr_strdup(const char *src);
|
|
55
55
|
On error, returns -1 and sets *strp to NULL. If the format string is bad,
|
56
56
|
the result is undefined. */
|
57
57
|
GPRAPI int gpr_asprintf(char **strp, const char *format, ...)
|
58
|
-
|
58
|
+
GPR_PRINT_FORMAT_CHECK(2, 3);
|
59
59
|
|
60
60
|
#ifdef __cplusplus
|
61
61
|
}
|
data/include/grpc/support/sync.h
CHANGED
@@ -34,6 +34,258 @@
|
|
34
34
|
#ifndef GRPC_SUPPORT_SYNC_H
|
35
35
|
#define GRPC_SUPPORT_SYNC_H
|
36
36
|
|
37
|
+
#include <grpc/impl/codegen/gpr_types.h> /* for gpr_timespec */
|
37
38
|
#include <grpc/impl/codegen/sync.h>
|
38
39
|
|
40
|
+
#ifdef __cplusplus
|
41
|
+
extern "C" {
|
42
|
+
#endif
|
43
|
+
|
44
|
+
/* --- Mutex interface ---
|
45
|
+
|
46
|
+
At most one thread may hold an exclusive lock on a mutex at any given time.
|
47
|
+
Actions taken by a thread that holds a mutex exclusively happen after
|
48
|
+
actions taken by all previous holders of the mutex. Variables of type
|
49
|
+
gpr_mu are uninitialized when first declared. */
|
50
|
+
|
51
|
+
/* Initialize *mu. Requires: *mu uninitialized. */
|
52
|
+
GPRAPI void gpr_mu_init(gpr_mu *mu);
|
53
|
+
|
54
|
+
/* Cause *mu no longer to be initialized, freeing any memory in use. Requires:
|
55
|
+
*mu initialized; no other concurrent operation on *mu. */
|
56
|
+
GPRAPI void gpr_mu_destroy(gpr_mu *mu);
|
57
|
+
|
58
|
+
/* Wait until no thread has a lock on *mu, cause the calling thread to own an
|
59
|
+
exclusive lock on *mu, then return. May block indefinitely or crash if the
|
60
|
+
calling thread has a lock on *mu. Requires: *mu initialized. */
|
61
|
+
GPRAPI void gpr_mu_lock(gpr_mu *mu);
|
62
|
+
|
63
|
+
/* Release an exclusive lock on *mu held by the calling thread. Requires: *mu
|
64
|
+
initialized; the calling thread holds an exclusive lock on *mu. */
|
65
|
+
GPRAPI void gpr_mu_unlock(gpr_mu *mu);
|
66
|
+
|
67
|
+
/* Without blocking, attempt to acquire an exclusive lock on *mu for the
|
68
|
+
calling thread, then return non-zero iff success. Fail, if any thread holds
|
69
|
+
the lock; succeeds with high probability if no thread holds the lock.
|
70
|
+
Requires: *mu initialized. */
|
71
|
+
GPRAPI int gpr_mu_trylock(gpr_mu *mu);
|
72
|
+
|
73
|
+
/* --- Condition variable interface ---
|
74
|
+
|
75
|
+
A while-loop should be used with gpr_cv_wait() when waiting for conditions
|
76
|
+
to become true. See the example below. Variables of type gpr_cv are
|
77
|
+
uninitialized when first declared. */
|
78
|
+
|
79
|
+
/* Initialize *cv. Requires: *cv uninitialized. */
|
80
|
+
GPRAPI void gpr_cv_init(gpr_cv *cv);
|
81
|
+
|
82
|
+
/* Cause *cv no longer to be initialized, freeing any memory in use. Requires:
|
83
|
+
*cv initialized; no other concurrent operation on *cv.*/
|
84
|
+
GPRAPI void gpr_cv_destroy(gpr_cv *cv);
|
85
|
+
|
86
|
+
/* Atomically release *mu and wait on *cv. When the calling thread is woken
|
87
|
+
from *cv or the deadline abs_deadline is exceeded, execute gpr_mu_lock(mu)
|
88
|
+
and return whether the deadline was exceeded. Use
|
89
|
+
abs_deadline==gpr_inf_future for no deadline. abs_deadline can be either
|
90
|
+
an absolute deadline, or a GPR_TIMESPAN. May return even when not
|
91
|
+
woken explicitly. Requires: *mu and *cv initialized; the calling thread
|
92
|
+
holds an exclusive lock on *mu. */
|
93
|
+
GPRAPI int gpr_cv_wait(gpr_cv *cv, gpr_mu *mu, gpr_timespec abs_deadline);
|
94
|
+
|
95
|
+
/* If any threads are waiting on *cv, wake at least one.
|
96
|
+
Clients may treat this as an optimization of gpr_cv_broadcast()
|
97
|
+
for use in the case where waking more than one waiter is not useful.
|
98
|
+
Requires: *cv initialized. */
|
99
|
+
GPRAPI void gpr_cv_signal(gpr_cv *cv);
|
100
|
+
|
101
|
+
/* Wake all threads waiting on *cv. Requires: *cv initialized. */
|
102
|
+
GPRAPI void gpr_cv_broadcast(gpr_cv *cv);
|
103
|
+
|
104
|
+
/* --- One-time initialization ---
|
105
|
+
|
106
|
+
gpr_once must be declared with static storage class, and initialized with
|
107
|
+
GPR_ONCE_INIT. e.g.,
|
108
|
+
static gpr_once once_var = GPR_ONCE_INIT; */
|
109
|
+
|
110
|
+
/* Ensure that (*init_routine)() has been called exactly once (for the
|
111
|
+
specified gpr_once instance) and then return.
|
112
|
+
If multiple threads call gpr_once() on the same gpr_once instance, one of
|
113
|
+
them will call (*init_routine)(), and the others will block until that call
|
114
|
+
finishes.*/
|
115
|
+
GPRAPI void gpr_once_init(gpr_once *once, void (*init_routine)(void));
|
116
|
+
|
117
|
+
/* --- One-time event notification ---
|
118
|
+
|
119
|
+
These operations act on a gpr_event, which should be initialized with
|
120
|
+
gpr_ev_init(), or with GPR_EVENT_INIT if static, e.g.,
|
121
|
+
static gpr_event event_var = GPR_EVENT_INIT;
|
122
|
+
It requires no destruction. */
|
123
|
+
|
124
|
+
/* Initialize *ev. */
|
125
|
+
GPRAPI void gpr_event_init(gpr_event *ev);
|
126
|
+
|
127
|
+
/* Set *ev so that gpr_event_get() and gpr_event_wait() will return value.
|
128
|
+
Requires: *ev initialized; value != NULL; no prior or concurrent calls to
|
129
|
+
gpr_event_set(ev, ...) since initialization. */
|
130
|
+
GPRAPI void gpr_event_set(gpr_event *ev, void *value);
|
131
|
+
|
132
|
+
/* Return the value set by gpr_event_set(ev, ...), or NULL if no such call has
|
133
|
+
completed. If the result is non-NULL, all operations that occurred prior to
|
134
|
+
the gpr_event_set(ev, ...) set will be visible after this call returns.
|
135
|
+
Requires: *ev initialized. This operation is faster than acquiring a mutex
|
136
|
+
on most platforms. */
|
137
|
+
GPRAPI void *gpr_event_get(gpr_event *ev);
|
138
|
+
|
139
|
+
/* Wait until *ev is set by gpr_event_set(ev, ...), or abs_deadline is
|
140
|
+
exceeded, then return gpr_event_get(ev). Requires: *ev initialized. Use
|
141
|
+
abs_deadline==gpr_inf_future for no deadline. When the event has been
|
142
|
+
signalled before the call, this operation is faster than acquiring a mutex
|
143
|
+
on most platforms. */
|
144
|
+
GPRAPI void *gpr_event_wait(gpr_event *ev, gpr_timespec abs_deadline);
|
145
|
+
|
146
|
+
/* --- Reference counting ---
|
147
|
+
|
148
|
+
These calls act on the type gpr_refcount. It requires no destruction. */
|
149
|
+
|
150
|
+
/* Initialize *r to value n. */
|
151
|
+
GPRAPI void gpr_ref_init(gpr_refcount *r, int n);
|
152
|
+
|
153
|
+
/* Increment the reference count *r. Requires *r initialized. */
|
154
|
+
GPRAPI void gpr_ref(gpr_refcount *r);
|
155
|
+
|
156
|
+
/* Increment the reference count *r. Requires *r initialized.
|
157
|
+
Crashes if refcount is zero */
|
158
|
+
GPRAPI void gpr_ref_non_zero(gpr_refcount *r);
|
159
|
+
|
160
|
+
/* Increment the reference count *r by n. Requires *r initialized, n > 0. */
|
161
|
+
GPRAPI void gpr_refn(gpr_refcount *r, int n);
|
162
|
+
|
163
|
+
/* Decrement the reference count *r and return non-zero iff it has reached
|
164
|
+
zero. . Requires *r initialized. */
|
165
|
+
GPRAPI int gpr_unref(gpr_refcount *r);
|
166
|
+
|
167
|
+
/* --- Stats counters ---
|
168
|
+
|
169
|
+
These calls act on the integral type gpr_stats_counter. It requires no
|
170
|
+
destruction. Static instances may be initialized with
|
171
|
+
gpr_stats_counter c = GPR_STATS_INIT;
|
172
|
+
Beware: These operations do not imply memory barriers. Do not use them to
|
173
|
+
synchronize other events. */
|
174
|
+
|
175
|
+
/* Initialize *c to the value n. */
|
176
|
+
GPRAPI void gpr_stats_init(gpr_stats_counter *c, intptr_t n);
|
177
|
+
|
178
|
+
/* *c += inc. Requires: *c initialized. */
|
179
|
+
GPRAPI void gpr_stats_inc(gpr_stats_counter *c, intptr_t inc);
|
180
|
+
|
181
|
+
/* Return *c. Requires: *c initialized. */
|
182
|
+
GPRAPI intptr_t gpr_stats_read(const gpr_stats_counter *c);
|
183
|
+
|
184
|
+
/* ==================Example use of interface===================
|
185
|
+
A producer-consumer queue of up to N integers,
|
186
|
+
illustrating the use of the calls in this interface. */
|
187
|
+
#if 0
|
188
|
+
|
189
|
+
#define N 4
|
190
|
+
|
191
|
+
typedef struct queue {
|
192
|
+
gpr_cv non_empty; /* Signalled when length becomes non-zero. */
|
193
|
+
gpr_cv non_full; /* Signalled when length becomes non-N. */
|
194
|
+
gpr_mu mu; /* Protects all fields below.
|
195
|
+
(That is, except during initialization or
|
196
|
+
destruction, the fields below should be accessed
|
197
|
+
only by a thread that holds mu.) */
|
198
|
+
int head; /* Index of head of queue 0..N-1. */
|
199
|
+
int length; /* Number of valid elements in queue 0..N. */
|
200
|
+
int elem[N]; /* elem[head .. head+length-1] are queue elements. */
|
201
|
+
} queue;
|
202
|
+
|
203
|
+
/* Initialize *q. */
|
204
|
+
void queue_init(queue *q) {
|
205
|
+
gpr_mu_init(&q->mu);
|
206
|
+
gpr_cv_init(&q->non_empty);
|
207
|
+
gpr_cv_init(&q->non_full);
|
208
|
+
q->head = 0;
|
209
|
+
q->length = 0;
|
210
|
+
}
|
211
|
+
|
212
|
+
/* Free storage associated with *q. */
|
213
|
+
void queue_destroy(queue *q) {
|
214
|
+
gpr_mu_destroy(&q->mu);
|
215
|
+
gpr_cv_destroy(&q->non_empty);
|
216
|
+
gpr_cv_destroy(&q->non_full);
|
217
|
+
}
|
218
|
+
|
219
|
+
/* Wait until there is room in *q, then append x to *q. */
|
220
|
+
void queue_append(queue *q, int x) {
|
221
|
+
gpr_mu_lock(&q->mu);
|
222
|
+
/* To wait for a predicate without a deadline, loop on the negation of the
|
223
|
+
predicate, and use gpr_cv_wait(..., gpr_inf_future) inside the loop
|
224
|
+
to release the lock, wait, and reacquire on each iteration. Code that
|
225
|
+
makes the condition true should use gpr_cv_broadcast() on the
|
226
|
+
corresponding condition variable. The predicate must be on state
|
227
|
+
protected by the lock. */
|
228
|
+
while (q->length == N) {
|
229
|
+
gpr_cv_wait(&q->non_full, &q->mu, gpr_inf_future);
|
230
|
+
}
|
231
|
+
if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
|
232
|
+
/* It's normal to use gpr_cv_broadcast() or gpr_signal() while
|
233
|
+
holding the lock. */
|
234
|
+
gpr_cv_broadcast(&q->non_empty);
|
235
|
+
}
|
236
|
+
q->elem[(q->head + q->length) % N] = x;
|
237
|
+
q->length++;
|
238
|
+
gpr_mu_unlock(&q->mu);
|
239
|
+
}
|
240
|
+
|
241
|
+
/* If it can be done without blocking, append x to *q and return non-zero.
|
242
|
+
Otherwise return 0. */
|
243
|
+
int queue_try_append(queue *q, int x) {
|
244
|
+
int result = 0;
|
245
|
+
if (gpr_mu_trylock(&q->mu)) {
|
246
|
+
if (q->length != N) {
|
247
|
+
if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
|
248
|
+
gpr_cv_broadcast(&q->non_empty);
|
249
|
+
}
|
250
|
+
q->elem[(q->head + q->length) % N] = x;
|
251
|
+
q->length++;
|
252
|
+
result = 1;
|
253
|
+
}
|
254
|
+
gpr_mu_unlock(&q->mu);
|
255
|
+
}
|
256
|
+
return result;
|
257
|
+
}
|
258
|
+
|
259
|
+
/* Wait until the *q is non-empty or deadline abs_deadline passes. If the
|
260
|
+
queue is non-empty, remove its head entry, place it in *head, and return
|
261
|
+
non-zero. Otherwise return 0. */
|
262
|
+
int queue_remove(queue *q, int *head, gpr_timespec abs_deadline) {
|
263
|
+
int result = 0;
|
264
|
+
gpr_mu_lock(&q->mu);
|
265
|
+
/* To wait for a predicate with a deadline, loop on the negation of the
|
266
|
+
predicate or until gpr_cv_wait() returns true. Code that makes
|
267
|
+
the condition true should use gpr_cv_broadcast() on the corresponding
|
268
|
+
condition variable. The predicate must be on state protected by the
|
269
|
+
lock. */
|
270
|
+
while (q->length == 0 &&
|
271
|
+
!gpr_cv_wait(&q->non_empty, &q->mu, abs_deadline)) {
|
272
|
+
}
|
273
|
+
if (q->length != 0) { /* Queue is non-empty. */
|
274
|
+
result = 1;
|
275
|
+
if (q->length == N) { /* Wake threads blocked in queue_append(). */
|
276
|
+
gpr_cv_broadcast(&q->non_full);
|
277
|
+
}
|
278
|
+
*head = q->elem[q->head];
|
279
|
+
q->head = (q->head + 1) % N;
|
280
|
+
q->length--;
|
281
|
+
} /* else deadline exceeded */
|
282
|
+
gpr_mu_unlock(&q->mu);
|
283
|
+
return result;
|
284
|
+
}
|
285
|
+
#endif /* 0 */
|
286
|
+
|
287
|
+
#ifdef __cplusplus
|
288
|
+
}
|
289
|
+
#endif
|
290
|
+
|
39
291
|
#endif /* GRPC_SUPPORT_SYNC_H */
|