grpc 1.0.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +3696 -867
- data/etc/roots.pem +39 -111
- data/include/grpc/byte_buffer.h +64 -1
- data/include/grpc/census.h +40 -96
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +42 -7
- data/include/grpc/grpc_posix.h +8 -5
- data/include/grpc/impl/codegen/atm.h +3 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
- data/include/grpc/impl/codegen/compression_types.h +1 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
- data/include/grpc/impl/codegen/gpr_slice.h +84 -0
- data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
- data/include/grpc/impl/codegen/grpc_types.h +91 -9
- data/include/grpc/impl/codegen/port_platform.h +25 -92
- data/include/grpc/impl/codegen/slice.h +54 -97
- data/include/grpc/impl/codegen/sync.h +0 -253
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice.h +132 -0
- data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
- data/include/grpc/support/alloc.h +40 -1
- data/include/grpc/support/log.h +80 -1
- data/include/grpc/support/log_windows.h +2 -0
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +252 -0
- data/include/grpc/support/time.h +67 -1
- data/src/boringssl/err_data.c +639 -627
- data/src/core/ext/census/base_resources.c +71 -0
- data/src/core/ext/census/base_resources.h +39 -0
- data/src/core/ext/census/gen/census.pb.c +26 -29
- data/src/core/ext/census/gen/census.pb.h +68 -67
- data/src/core/ext/census/gen/trace_context.pb.c +81 -0
- data/src/core/ext/census/gen/trace_context.pb.h +99 -0
- data/src/core/ext/census/grpc_filter.c +22 -16
- data/src/core/ext/census/grpc_plugin.c +2 -1
- data/src/core/ext/census/initialize.c +16 -4
- data/src/core/ext/census/mlog.h +1 -1
- data/src/core/ext/census/placeholders.c +0 -45
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +68 -0
- data/src/core/ext/census/tracing.c +8 -2
- data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
- data/src/core/ext/client_channel/client_channel.c +1218 -0
- data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
- data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
- data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
- data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
- data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
- data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
- data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
- data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
- data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
- data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
- data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
- data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
- data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
- data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
- data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
- data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
- data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
- data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
- data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
- data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
- data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
- data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
- data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
- data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
- data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
- data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
- data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
- data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
- data/src/core/ext/load_reporting/load_reporting.c +7 -56
- data/src/core/ext/load_reporting/load_reporting.h +41 -28
- data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
- data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
- data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
- data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
- data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
- data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
- data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
- data/src/core/lib/channel/channel_args.c +70 -13
- data/src/core/lib/channel/channel_args.h +28 -2
- data/src/core/lib/channel/channel_stack.c +77 -28
- data/src/core/lib/channel/channel_stack.h +61 -23
- data/src/core/lib/channel/channel_stack_builder.c +33 -25
- data/src/core/lib/channel/channel_stack_builder.h +17 -8
- data/src/core/lib/channel/compress_filter.c +52 -36
- data/src/core/lib/channel/connected_channel.c +20 -12
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +13 -1
- data/src/core/lib/channel/deadline_filter.c +344 -0
- data/src/core/lib/channel/deadline_filter.h +99 -0
- data/src/core/lib/channel/handshaker.c +240 -0
- data/src/core/lib/channel/handshaker.h +164 -0
- data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
- data/src/core/lib/channel/http_client_filter.c +248 -46
- data/src/core/lib/channel/http_client_filter.h +3 -0
- data/src/core/lib/channel/http_server_filter.c +136 -24
- data/src/core/lib/channel/message_size_filter.c +261 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/message_compress.c +43 -37
- data/src/core/lib/compression/message_compress.h +7 -5
- data/src/core/lib/http/format_request.c +26 -11
- data/src/core/lib/http/format_request.h +7 -5
- data/src/core/lib/http/httpcli.c +45 -27
- data/src/core/lib/http/httpcli.h +4 -4
- data/src/core/lib/http/httpcli_security_connector.c +56 -46
- data/src/core/lib/http/parser.c +17 -14
- data/src/core/lib/http/parser.h +4 -2
- data/src/core/lib/iomgr/closure.c +49 -7
- data/src/core/lib/iomgr/closure.h +56 -14
- data/src/core/lib/iomgr/combiner.c +422 -0
- data/src/core/lib/iomgr/combiner.h +64 -0
- data/src/core/lib/iomgr/endpoint.c +8 -2
- data/src/core/lib/iomgr/endpoint.h +17 -7
- data/src/core/lib/iomgr/endpoint_pair.h +3 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
- data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
- data/src/core/lib/iomgr/error.c +72 -6
- data/src/core/lib/iomgr/error.h +30 -3
- data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
- data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
- data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
- data/src/core/lib/iomgr/ev_posix.c +26 -5
- data/src/core/lib/iomgr/ev_posix.h +12 -1
- data/src/core/lib/iomgr/exec_ctx.c +27 -94
- data/src/core/lib/iomgr/exec_ctx.h +19 -22
- data/src/core/lib/iomgr/executor.c +29 -8
- data/src/core/lib/iomgr/executor.h +2 -4
- data/src/core/lib/iomgr/iocp_windows.c +3 -4
- data/src/core/lib/iomgr/iomgr.c +14 -10
- data/src/core/lib/iomgr/iomgr.h +6 -2
- data/src/core/lib/iomgr/iomgr_posix.c +2 -2
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +2 -2
- data/src/core/lib/iomgr/load_file.c +3 -3
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/network_status_tracker.c +1 -1
- data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
- data/src/core/lib/iomgr/pollset_uv.c +142 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +5 -6
- data/src/core/lib/iomgr/port.h +129 -0
- data/src/core/lib/iomgr/resolve_address.h +2 -1
- data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
- data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
- data/src/core/lib/iomgr/resource_quota.c +832 -0
- data/src/core/lib/iomgr/resource_quota.h +159 -0
- data/src/core/lib/iomgr/sockaddr.h +10 -2
- data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
- data/src/core/lib/iomgr/socket_mutator.c +98 -0
- data/src/core/lib/iomgr/socket_mutator.h +80 -0
- data/src/core/lib/iomgr/socket_utils.h +42 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
- data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
- data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
- data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
- data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
- data/src/core/lib/iomgr/socket_windows.c +14 -6
- data/src/core/lib/iomgr/socket_windows.h +1 -0
- data/src/core/lib/iomgr/tcp_client.h +8 -2
- data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
- data/src/core/lib/iomgr/tcp_posix.c +135 -56
- data/src/core/lib/iomgr/tcp_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server.h +14 -6
- data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
- data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
- data/src/core/lib/iomgr/tcp_uv.c +367 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +65 -48
- data/src/core/lib/iomgr/tcp_windows.h +3 -1
- data/src/core/lib/iomgr/timer.h +21 -21
- data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +6 -0
- data/src/core/lib/iomgr/timer_uv.c +99 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +116 -98
- data/src/core/lib/iomgr/udp_server.h +5 -3
- data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
- data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
- data/src/core/lib/iomgr/workqueue.h +12 -20
- data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
- data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
- data/src/core/lib/iomgr/workqueue_windows.c +9 -8
- data/src/core/lib/json/json.c +3 -3
- data/src/core/lib/json/json.h +11 -11
- data/src/core/lib/json/json_reader.c +9 -5
- data/src/core/lib/profiling/basic_timers.c +10 -1
- data/src/core/lib/profiling/timers.h +2 -0
- data/src/core/lib/security/context/security_context.c +13 -3
- data/src/core/lib/security/context/security_context.h +20 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.c +48 -19
- data/src/core/lib/security/credentials/credentials.h +36 -19
- data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
- data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
- data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
- data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
- data/src/core/lib/security/transport/client_auth_filter.c +33 -27
- data/src/core/lib/security/transport/secure_endpoint.c +93 -68
- data/src/core/lib/security/transport/secure_endpoint.h +2 -2
- data/src/core/lib/security/transport/security_connector.c +133 -168
- data/src/core/lib/security/transport/security_connector.h +31 -46
- data/src/core/lib/security/transport/security_handshaker.c +501 -0
- data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
- data/src/core/lib/security/transport/server_auth_filter.c +50 -38
- data/src/core/lib/security/util/b64.c +11 -8
- data/src/core/lib/security/util/b64.h +5 -4
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/{support → slice}/slice.c +81 -50
- data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.c +90 -0
- data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
- data/src/core/lib/support/backoff.c +24 -13
- data/src/core/lib/support/backoff.h +5 -2
- data/src/core/lib/support/env.h +0 -2
- data/src/core/lib/support/log.c +5 -4
- data/src/core/lib/support/log_linux.c +0 -1
- data/src/core/lib/support/log_posix.c +1 -1
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/string.c +58 -49
- data/src/core/lib/support/string.h +11 -8
- data/src/core/lib/support/subprocess_posix.c +5 -2
- data/src/core/lib/support/thd.c +1 -1
- data/src/core/lib/support/time.c +43 -79
- data/src/core/lib/support/time_posix.c +1 -1
- data/src/core/lib/support/tmpfile.h +0 -2
- data/src/core/lib/surface/alarm.c +4 -1
- data/src/core/lib/surface/byte_buffer.c +17 -11
- data/src/core/lib/surface/byte_buffer_reader.c +23 -15
- data/src/core/lib/surface/call.c +294 -276
- data/src/core/lib/surface/call.h +24 -9
- data/src/core/lib/surface/call_log_batch.c +5 -3
- data/src/core/lib/surface/channel.c +127 -111
- data/src/core/lib/surface/channel.h +14 -5
- data/src/core/lib/surface/channel_init.c +1 -1
- data/src/core/lib/surface/channel_init.h +10 -1
- data/src/core/lib/surface/channel_ping.c +7 -6
- data/src/core/lib/surface/completion_queue.c +154 -18
- data/src/core/lib/surface/completion_queue.h +5 -0
- data/src/core/lib/surface/init.c +40 -6
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.c +5 -2
- data/src/core/lib/surface/lame_client.c +28 -18
- data/src/core/lib/surface/server.c +134 -87
- data/src/core/lib/surface/server.h +8 -0
- data/src/core/lib/surface/validate_metadata.c +1 -1
- data/src/core/lib/surface/version.c +3 -1
- data/src/core/lib/transport/byte_stream.c +7 -4
- data/src/core/lib/transport/byte_stream.h +6 -10
- data/src/core/lib/transport/connectivity_state.c +21 -12
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/mdstr_hash_table.c +118 -0
- data/src/core/lib/transport/mdstr_hash_table.h +77 -0
- data/src/core/lib/transport/metadata.c +83 -60
- data/src/core/lib/transport/metadata.h +41 -23
- data/src/core/lib/transport/metadata_batch.c +17 -11
- data/src/core/lib/transport/metadata_batch.h +20 -6
- data/src/core/lib/transport/pid_controller.c +57 -0
- data/src/core/lib/transport/pid_controller.h +64 -0
- data/src/core/lib/transport/service_config.c +251 -0
- data/src/core/lib/transport/service_config.h +71 -0
- data/src/core/lib/transport/static_metadata.c +18 -16
- data/src/core/lib/transport/static_metadata.h +113 -107
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
- data/src/core/lib/transport/transport.c +84 -23
- data/src/core/lib/transport/transport.h +53 -8
- data/src/core/lib/transport/transport_impl.h +3 -0
- data/src/core/lib/transport/transport_op_string.c +92 -20
- data/src/core/lib/tsi/ssl_transport_security.c +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
- data/src/ruby/ext/grpc/extconf.rb +0 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
- data/src/ruby/ext/grpc/rb_call.c +15 -5
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
- data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
- data/src/ruby/ext/grpc/rb_grpc.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
- data/src/ruby/ext/grpc/rb_server.c +18 -12
- data/src/ruby/lib/grpc/errors.rb +154 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
- data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
- data/src/ruby/lib/grpc/generic/service.rb +3 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
- data/src/ruby/pb/test/client.rb +307 -7
- data/src/ruby/pb/test/server.rb +26 -1
- data/src/ruby/spec/compression_options_spec.rb +164 -0
- data/src/ruby/spec/error_sanity_spec.rb +64 -0
- data/src/ruby/spec/generic/active_call_spec.rb +290 -12
- data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
- data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
- data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
- data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
- data/src/ruby/spec/spec_helper.rb +2 -0
- data/third_party/boringssl/crypto/aes/aes.c +12 -12
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
- data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
- data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
- data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
- data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
- data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl/crypto/base64/base64.c +249 -285
- data/third_party/boringssl/crypto/bio/bio.c +13 -23
- data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
- data/third_party/boringssl/crypto/bio/connect.c +12 -3
- data/third_party/boringssl/crypto/bio/fd.c +22 -15
- data/third_party/boringssl/crypto/bio/file.c +2 -38
- data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
- data/third_party/boringssl/crypto/bio/internal.h +3 -0
- data/third_party/boringssl/crypto/bio/pair.c +1 -1
- data/third_party/boringssl/crypto/bio/socket.c +10 -2
- data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
- data/third_party/boringssl/crypto/bn/bn.c +38 -0
- data/third_party/boringssl/crypto/bn/cmp.c +25 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -76
- data/third_party/boringssl/crypto/bn/div.c +136 -70
- data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
- data/third_party/boringssl/crypto/bn/gcd.c +213 -296
- data/third_party/boringssl/crypto/bn/generic.c +0 -80
- data/third_party/boringssl/crypto/bn/internal.h +15 -3
- data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +2 -1
- data/third_party/boringssl/crypto/bn/prime.c +24 -8
- data/third_party/boringssl/crypto/bn/random.c +47 -33
- data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
- data/third_party/boringssl/crypto/buf/buf.c +25 -21
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
- data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
- data/third_party/boringssl/crypto/cipher/aead.c +11 -22
- data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
- data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
- data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
- data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
- data/third_party/boringssl/crypto/cipher/internal.h +8 -10
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
- data/third_party/boringssl/crypto/conf/conf.c +2 -1
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
- data/third_party/boringssl/crypto/cpu-arm.c +0 -161
- data/third_party/boringssl/crypto/cpu-intel.c +5 -3
- data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
- data/third_party/boringssl/crypto/crypto.c +29 -7
- data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
- data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
- data/third_party/boringssl/crypto/dh/check.c +22 -6
- data/third_party/boringssl/crypto/dh/dh.c +45 -21
- data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
- data/third_party/boringssl/crypto/dh/params.c +30 -78
- data/third_party/boringssl/crypto/digest/digest.c +3 -3
- data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
- data/third_party/boringssl/crypto/ec/ec.c +84 -140
- data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
- data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
- data/third_party/boringssl/crypto/ec/internal.h +12 -36
- data/third_party/boringssl/crypto/ec/oct.c +11 -11
- data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
- data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
- data/third_party/boringssl/crypto/ec/simple.c +81 -201
- data/third_party/boringssl/crypto/ec/util-64.c +0 -74
- data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
- data/third_party/boringssl/crypto/engine/engine.c +1 -1
- data/third_party/boringssl/crypto/err/err.c +3 -3
- data/third_party/boringssl/crypto/evp/evp.c +14 -59
- data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
- data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
- data/third_party/boringssl/crypto/evp/internal.h +4 -46
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
- data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
- data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/ex_data.c +4 -6
- data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
- data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
- data/third_party/boringssl/crypto/internal.h +57 -77
- data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
- data/third_party/boringssl/crypto/md4/md4.c +9 -0
- data/third_party/boringssl/crypto/mem.c +19 -19
- data/third_party/boringssl/crypto/modes/cfb.c +5 -6
- data/third_party/boringssl/crypto/modes/ctr.c +10 -18
- data/third_party/boringssl/crypto/modes/gcm.c +100 -66
- data/third_party/boringssl/crypto/modes/internal.h +15 -27
- data/third_party/boringssl/crypto/modes/ofb.c +9 -22
- data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
- data/third_party/boringssl/crypto/newhope/internal.h +71 -0
- data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
- data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
- data/third_party/boringssl/crypto/newhope/poly.c +183 -0
- data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
- data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
- data/third_party/boringssl/crypto/obj/obj.c +111 -135
- data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
- data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
- data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
- data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/rand.c +4 -1
- data/third_party/boringssl/crypto/rand/urandom.c +5 -7
- data/third_party/boringssl/crypto/rand/windows.c +5 -8
- data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
- data/third_party/boringssl/crypto/rsa/internal.h +5 -13
- data/third_party/boringssl/crypto/rsa/padding.c +64 -63
- data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
- data/third_party/boringssl/crypto/sha/sha256.c +2 -2
- data/third_party/boringssl/crypto/sha/sha512.c +7 -7
- data/third_party/boringssl/crypto/stack/stack.c +13 -22
- data/third_party/boringssl/crypto/thread.c +21 -12
- data/third_party/boringssl/crypto/thread_none.c +6 -2
- data/third_party/boringssl/crypto/thread_pthread.c +16 -7
- data/third_party/boringssl/crypto/thread_win.c +38 -85
- data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
- data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
- data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
- data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
- data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
- data/third_party/boringssl/crypto/x509/x509.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
- data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
- data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
- data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
- data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
- data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl/crypto/x509/x_name.c +14 -17
- data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
- data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
- data/third_party/boringssl/include/openssl/aead.h +72 -73
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
- data/third_party/boringssl/include/openssl/asn1.h +103 -235
- data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
- data/third_party/boringssl/include/openssl/asn1t.h +1 -11
- data/third_party/boringssl/include/openssl/base.h +145 -3
- data/third_party/boringssl/include/openssl/base64.h +20 -17
- data/third_party/boringssl/include/openssl/bio.h +59 -34
- data/third_party/boringssl/include/openssl/bn.h +118 -51
- data/third_party/boringssl/include/openssl/buf.h +15 -0
- data/third_party/boringssl/include/openssl/bytestring.h +52 -4
- data/third_party/boringssl/include/openssl/chacha.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +18 -1
- data/third_party/boringssl/include/openssl/cmac.h +11 -0
- data/third_party/boringssl/include/openssl/conf.h +13 -2
- data/third_party/boringssl/include/openssl/cpu.h +20 -23
- data/third_party/boringssl/include/openssl/crypto.h +22 -1
- data/third_party/boringssl/include/openssl/curve25519.h +96 -4
- data/third_party/boringssl/include/openssl/dh.h +71 -16
- data/third_party/boringssl/include/openssl/digest.h +38 -11
- data/third_party/boringssl/include/openssl/dsa.h +40 -4
- data/third_party/boringssl/include/openssl/ec.h +44 -18
- data/third_party/boringssl/include/openssl/ec_key.h +27 -6
- data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
- data/third_party/boringssl/include/openssl/engine.h +11 -0
- data/third_party/boringssl/include/openssl/evp.h +52 -88
- data/third_party/boringssl/include/openssl/hkdf.h +24 -4
- data/third_party/boringssl/include/openssl/hmac.h +20 -6
- data/third_party/boringssl/include/openssl/md4.h +4 -0
- data/third_party/boringssl/include/openssl/mem.h +19 -0
- data/third_party/boringssl/include/openssl/newhope.h +158 -0
- data/third_party/boringssl/include/openssl/nid.h +4166 -0
- data/third_party/boringssl/include/openssl/obj.h +31 -3
- data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
- data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
- data/third_party/boringssl/include/openssl/pem.h +5 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
- data/third_party/boringssl/include/openssl/rand.h +6 -0
- data/third_party/boringssl/include/openssl/rc4.h +6 -0
- data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
- data/third_party/boringssl/include/openssl/rsa.h +127 -65
- data/third_party/boringssl/include/openssl/sha.h +14 -10
- data/third_party/boringssl/include/openssl/ssl.h +561 -275
- data/third_party/boringssl/include/openssl/ssl3.h +18 -25
- data/third_party/boringssl/include/openssl/stack.h +2 -4
- data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
- data/third_party/boringssl/include/openssl/thread.h +31 -13
- data/third_party/boringssl/include/openssl/time_support.h +1 -0
- data/third_party/boringssl/include/openssl/tls1.h +37 -33
- data/third_party/boringssl/include/openssl/x509.h +69 -26
- data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
- data/third_party/boringssl/include/openssl/x509v3.h +23 -2
- data/third_party/boringssl/ssl/custom_extensions.c +3 -5
- data/third_party/boringssl/ssl/d1_both.c +463 -499
- data/third_party/boringssl/ssl/d1_lib.c +38 -109
- data/third_party/boringssl/ssl/d1_pkt.c +173 -334
- data/third_party/boringssl/ssl/d1_srtp.c +20 -18
- data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
- data/third_party/boringssl/ssl/dtls_record.c +27 -26
- data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +712 -439
- data/third_party/boringssl/ssl/s3_both.c +445 -257
- data/third_party/boringssl/ssl/s3_enc.c +53 -36
- data/third_party/boringssl/ssl/s3_lib.c +23 -268
- data/third_party/boringssl/ssl/s3_pkt.c +168 -364
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
- data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
- data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
- data/third_party/boringssl/ssl/ssl_cert.c +324 -49
- data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
- data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
- data/third_party/boringssl/ssl/ssl_file.c +21 -68
- data/third_party/boringssl/ssl/ssl_lib.c +881 -510
- data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
- data/third_party/boringssl/ssl/ssl_session.c +324 -103
- data/third_party/boringssl/ssl/ssl_stat.c +6 -88
- data/third_party/boringssl/ssl/t1_enc.c +23 -39
- data/third_party/boringssl/ssl/t1_lib.c +1120 -622
- data/third_party/boringssl/ssl/tls13_both.c +440 -0
- data/third_party/boringssl/ssl/tls13_client.c +682 -0
- data/third_party/boringssl/ssl/tls13_enc.c +391 -0
- data/third_party/boringssl/ssl/tls13_server.c +672 -0
- data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
- data/third_party/boringssl/ssl/tls_record.c +159 -77
- data/third_party/nanopb/pb.h +60 -28
- data/third_party/nanopb/pb_decode.c +120 -92
- data/third_party/nanopb/pb_decode.h +3 -3
- data/third_party/nanopb/pb_encode.c +73 -67
- data/third_party/nanopb/pb_encode.h +4 -4
- metadata +155 -89
- data/include/grpc/impl/codegen/byte_buffer.h +0 -122
- data/include/grpc/impl/codegen/log.h +0 -118
- data/include/grpc/impl/codegen/time.h +0 -130
- data/src/core/ext/client_config/client_channel.c +0 -593
- data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
- data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
- data/src/core/lib/iomgr/workqueue_posix.c +0 -151
- data/src/core/lib/security/transport/handshake.c +0 -368
- data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
- data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
- data/third_party/boringssl/crypto/directory.h +0 -66
- data/third_party/boringssl/crypto/directory_posix.c +0 -108
- data/third_party/boringssl/crypto/directory_win.c +0 -144
- data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
- data/third_party/boringssl/include/openssl/pqueue.h +0 -146
- data/third_party/boringssl/ssl/d1_clnt.c +0 -561
- data/third_party/boringssl/ssl/d1_srvr.c +0 -476
- data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
- data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
- data/third_party/boringssl/ssl/test/async_bio.h +0 -45
- data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
- data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -0,0 +1,81 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
/* Automatically generated nanopb constant definitions */
|
34
|
+
/* Generated by nanopb-0.3.5-dev */
|
35
|
+
|
36
|
+
#include "src/core/ext/census/gen/trace_context.pb.h"
|
37
|
+
|
38
|
+
#if PB_PROTO_HEADER_VERSION != 30
|
39
|
+
#error Regenerate this file with the current version of nanopb generator.
|
40
|
+
#endif
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
const pb_field_t google_trace_TraceId_fields[3] = {
|
45
|
+
PB_FIELD( 1, FIXED64 , OPTIONAL, STATIC , FIRST, google_trace_TraceId, hi, hi, 0),
|
46
|
+
PB_FIELD( 2, FIXED64 , OPTIONAL, STATIC , OTHER, google_trace_TraceId, lo, hi, 0),
|
47
|
+
PB_LAST_FIELD
|
48
|
+
};
|
49
|
+
|
50
|
+
const pb_field_t google_trace_TraceContext_fields[4] = {
|
51
|
+
PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, google_trace_TraceContext, trace_id, trace_id, &google_trace_TraceId_fields),
|
52
|
+
PB_FIELD( 2, FIXED64 , OPTIONAL, STATIC , OTHER, google_trace_TraceContext, span_id, trace_id, 0),
|
53
|
+
PB_FIELD( 3, BOOL , OPTIONAL, STATIC , OTHER, google_trace_TraceContext, is_sampled, span_id, 0),
|
54
|
+
PB_LAST_FIELD
|
55
|
+
};
|
56
|
+
|
57
|
+
|
58
|
+
/* Check that field information fits in pb_field_t */
|
59
|
+
#if !defined(PB_FIELD_32BIT)
|
60
|
+
/* If you get an error here, it means that you need to define PB_FIELD_32BIT
|
61
|
+
* compile-time option. You can do that in pb.h or on compiler command line.
|
62
|
+
*
|
63
|
+
* The reason you need to do this is that some of your messages contain tag
|
64
|
+
* numbers or field sizes that are larger than what can fit in 8 or 16 bit
|
65
|
+
* field descriptors.
|
66
|
+
*/
|
67
|
+
PB_STATIC_ASSERT((pb_membersize(google_trace_TraceContext, trace_id) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_google_trace_TraceId_google_trace_TraceContext)
|
68
|
+
#endif
|
69
|
+
|
70
|
+
#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
|
71
|
+
/* If you get an error here, it means that you need to define PB_FIELD_16BIT
|
72
|
+
* compile-time option. You can do that in pb.h or on compiler command line.
|
73
|
+
*
|
74
|
+
* The reason you need to do this is that some of your messages contain tag
|
75
|
+
* numbers or field sizes that are larger than what can fit in the default
|
76
|
+
* 8 bit descriptors.
|
77
|
+
*/
|
78
|
+
PB_STATIC_ASSERT((pb_membersize(google_trace_TraceContext, trace_id) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_google_trace_TraceId_google_trace_TraceContext)
|
79
|
+
#endif
|
80
|
+
|
81
|
+
|
@@ -0,0 +1,99 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
/* Automatically generated nanopb header */
|
34
|
+
/* Generated by nanopb-0.3.5-dev */
|
35
|
+
|
36
|
+
#ifndef GRPC_CORE_EXT_CENSUS_GEN_TRACE_CONTEXT_PB_H
|
37
|
+
#define GRPC_CORE_EXT_CENSUS_GEN_TRACE_CONTEXT_PB_H
|
38
|
+
#include "third_party/nanopb/pb.h"
|
39
|
+
#if PB_PROTO_HEADER_VERSION != 30
|
40
|
+
#error Regenerate this file with the current version of nanopb generator.
|
41
|
+
#endif
|
42
|
+
|
43
|
+
#ifdef __cplusplus
|
44
|
+
extern "C" {
|
45
|
+
#endif
|
46
|
+
|
47
|
+
/* Struct definitions */
|
48
|
+
typedef struct _google_trace_TraceId {
|
49
|
+
bool has_hi;
|
50
|
+
uint64_t hi;
|
51
|
+
bool has_lo;
|
52
|
+
uint64_t lo;
|
53
|
+
} google_trace_TraceId;
|
54
|
+
|
55
|
+
typedef struct _google_trace_TraceContext {
|
56
|
+
bool has_trace_id;
|
57
|
+
google_trace_TraceId trace_id;
|
58
|
+
bool has_span_id;
|
59
|
+
uint64_t span_id;
|
60
|
+
bool has_is_sampled;
|
61
|
+
bool is_sampled;
|
62
|
+
} google_trace_TraceContext;
|
63
|
+
|
64
|
+
/* Default values for struct fields */
|
65
|
+
|
66
|
+
/* Initializer values for message structs */
|
67
|
+
#define google_trace_TraceId_init_default {false, 0, false, 0}
|
68
|
+
#define google_trace_TraceContext_init_default {false, google_trace_TraceId_init_default, false, 0, false, 0}
|
69
|
+
#define google_trace_TraceId_init_zero {false, 0, false, 0}
|
70
|
+
#define google_trace_TraceContext_init_zero {false, google_trace_TraceId_init_zero, false, 0, false, 0}
|
71
|
+
|
72
|
+
/* Field tags (for use in manual encoding/decoding) */
|
73
|
+
#define google_trace_TraceId_hi_tag 1
|
74
|
+
#define google_trace_TraceId_lo_tag 2
|
75
|
+
#define google_trace_TraceContext_trace_id_tag 1
|
76
|
+
#define google_trace_TraceContext_span_id_tag 2
|
77
|
+
#define google_trace_TraceContext_is_sampled_tag 3
|
78
|
+
|
79
|
+
/* Struct field encoding specification for nanopb */
|
80
|
+
extern const pb_field_t google_trace_TraceId_fields[3];
|
81
|
+
extern const pb_field_t google_trace_TraceContext_fields[4];
|
82
|
+
|
83
|
+
/* Maximum encoded size of messages (where known) */
|
84
|
+
#define google_trace_TraceId_size 18
|
85
|
+
#define google_trace_TraceContext_size 31
|
86
|
+
|
87
|
+
/* Message IDs (where set with "msgid" option) */
|
88
|
+
#ifdef PB_MSGID
|
89
|
+
|
90
|
+
#define TRACE_CONTEXT_MESSAGES \
|
91
|
+
|
92
|
+
|
93
|
+
#endif
|
94
|
+
|
95
|
+
#ifdef __cplusplus
|
96
|
+
} /* extern "C" */
|
97
|
+
#endif
|
98
|
+
|
99
|
+
#endif
|
@@ -37,9 +37,9 @@
|
|
37
37
|
#include <string.h>
|
38
38
|
|
39
39
|
#include <grpc/census.h>
|
40
|
+
#include <grpc/slice.h>
|
40
41
|
#include <grpc/support/alloc.h>
|
41
42
|
#include <grpc/support/log.h>
|
42
|
-
#include <grpc/support/slice.h>
|
43
43
|
#include <grpc/support/time.h>
|
44
44
|
|
45
45
|
#include "src/core/ext/census/census_interface.h"
|
@@ -69,7 +69,7 @@ static void extract_and_annotate_method_tag(grpc_metadata_batch *md,
|
|
69
69
|
for (m = md->list.head; m != NULL; m = m->next) {
|
70
70
|
if (m->md->key == GRPC_MDSTR_PATH) {
|
71
71
|
gpr_log(GPR_DEBUG, "%s",
|
72
|
-
(const char *)
|
72
|
+
(const char *)GRPC_SLICE_START_PTR(m->md->value->slice));
|
73
73
|
/* Add method tag here */
|
74
74
|
}
|
75
75
|
}
|
@@ -127,49 +127,53 @@ static void server_start_transport_op(grpc_exec_ctx *exec_ctx,
|
|
127
127
|
grpc_call_next_op(exec_ctx, elem, op);
|
128
128
|
}
|
129
129
|
|
130
|
-
static
|
131
|
-
|
132
|
-
|
130
|
+
static grpc_error *client_init_call_elem(grpc_exec_ctx *exec_ctx,
|
131
|
+
grpc_call_element *elem,
|
132
|
+
grpc_call_element_args *args) {
|
133
133
|
call_data *d = elem->call_data;
|
134
134
|
GPR_ASSERT(d != NULL);
|
135
135
|
memset(d, 0, sizeof(*d));
|
136
|
-
d->start_ts =
|
136
|
+
d->start_ts = args->start_time;
|
137
|
+
return GRPC_ERROR_NONE;
|
137
138
|
}
|
138
139
|
|
139
140
|
static void client_destroy_call_elem(grpc_exec_ctx *exec_ctx,
|
140
141
|
grpc_call_element *elem,
|
141
|
-
const
|
142
|
+
const grpc_call_final_info *final_info,
|
142
143
|
void *ignored) {
|
143
144
|
call_data *d = elem->call_data;
|
144
145
|
GPR_ASSERT(d != NULL);
|
145
146
|
/* TODO(hongyu): record rpc client stats and census_rpc_end_op here */
|
146
147
|
}
|
147
148
|
|
148
|
-
static
|
149
|
-
|
150
|
-
|
149
|
+
static grpc_error *server_init_call_elem(grpc_exec_ctx *exec_ctx,
|
150
|
+
grpc_call_element *elem,
|
151
|
+
grpc_call_element_args *args) {
|
151
152
|
call_data *d = elem->call_data;
|
152
153
|
GPR_ASSERT(d != NULL);
|
153
154
|
memset(d, 0, sizeof(*d));
|
154
|
-
d->start_ts =
|
155
|
+
d->start_ts = args->start_time;
|
155
156
|
/* TODO(hongyu): call census_tracing_start_op here. */
|
156
|
-
grpc_closure_init(&d->finish_recv, server_on_done_recv, elem
|
157
|
+
grpc_closure_init(&d->finish_recv, server_on_done_recv, elem,
|
158
|
+
grpc_schedule_on_exec_ctx);
|
159
|
+
return GRPC_ERROR_NONE;
|
157
160
|
}
|
158
161
|
|
159
162
|
static void server_destroy_call_elem(grpc_exec_ctx *exec_ctx,
|
160
163
|
grpc_call_element *elem,
|
161
|
-
const
|
164
|
+
const grpc_call_final_info *final_info,
|
162
165
|
void *ignored) {
|
163
166
|
call_data *d = elem->call_data;
|
164
167
|
GPR_ASSERT(d != NULL);
|
165
168
|
/* TODO(hongyu): record rpc server stats and census_tracing_end_op here */
|
166
169
|
}
|
167
170
|
|
168
|
-
static
|
169
|
-
|
170
|
-
|
171
|
+
static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
|
172
|
+
grpc_channel_element *elem,
|
173
|
+
grpc_channel_element_args *args) {
|
171
174
|
channel_data *chand = elem->channel_data;
|
172
175
|
GPR_ASSERT(chand != NULL);
|
176
|
+
return GRPC_ERROR_NONE;
|
173
177
|
}
|
174
178
|
|
175
179
|
static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
|
@@ -189,6 +193,7 @@ const grpc_channel_filter grpc_client_census_filter = {
|
|
189
193
|
init_channel_elem,
|
190
194
|
destroy_channel_elem,
|
191
195
|
grpc_call_next_get_peer,
|
196
|
+
grpc_channel_next_get_info,
|
192
197
|
"census-client"};
|
193
198
|
|
194
199
|
const grpc_channel_filter grpc_server_census_filter = {
|
@@ -202,4 +207,5 @@ const grpc_channel_filter grpc_server_census_filter = {
|
|
202
207
|
init_channel_elem,
|
203
208
|
destroy_channel_elem,
|
204
209
|
grpc_call_next_get_peer,
|
210
|
+
grpc_channel_next_get_info,
|
205
211
|
"census-server"};
|
@@ -51,7 +51,8 @@ static bool is_census_enabled(const grpc_channel_args *a) {
|
|
51
51
|
return census_enabled();
|
52
52
|
}
|
53
53
|
|
54
|
-
static bool maybe_add_census_filter(
|
54
|
+
static bool maybe_add_census_filter(grpc_exec_ctx *exec_ctx,
|
55
|
+
grpc_channel_stack_builder *builder,
|
55
56
|
void *arg) {
|
56
57
|
const grpc_channel_args *args =
|
57
58
|
grpc_channel_stack_builder_get_channel_arguments(builder);
|
@@ -32,19 +32,31 @@
|
|
32
32
|
*/
|
33
33
|
|
34
34
|
#include <grpc/census.h>
|
35
|
+
#include "src/core/ext/census/base_resources.h"
|
36
|
+
#include "src/core/ext/census/resource.h"
|
35
37
|
|
36
38
|
static int features_enabled = CENSUS_FEATURE_NONE;
|
37
39
|
|
38
40
|
int census_initialize(int features) {
|
39
41
|
if (features_enabled != CENSUS_FEATURE_NONE) {
|
40
42
|
// Must have been a previous call to census_initialize; return error
|
41
|
-
return 1;
|
43
|
+
return -1;
|
42
44
|
}
|
43
|
-
features_enabled = features;
|
44
|
-
|
45
|
+
features_enabled = features & CENSUS_FEATURE_ALL;
|
46
|
+
if (features & CENSUS_FEATURE_STATS) {
|
47
|
+
initialize_resources();
|
48
|
+
define_base_resources();
|
49
|
+
}
|
50
|
+
|
51
|
+
return features_enabled;
|
45
52
|
}
|
46
53
|
|
47
|
-
void census_shutdown(void) {
|
54
|
+
void census_shutdown(void) {
|
55
|
+
if (features_enabled & CENSUS_FEATURE_STATS) {
|
56
|
+
shutdown_resources();
|
57
|
+
}
|
58
|
+
features_enabled = CENSUS_FEATURE_NONE;
|
59
|
+
}
|
48
60
|
|
49
61
|
int census_supported(void) {
|
50
62
|
/* TODO(aveitch): improve this as we implement features... */
|
data/src/core/ext/census/mlog.h
CHANGED
@@ -88,7 +88,7 @@ const void* census_log_read_next(size_t* bytes_available);
|
|
88
88
|
*/
|
89
89
|
size_t census_log_remaining_space(void);
|
90
90
|
|
91
|
-
/* Returns the number of times
|
91
|
+
/* Returns the number of times grpc_stats_log_start_write() failed due to
|
92
92
|
out-of-space. */
|
93
93
|
int64_t census_log_out_of_space_count(void);
|
94
94
|
|
@@ -62,48 +62,3 @@ int census_trace_scan_start(int consume) {
|
|
62
62
|
(void)consume;
|
63
63
|
abort();
|
64
64
|
}
|
65
|
-
|
66
|
-
const census_aggregation *census_view_aggregrations(const census_view *view) {
|
67
|
-
(void)view;
|
68
|
-
abort();
|
69
|
-
}
|
70
|
-
|
71
|
-
census_view *census_view_create(uint32_t metric_id, const census_context *tags,
|
72
|
-
const census_aggregation *aggregations,
|
73
|
-
size_t naggregations) {
|
74
|
-
(void)metric_id;
|
75
|
-
(void)tags;
|
76
|
-
(void)aggregations;
|
77
|
-
(void)naggregations;
|
78
|
-
abort();
|
79
|
-
}
|
80
|
-
|
81
|
-
const census_context *census_view_tags(const census_view *view) {
|
82
|
-
(void)view;
|
83
|
-
abort();
|
84
|
-
}
|
85
|
-
|
86
|
-
void census_view_delete(census_view *view) {
|
87
|
-
(void)view;
|
88
|
-
abort();
|
89
|
-
}
|
90
|
-
|
91
|
-
const census_view_data *census_view_get_data(const census_view *view) {
|
92
|
-
(void)view;
|
93
|
-
abort();
|
94
|
-
}
|
95
|
-
|
96
|
-
size_t census_view_metric(const census_view *view) {
|
97
|
-
(void)view;
|
98
|
-
abort();
|
99
|
-
}
|
100
|
-
|
101
|
-
size_t census_view_naggregations(const census_view *view) {
|
102
|
-
(void)view;
|
103
|
-
abort();
|
104
|
-
}
|
105
|
-
|
106
|
-
void census_view_reset(census_view *view) {
|
107
|
-
(void)view;
|
108
|
-
abort();
|
109
|
-
}
|
@@ -0,0 +1,312 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#include "src/core/ext/census/resource.h"
|
35
|
+
#include "third_party/nanopb/pb_decode.h"
|
36
|
+
|
37
|
+
#include <grpc/census.h>
|
38
|
+
#include <grpc/support/alloc.h>
|
39
|
+
#include <grpc/support/log.h>
|
40
|
+
#include <grpc/support/sync.h>
|
41
|
+
|
42
|
+
#include <stdbool.h>
|
43
|
+
#include <string.h>
|
44
|
+
|
45
|
+
// Protect local resource data structures.
|
46
|
+
static gpr_mu resource_lock;
|
47
|
+
|
48
|
+
// Deleteing and creating resources are relatively rare events, and should not
|
49
|
+
// be done in the critical path of performance sensitive code. We record
|
50
|
+
// current resource id's used in a simple array, and just search it each time
|
51
|
+
// we need to assign a new id, or look up a resource.
|
52
|
+
static resource **resources = NULL;
|
53
|
+
|
54
|
+
// Number of entries in *resources
|
55
|
+
static size_t n_resources = 0;
|
56
|
+
|
57
|
+
// Number of defined resources
|
58
|
+
static size_t n_defined_resources = 0;
|
59
|
+
|
60
|
+
void initialize_resources(void) {
|
61
|
+
gpr_mu_init(&resource_lock);
|
62
|
+
gpr_mu_lock(&resource_lock);
|
63
|
+
GPR_ASSERT(resources == NULL && n_resources == 0 && n_defined_resources == 0);
|
64
|
+
gpr_mu_unlock(&resource_lock);
|
65
|
+
}
|
66
|
+
|
67
|
+
// Delete a resource given it's ID. The ID must be a valid resource ID. Must be
|
68
|
+
// called with resource_lock held.
|
69
|
+
static void delete_resource_locked(size_t rid) {
|
70
|
+
GPR_ASSERT(resources[rid] != NULL);
|
71
|
+
gpr_free(resources[rid]->name);
|
72
|
+
gpr_free(resources[rid]->description);
|
73
|
+
gpr_free(resources[rid]->numerators);
|
74
|
+
gpr_free(resources[rid]->denominators);
|
75
|
+
gpr_free(resources[rid]);
|
76
|
+
resources[rid] = NULL;
|
77
|
+
n_defined_resources--;
|
78
|
+
}
|
79
|
+
|
80
|
+
void shutdown_resources(void) {
|
81
|
+
gpr_mu_lock(&resource_lock);
|
82
|
+
for (size_t i = 0; i < n_resources; i++) {
|
83
|
+
if (resources[i] != NULL) {
|
84
|
+
delete_resource_locked(i);
|
85
|
+
}
|
86
|
+
}
|
87
|
+
GPR_ASSERT(n_defined_resources == 0);
|
88
|
+
gpr_free(resources);
|
89
|
+
resources = NULL;
|
90
|
+
n_resources = 0;
|
91
|
+
gpr_mu_unlock(&resource_lock);
|
92
|
+
}
|
93
|
+
|
94
|
+
// Check the contents of string fields in a resource proto.
|
95
|
+
static bool validate_string(pb_istream_t *stream, const pb_field_t *field,
|
96
|
+
void **arg) {
|
97
|
+
resource *vresource = (resource *)*arg;
|
98
|
+
switch (field->tag) {
|
99
|
+
case google_census_Resource_name_tag:
|
100
|
+
// Name must have at least one character
|
101
|
+
if (stream->bytes_left == 0) {
|
102
|
+
gpr_log(GPR_INFO, "Zero-length Resource name.");
|
103
|
+
return false;
|
104
|
+
}
|
105
|
+
vresource->name = gpr_malloc(stream->bytes_left + 1);
|
106
|
+
vresource->name[stream->bytes_left] = '\0';
|
107
|
+
if (!pb_read(stream, (uint8_t *)vresource->name, stream->bytes_left)) {
|
108
|
+
return false;
|
109
|
+
}
|
110
|
+
// Can't have same name as an existing resource.
|
111
|
+
for (size_t i = 0; i < n_resources; i++) {
|
112
|
+
resource *compare = resources[i];
|
113
|
+
if (compare == vresource || compare == NULL) continue;
|
114
|
+
if (strcmp(compare->name, vresource->name) == 0) {
|
115
|
+
gpr_log(GPR_INFO, "Duplicate Resource name %s.", vresource->name);
|
116
|
+
return false;
|
117
|
+
}
|
118
|
+
}
|
119
|
+
break;
|
120
|
+
case google_census_Resource_description_tag:
|
121
|
+
if (stream->bytes_left == 0) {
|
122
|
+
return true;
|
123
|
+
}
|
124
|
+
vresource->description = gpr_malloc(stream->bytes_left + 1);
|
125
|
+
vresource->description[stream->bytes_left] = '\0';
|
126
|
+
if (!pb_read(stream, (uint8_t *)vresource->description,
|
127
|
+
stream->bytes_left)) {
|
128
|
+
return false;
|
129
|
+
}
|
130
|
+
break;
|
131
|
+
default:
|
132
|
+
// No other string fields in Resource. Print warning and skip.
|
133
|
+
gpr_log(GPR_INFO, "Unknown string field type in Resource protobuf.");
|
134
|
+
if (!pb_read(stream, NULL, stream->bytes_left)) {
|
135
|
+
return false;
|
136
|
+
}
|
137
|
+
break;
|
138
|
+
}
|
139
|
+
return true;
|
140
|
+
}
|
141
|
+
|
142
|
+
// Decode numerators/denominators in a stream. The `count` and `bup`
|
143
|
+
// (BasicUnit pointer) are pointers to the approriate fields in a resource
|
144
|
+
// struct.
|
145
|
+
static bool validate_units_helper(pb_istream_t *stream, int *count,
|
146
|
+
google_census_Resource_BasicUnit **bup) {
|
147
|
+
while (stream->bytes_left) {
|
148
|
+
(*count)++;
|
149
|
+
// Have to allocate a new array of values. Normal case is 0 or 1, so
|
150
|
+
// this should normally not be an issue.
|
151
|
+
google_census_Resource_BasicUnit *new_bup =
|
152
|
+
gpr_malloc((size_t)*count * sizeof(google_census_Resource_BasicUnit));
|
153
|
+
if (*count != 1) {
|
154
|
+
memcpy(new_bup, *bup,
|
155
|
+
(size_t)(*count - 1) * sizeof(google_census_Resource_BasicUnit));
|
156
|
+
gpr_free(*bup);
|
157
|
+
}
|
158
|
+
*bup = new_bup;
|
159
|
+
uint64_t value;
|
160
|
+
if (!pb_decode_varint(stream, &value)) {
|
161
|
+
return false;
|
162
|
+
}
|
163
|
+
*(*bup + *count - 1) = (google_census_Resource_BasicUnit)value;
|
164
|
+
}
|
165
|
+
return true;
|
166
|
+
}
|
167
|
+
|
168
|
+
// Validate units field of a Resource proto.
|
169
|
+
static bool validate_units(pb_istream_t *stream, const pb_field_t *field,
|
170
|
+
void **arg) {
|
171
|
+
resource *vresource = (resource *)(*arg);
|
172
|
+
switch (field->tag) {
|
173
|
+
case google_census_Resource_MeasurementUnit_numerator_tag:
|
174
|
+
return validate_units_helper(stream, &vresource->n_numerators,
|
175
|
+
&vresource->numerators);
|
176
|
+
break;
|
177
|
+
case google_census_Resource_MeasurementUnit_denominator_tag:
|
178
|
+
return validate_units_helper(stream, &vresource->n_denominators,
|
179
|
+
&vresource->denominators);
|
180
|
+
break;
|
181
|
+
default:
|
182
|
+
gpr_log(GPR_ERROR, "Unknown field type.");
|
183
|
+
return false;
|
184
|
+
break;
|
185
|
+
}
|
186
|
+
return true;
|
187
|
+
}
|
188
|
+
|
189
|
+
// Validate the contents of a Resource proto. `id` is the intended resource id.
|
190
|
+
static bool validate_resource_pb(const uint8_t *resource_pb,
|
191
|
+
size_t resource_pb_size, size_t id) {
|
192
|
+
GPR_ASSERT(id < n_resources);
|
193
|
+
if (resource_pb == NULL) {
|
194
|
+
return false;
|
195
|
+
}
|
196
|
+
google_census_Resource vresource;
|
197
|
+
vresource.name.funcs.decode = &validate_string;
|
198
|
+
vresource.name.arg = resources[id];
|
199
|
+
vresource.description.funcs.decode = &validate_string;
|
200
|
+
vresource.description.arg = resources[id];
|
201
|
+
vresource.unit.numerator.funcs.decode = &validate_units;
|
202
|
+
vresource.unit.numerator.arg = resources[id];
|
203
|
+
vresource.unit.denominator.funcs.decode = &validate_units;
|
204
|
+
vresource.unit.denominator.arg = resources[id];
|
205
|
+
|
206
|
+
pb_istream_t stream =
|
207
|
+
pb_istream_from_buffer((uint8_t *)resource_pb, resource_pb_size);
|
208
|
+
if (!pb_decode(&stream, google_census_Resource_fields, &vresource)) {
|
209
|
+
return false;
|
210
|
+
}
|
211
|
+
// A Resource must have a name, a unit, with at least one numerator.
|
212
|
+
return (resources[id]->name != NULL && vresource.has_unit &&
|
213
|
+
resources[id]->n_numerators > 0);
|
214
|
+
}
|
215
|
+
|
216
|
+
// Allocate a blank resource, and return associated ID. Must be called with
|
217
|
+
// resource_lock held.
|
218
|
+
size_t allocate_resource(void) {
|
219
|
+
// use next_id to optimize expected placement of next new resource.
|
220
|
+
static size_t next_id = 0;
|
221
|
+
size_t id = n_resources; // resource ID - initialize to invalid value.
|
222
|
+
// Expand resources if needed.
|
223
|
+
if (n_resources == n_defined_resources) {
|
224
|
+
size_t new_n_resources = n_resources ? n_resources * 2 : 2;
|
225
|
+
resource **new_resources = gpr_malloc(new_n_resources * sizeof(resource *));
|
226
|
+
memcpy(new_resources, resources, n_resources * sizeof(resource *));
|
227
|
+
memset(new_resources + n_resources, 0,
|
228
|
+
(new_n_resources - n_resources) * sizeof(resource *));
|
229
|
+
gpr_free(resources);
|
230
|
+
resources = new_resources;
|
231
|
+
n_resources = new_n_resources;
|
232
|
+
id = n_defined_resources;
|
233
|
+
} else {
|
234
|
+
GPR_ASSERT(n_defined_resources < n_resources);
|
235
|
+
// Find a free id.
|
236
|
+
for (size_t base = 0; base < n_resources; base++) {
|
237
|
+
id = (next_id + base) % n_resources;
|
238
|
+
if (resources[id] == NULL) break;
|
239
|
+
}
|
240
|
+
}
|
241
|
+
GPR_ASSERT(id < n_resources && resources[id] == NULL);
|
242
|
+
resources[id] = gpr_malloc(sizeof(resource));
|
243
|
+
memset(resources[id], 0, sizeof(resource));
|
244
|
+
n_defined_resources++;
|
245
|
+
next_id = (id + 1) % n_resources;
|
246
|
+
return id;
|
247
|
+
}
|
248
|
+
|
249
|
+
int32_t census_define_resource(const uint8_t *resource_pb,
|
250
|
+
size_t resource_pb_size) {
|
251
|
+
if (resource_pb == NULL) {
|
252
|
+
return -1;
|
253
|
+
}
|
254
|
+
gpr_mu_lock(&resource_lock);
|
255
|
+
size_t id = allocate_resource();
|
256
|
+
// Validate pb, extract name.
|
257
|
+
if (!validate_resource_pb(resource_pb, resource_pb_size, id)) {
|
258
|
+
delete_resource_locked(id);
|
259
|
+
gpr_mu_unlock(&resource_lock);
|
260
|
+
return -1;
|
261
|
+
}
|
262
|
+
gpr_mu_unlock(&resource_lock);
|
263
|
+
return (int32_t)id;
|
264
|
+
}
|
265
|
+
|
266
|
+
void census_delete_resource(int32_t rid) {
|
267
|
+
gpr_mu_lock(&resource_lock);
|
268
|
+
if (rid >= 0 && (size_t)rid < n_resources && resources[rid] != NULL) {
|
269
|
+
delete_resource_locked((size_t)rid);
|
270
|
+
}
|
271
|
+
gpr_mu_unlock(&resource_lock);
|
272
|
+
}
|
273
|
+
|
274
|
+
int32_t census_resource_id(const char *name) {
|
275
|
+
gpr_mu_lock(&resource_lock);
|
276
|
+
for (int32_t id = 0; (size_t)id < n_resources; id++) {
|
277
|
+
if (resources[id] != NULL && strcmp(resources[id]->name, name) == 0) {
|
278
|
+
gpr_mu_unlock(&resource_lock);
|
279
|
+
return id;
|
280
|
+
}
|
281
|
+
}
|
282
|
+
gpr_mu_unlock(&resource_lock);
|
283
|
+
return -1;
|
284
|
+
}
|
285
|
+
|
286
|
+
int32_t define_resource(const resource *base) {
|
287
|
+
GPR_ASSERT(base != NULL && base->name != NULL && base->n_numerators > 0 &&
|
288
|
+
base->numerators != NULL);
|
289
|
+
gpr_mu_lock(&resource_lock);
|
290
|
+
size_t id = allocate_resource();
|
291
|
+
size_t len = strlen(base->name) + 1;
|
292
|
+
resources[id]->name = gpr_malloc(len);
|
293
|
+
memcpy(resources[id]->name, base->name, len);
|
294
|
+
if (base->description) {
|
295
|
+
len = strlen(base->description) + 1;
|
296
|
+
resources[id]->description = gpr_malloc(len);
|
297
|
+
memcpy(resources[id]->description, base->description, len);
|
298
|
+
}
|
299
|
+
resources[id]->prefix = base->prefix;
|
300
|
+
resources[id]->n_numerators = base->n_numerators;
|
301
|
+
len = (size_t)base->n_numerators * sizeof(*base->numerators);
|
302
|
+
resources[id]->numerators = gpr_malloc(len);
|
303
|
+
memcpy(resources[id]->numerators, base->numerators, len);
|
304
|
+
resources[id]->n_denominators = base->n_denominators;
|
305
|
+
if (base->n_denominators != 0) {
|
306
|
+
len = (size_t)base->n_denominators * sizeof(*base->denominators);
|
307
|
+
resources[id]->denominators = gpr_malloc(len);
|
308
|
+
memcpy(resources[id]->denominators, base->denominators, len);
|
309
|
+
}
|
310
|
+
gpr_mu_unlock(&resource_lock);
|
311
|
+
return (int32_t)id;
|
312
|
+
}
|