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
data/third_party/nanopb/pb.h
CHANGED
@@ -13,10 +13,6 @@
|
|
13
13
|
/* Enable support for dynamically allocated fields */
|
14
14
|
/* #define PB_ENABLE_MALLOC 1 */
|
15
15
|
|
16
|
-
/* Define this if your CPU architecture is big endian, i.e. it
|
17
|
-
* stores the most-significant byte first. */
|
18
|
-
/* #define __BIG_ENDIAN__ 1 */
|
19
|
-
|
20
16
|
/* Define this if your CPU / compiler combination does not support
|
21
17
|
* unaligned memory access to packed structures. */
|
22
18
|
/* #define PB_NO_PACKED_STRUCTS 1 */
|
@@ -50,12 +46,12 @@
|
|
50
46
|
|
51
47
|
/* Version of the nanopb library. Just in case you want to check it in
|
52
48
|
* your own program. */
|
53
|
-
#define NANOPB_VERSION nanopb-0.3.
|
49
|
+
#define NANOPB_VERSION nanopb-0.3.7-dev
|
54
50
|
|
55
51
|
/* Include all the system headers needed by nanopb. You will need the
|
56
52
|
* definitions of the following:
|
57
53
|
* - strlen, memcpy, memset functions
|
58
|
-
* - [u]
|
54
|
+
* - [u]int_least8_t, uint_fast8_t, [u]int_least16_t, [u]int32_t, [u]int64_t
|
59
55
|
* - size_t
|
60
56
|
* - bool
|
61
57
|
*
|
@@ -144,7 +140,7 @@
|
|
144
140
|
* Most-significant 4 bits specify repeated/required/packed etc.
|
145
141
|
*/
|
146
142
|
|
147
|
-
typedef
|
143
|
+
typedef uint_least8_t pb_type_t;
|
148
144
|
|
149
145
|
/**** Field data types ****/
|
150
146
|
|
@@ -174,8 +170,14 @@ typedef uint8_t pb_type_t;
|
|
174
170
|
* The field contains a pointer to pb_extension_t */
|
175
171
|
#define PB_LTYPE_EXTENSION 0x08
|
176
172
|
|
173
|
+
/* Byte array with inline, pre-allocated byffer.
|
174
|
+
* data_size is the length of the inline, allocated buffer.
|
175
|
+
* This differs from PB_LTYPE_BYTES by defining the element as
|
176
|
+
* pb_byte_t[data_size] rather than pb_bytes_array_t. */
|
177
|
+
#define PB_LTYPE_FIXED_LENGTH_BYTES 0x09
|
178
|
+
|
177
179
|
/* Number of declared LTYPES */
|
178
|
-
#define PB_LTYPES_COUNT
|
180
|
+
#define PB_LTYPES_COUNT 0x0A
|
179
181
|
#define PB_LTYPE_MASK 0x0F
|
180
182
|
|
181
183
|
/**** Field repetition rules ****/
|
@@ -201,18 +203,22 @@ typedef uint8_t pb_type_t;
|
|
201
203
|
* and array counts.
|
202
204
|
*/
|
203
205
|
#if defined(PB_FIELD_32BIT)
|
204
|
-
#define PB_SIZE_MAX ((uint32_t)-1)
|
205
206
|
typedef uint32_t pb_size_t;
|
206
207
|
typedef int32_t pb_ssize_t;
|
207
208
|
#elif defined(PB_FIELD_16BIT)
|
208
|
-
|
209
|
-
typedef
|
210
|
-
typedef int16_t pb_ssize_t;
|
209
|
+
typedef uint_least16_t pb_size_t;
|
210
|
+
typedef int_least16_t pb_ssize_t;
|
211
211
|
#else
|
212
|
-
|
213
|
-
typedef
|
214
|
-
typedef int8_t pb_ssize_t;
|
212
|
+
typedef uint_least8_t pb_size_t;
|
213
|
+
typedef int_least8_t pb_ssize_t;
|
215
214
|
#endif
|
215
|
+
#define PB_SIZE_MAX ((pb_size_t)-1)
|
216
|
+
|
217
|
+
/* Data type for storing encoded data and other byte streams.
|
218
|
+
* This typedef exists to support platforms where uint8_t does not exist.
|
219
|
+
* You can regard it as equivalent on uint8_t on other platforms.
|
220
|
+
*/
|
221
|
+
typedef uint_least8_t pb_byte_t;
|
216
222
|
|
217
223
|
/* This structure is used in auto-generated constants
|
218
224
|
* to specify struct fields.
|
@@ -240,30 +246,24 @@ struct pb_field_s {
|
|
240
246
|
PB_PACKED_STRUCT_END
|
241
247
|
|
242
248
|
/* Make sure that the standard integer types are of the expected sizes.
|
243
|
-
*
|
249
|
+
* Otherwise fixed32/fixed64 fields can break.
|
244
250
|
*
|
245
251
|
* If you get errors here, it probably means that your stdint.h is not
|
246
252
|
* correct for your platform.
|
247
253
|
*/
|
248
|
-
PB_STATIC_ASSERT(sizeof(
|
249
|
-
PB_STATIC_ASSERT(sizeof(
|
250
|
-
PB_STATIC_ASSERT(sizeof(int16_t) == 2, INT16_T_WRONG_SIZE)
|
251
|
-
PB_STATIC_ASSERT(sizeof(uint16_t) == 2, UINT16_T_WRONG_SIZE)
|
252
|
-
PB_STATIC_ASSERT(sizeof(int32_t) == 4, INT32_T_WRONG_SIZE)
|
253
|
-
PB_STATIC_ASSERT(sizeof(uint32_t) == 4, UINT32_T_WRONG_SIZE)
|
254
|
-
PB_STATIC_ASSERT(sizeof(int64_t) == 8, INT64_T_WRONG_SIZE)
|
255
|
-
PB_STATIC_ASSERT(sizeof(uint64_t) == 8, UINT64_T_WRONG_SIZE)
|
254
|
+
PB_STATIC_ASSERT(sizeof(int64_t) == 2 * sizeof(int32_t), INT64_T_WRONG_SIZE)
|
255
|
+
PB_STATIC_ASSERT(sizeof(uint64_t) == 2 * sizeof(uint32_t), UINT64_T_WRONG_SIZE)
|
256
256
|
|
257
257
|
/* This structure is used for 'bytes' arrays.
|
258
258
|
* It has the number of bytes in the beginning, and after that an array.
|
259
259
|
* Note that actual structs used will have a different length of bytes array.
|
260
260
|
*/
|
261
|
-
#define PB_BYTES_ARRAY_T(n) struct { pb_size_t size;
|
261
|
+
#define PB_BYTES_ARRAY_T(n) struct { pb_size_t size; pb_byte_t bytes[n]; }
|
262
262
|
#define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t)n + offsetof(pb_bytes_array_t, bytes))
|
263
263
|
|
264
264
|
struct pb_bytes_array_s {
|
265
265
|
pb_size_t size;
|
266
|
-
|
266
|
+
pb_byte_t bytes[1];
|
267
267
|
};
|
268
268
|
typedef struct pb_bytes_array_s pb_bytes_array_t;
|
269
269
|
|
@@ -421,6 +421,19 @@ struct pb_extension_s {
|
|
421
421
|
pb_membersize(st, m[0]), \
|
422
422
|
pb_arraysize(st, m), ptr}
|
423
423
|
|
424
|
+
#define PB_REQUIRED_INLINE(tag, st, m, fd, ltype, ptr) \
|
425
|
+
{tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | PB_LTYPE_FIXED_LENGTH_BYTES, \
|
426
|
+
fd, 0, pb_membersize(st, m), 0, ptr}
|
427
|
+
|
428
|
+
/* Optional fields add the delta to the has_ variable. */
|
429
|
+
#define PB_OPTIONAL_INLINE(tag, st, m, fd, ltype, ptr) \
|
430
|
+
{tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | PB_LTYPE_FIXED_LENGTH_BYTES, \
|
431
|
+
fd, \
|
432
|
+
pb_delta(st, has_ ## m, m), \
|
433
|
+
pb_membersize(st, m), 0, ptr}
|
434
|
+
|
435
|
+
/* INLINE does not support REPEATED fields. */
|
436
|
+
|
424
437
|
/* Allocated fields carry the size of the actual data, not the pointer */
|
425
438
|
#define PB_REQUIRED_POINTER(tag, st, m, fd, ltype, ptr) \
|
426
439
|
{tag, PB_ATYPE_POINTER | PB_HTYPE_REQUIRED | ltype, \
|
@@ -460,6 +473,8 @@ struct pb_extension_s {
|
|
460
473
|
#define PB_OPTEXT_POINTER(tag, st, m, fd, ltype, ptr) \
|
461
474
|
PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr)
|
462
475
|
|
476
|
+
/* INLINE does not support OPTEXT. */
|
477
|
+
|
463
478
|
#define PB_OPTEXT_CALLBACK(tag, st, m, fd, ltype, ptr) \
|
464
479
|
PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr)
|
465
480
|
|
@@ -491,7 +506,7 @@ struct pb_extension_s {
|
|
491
506
|
* FLOAT, INT32, INT64, MESSAGE, SFIXED32, SFIXED64
|
492
507
|
* SINT32, SINT64, STRING, UINT32, UINT64 or EXTENSION
|
493
508
|
* - Field rules: REQUIRED, OPTIONAL or REPEATED
|
494
|
-
* - Allocation: STATIC or CALLBACK
|
509
|
+
* - Allocation: STATIC, INLINE, or CALLBACK
|
495
510
|
* - Placement: FIRST or OTHER, depending on if this is the first field in structure.
|
496
511
|
* - Message name
|
497
512
|
* - Field name
|
@@ -517,11 +532,28 @@ struct pb_extension_s {
|
|
517
532
|
fd, pb_delta(st, which_ ## u, u.m), \
|
518
533
|
pb_membersize(st, u.m[0]), 0, ptr}
|
519
534
|
|
535
|
+
/* INLINE does not support ONEOF. */
|
536
|
+
|
520
537
|
#define PB_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \
|
521
|
-
|
538
|
+
PB_ONEOF_ ## allocation(union_name, tag, message, field, \
|
522
539
|
PB_DATAOFFSET_ ## placement(message, union_name.field, prevfield), \
|
523
540
|
PB_LTYPE_MAP_ ## type, ptr)
|
524
541
|
|
542
|
+
#define PB_ANONYMOUS_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \
|
543
|
+
{tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \
|
544
|
+
fd, pb_delta(st, which_ ## u, m), \
|
545
|
+
pb_membersize(st, m), 0, ptr}
|
546
|
+
|
547
|
+
#define PB_ANONYMOUS_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \
|
548
|
+
{tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \
|
549
|
+
fd, pb_delta(st, which_ ## u, m), \
|
550
|
+
pb_membersize(st, m[0]), 0, ptr}
|
551
|
+
|
552
|
+
#define PB_ANONYMOUS_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \
|
553
|
+
PB_ANONYMOUS_ONEOF_ ## allocation(union_name, tag, message, field, \
|
554
|
+
PB_DATAOFFSET_ ## placement(message, field, prevfield), \
|
555
|
+
PB_LTYPE_MAP_ ## type, ptr)
|
556
|
+
|
525
557
|
/* These macros are used for giving out error messages.
|
526
558
|
* They are mostly a debugging aid; the main error information
|
527
559
|
* is the true/false return value from functions.
|
@@ -23,9 +23,9 @@
|
|
23
23
|
|
24
24
|
typedef bool (*pb_decoder_t)(pb_istream_t *stream, const pb_field_t *field, void *dest) checkreturn;
|
25
25
|
|
26
|
-
static bool checkreturn buf_read(pb_istream_t *stream,
|
26
|
+
static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count);
|
27
27
|
static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest);
|
28
|
-
static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type,
|
28
|
+
static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size);
|
29
29
|
static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
|
30
30
|
static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
|
31
31
|
static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
|
@@ -65,17 +65,18 @@ static const pb_decoder_t PB_DECODERS[PB_LTYPES_COUNT] = {
|
|
65
65
|
&pb_dec_bytes,
|
66
66
|
&pb_dec_string,
|
67
67
|
&pb_dec_submessage,
|
68
|
-
NULL /* extensions */
|
68
|
+
NULL, /* extensions */
|
69
|
+
&pb_dec_bytes /* PB_LTYPE_FIXED_LENGTH_BYTES */
|
69
70
|
};
|
70
71
|
|
71
72
|
/*******************************
|
72
73
|
* pb_istream_t implementation *
|
73
74
|
*******************************/
|
74
75
|
|
75
|
-
static bool checkreturn buf_read(pb_istream_t *stream,
|
76
|
+
static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count)
|
76
77
|
{
|
77
|
-
|
78
|
-
stream->state =
|
78
|
+
const pb_byte_t *source = (const pb_byte_t*)stream->state;
|
79
|
+
stream->state = (pb_byte_t*)stream->state + count;
|
79
80
|
|
80
81
|
if (buf != NULL)
|
81
82
|
{
|
@@ -86,13 +87,13 @@ static bool checkreturn buf_read(pb_istream_t *stream, uint8_t *buf, size_t coun
|
|
86
87
|
return true;
|
87
88
|
}
|
88
89
|
|
89
|
-
bool checkreturn pb_read(pb_istream_t *stream,
|
90
|
+
bool checkreturn pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count)
|
90
91
|
{
|
91
92
|
#ifndef PB_BUFFER_ONLY
|
92
93
|
if (buf == NULL && stream->callback != buf_read)
|
93
94
|
{
|
94
95
|
/* Skip input bytes */
|
95
|
-
|
96
|
+
pb_byte_t tmp[16];
|
96
97
|
while (count > 16)
|
97
98
|
{
|
98
99
|
if (!pb_read(stream, tmp, 16))
|
@@ -122,7 +123,7 @@ bool checkreturn pb_read(pb_istream_t *stream, uint8_t *buf, size_t count)
|
|
122
123
|
|
123
124
|
/* Read a single byte from input stream. buf may not be NULL.
|
124
125
|
* This is an optimization for the varint decoding. */
|
125
|
-
static bool checkreturn pb_readbyte(pb_istream_t *stream,
|
126
|
+
static bool checkreturn pb_readbyte(pb_istream_t *stream, pb_byte_t *buf)
|
126
127
|
{
|
127
128
|
if (stream->bytes_left == 0)
|
128
129
|
PB_RETURN_ERROR(stream, "end-of-stream");
|
@@ -131,8 +132,8 @@ static bool checkreturn pb_readbyte(pb_istream_t *stream, uint8_t *buf)
|
|
131
132
|
if (!stream->callback(stream, buf, 1))
|
132
133
|
PB_RETURN_ERROR(stream, "io error");
|
133
134
|
#else
|
134
|
-
*buf = *(
|
135
|
-
stream->state = (
|
135
|
+
*buf = *(const pb_byte_t*)stream->state;
|
136
|
+
stream->state = (pb_byte_t*)stream->state + 1;
|
136
137
|
#endif
|
137
138
|
|
138
139
|
stream->bytes_left--;
|
@@ -140,15 +141,23 @@ static bool checkreturn pb_readbyte(pb_istream_t *stream, uint8_t *buf)
|
|
140
141
|
return true;
|
141
142
|
}
|
142
143
|
|
143
|
-
pb_istream_t pb_istream_from_buffer(
|
144
|
+
pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize)
|
144
145
|
{
|
145
146
|
pb_istream_t stream;
|
147
|
+
/* Cast away the const from buf without a compiler error. We are
|
148
|
+
* careful to use it only in a const manner in the callbacks.
|
149
|
+
*/
|
150
|
+
union {
|
151
|
+
void *state;
|
152
|
+
const void *c_state;
|
153
|
+
} state;
|
146
154
|
#ifdef PB_BUFFER_ONLY
|
147
155
|
stream.callback = NULL;
|
148
156
|
#else
|
149
157
|
stream.callback = &buf_read;
|
150
158
|
#endif
|
151
|
-
|
159
|
+
state.c_state = buf;
|
160
|
+
stream.state = state.state;
|
152
161
|
stream.bytes_left = bufsize;
|
153
162
|
#ifndef PB_NO_ERRMSG
|
154
163
|
stream.errmsg = NULL;
|
@@ -162,7 +171,7 @@ pb_istream_t pb_istream_from_buffer(uint8_t *buf, size_t bufsize)
|
|
162
171
|
|
163
172
|
static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
|
164
173
|
{
|
165
|
-
|
174
|
+
pb_byte_t byte;
|
166
175
|
uint32_t result;
|
167
176
|
|
168
177
|
if (!pb_readbyte(stream, &byte))
|
@@ -176,7 +185,7 @@ static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
|
|
176
185
|
else
|
177
186
|
{
|
178
187
|
/* Multibyte case */
|
179
|
-
|
188
|
+
uint_fast8_t bitpos = 7;
|
180
189
|
result = byte & 0x7F;
|
181
190
|
|
182
191
|
do
|
@@ -188,7 +197,7 @@ static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
|
|
188
197
|
return false;
|
189
198
|
|
190
199
|
result |= (uint32_t)(byte & 0x7F) << bitpos;
|
191
|
-
bitpos = (
|
200
|
+
bitpos = (uint_fast8_t)(bitpos + 7);
|
192
201
|
} while (byte & 0x80);
|
193
202
|
}
|
194
203
|
|
@@ -198,8 +207,8 @@ static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
|
|
198
207
|
|
199
208
|
bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest)
|
200
209
|
{
|
201
|
-
|
202
|
-
|
210
|
+
pb_byte_t byte;
|
211
|
+
uint_fast8_t bitpos = 0;
|
203
212
|
uint64_t result = 0;
|
204
213
|
|
205
214
|
do
|
@@ -211,7 +220,7 @@ bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest)
|
|
211
220
|
return false;
|
212
221
|
|
213
222
|
result |= (uint64_t)(byte & 0x7F) << bitpos;
|
214
|
-
bitpos = (
|
223
|
+
bitpos = (uint_fast8_t)(bitpos + 7);
|
215
224
|
} while (byte & 0x80);
|
216
225
|
|
217
226
|
*dest = result;
|
@@ -220,7 +229,7 @@ bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest)
|
|
220
229
|
|
221
230
|
bool checkreturn pb_skip_varint(pb_istream_t *stream)
|
222
231
|
{
|
223
|
-
|
232
|
+
pb_byte_t byte;
|
224
233
|
do
|
225
234
|
{
|
226
235
|
if (!pb_read(stream, &byte, 1))
|
@@ -279,7 +288,7 @@ bool checkreturn pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type)
|
|
279
288
|
/* Read a raw value to buffer, for the purpose of passing it to callback as
|
280
289
|
* a substream. Size is maximum size on call, and actual size on return.
|
281
290
|
*/
|
282
|
-
static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type,
|
291
|
+
static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size)
|
283
292
|
{
|
284
293
|
size_t max_size = *size;
|
285
294
|
switch (wire_type)
|
@@ -367,7 +376,7 @@ static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t
|
|
367
376
|
|
368
377
|
while (substream.bytes_left > 0 && *size < iter->pos->array_size)
|
369
378
|
{
|
370
|
-
void *pItem = (
|
379
|
+
void *pItem = (char*)iter->pData + iter->pos->data_size * (*size);
|
371
380
|
if (!func(&substream, iter->pos, pItem))
|
372
381
|
{
|
373
382
|
status = false;
|
@@ -386,7 +395,7 @@ static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t
|
|
386
395
|
{
|
387
396
|
/* Repeated field */
|
388
397
|
pb_size_t *size = (pb_size_t*)iter->pSize;
|
389
|
-
void *pItem = (
|
398
|
+
void *pItem = (char*)iter->pData + iter->pos->data_size * (*size);
|
390
399
|
if (*size >= iter->pos->array_size)
|
391
400
|
PB_RETURN_ERROR(stream, "array overflow");
|
392
401
|
|
@@ -540,7 +549,7 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_
|
|
540
549
|
}
|
541
550
|
|
542
551
|
/* Decode the array entry */
|
543
|
-
pItem = *(
|
552
|
+
pItem = *(char**)iter->pData + iter->pos->data_size * (*size);
|
544
553
|
initialize_pointer_field(pItem, iter);
|
545
554
|
if (!func(&substream, iter->pos, pItem))
|
546
555
|
{
|
@@ -576,7 +585,7 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_
|
|
576
585
|
if (!allocate_field(stream, iter->pData, iter->pos->data_size, *size))
|
577
586
|
return false;
|
578
587
|
|
579
|
-
pItem = *(
|
588
|
+
pItem = *(char**)iter->pData + iter->pos->data_size * (*size - 1);
|
580
589
|
initialize_pointer_field(pItem, iter);
|
581
590
|
return func(stream, iter->pos, pItem);
|
582
591
|
}
|
@@ -623,7 +632,7 @@ static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type
|
|
623
632
|
* which in turn allows to use same callback for packed and
|
624
633
|
* not-packed fields. */
|
625
634
|
pb_istream_t substream;
|
626
|
-
|
635
|
+
pb_byte_t buffer[10];
|
627
636
|
size_t size = sizeof(buffer);
|
628
637
|
|
629
638
|
if (!read_raw_value(stream, wire_type, buffer, &size))
|
@@ -830,7 +839,8 @@ static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_str
|
|
830
839
|
|
831
840
|
bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct)
|
832
841
|
{
|
833
|
-
|
842
|
+
uint32_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 31) / 32] = {0, 0};
|
843
|
+
const uint32_t allbits = ~(uint32_t)0;
|
834
844
|
uint32_t extension_range_start = 0;
|
835
845
|
pb_field_iter_t iter;
|
836
846
|
|
@@ -886,8 +896,8 @@ bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[
|
|
886
896
|
if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REQUIRED
|
887
897
|
&& iter.required_field_index < PB_MAX_REQUIRED_FIELDS)
|
888
898
|
{
|
889
|
-
|
890
|
-
fields_seen[iter.required_field_index >>
|
899
|
+
uint32_t tmp = ((uint32_t)1 << (iter.required_field_index & 31));
|
900
|
+
fields_seen[iter.required_field_index >> 5] |= tmp;
|
891
901
|
}
|
892
902
|
|
893
903
|
if (!decode_field(stream, wire_type, &iter))
|
@@ -912,16 +922,19 @@ bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[
|
|
912
922
|
if (PB_HTYPE(last_type) == PB_HTYPE_REQUIRED && iter.pos->tag != 0)
|
913
923
|
req_field_count++;
|
914
924
|
|
915
|
-
|
916
|
-
for (i = 0; i < (req_field_count >> 3); i++)
|
925
|
+
if (req_field_count > 0)
|
917
926
|
{
|
918
|
-
|
927
|
+
/* Check the whole words */
|
928
|
+
for (i = 0; i < (req_field_count >> 5); i++)
|
929
|
+
{
|
930
|
+
if (fields_seen[i] != allbits)
|
931
|
+
PB_RETURN_ERROR(stream, "missing required field");
|
932
|
+
}
|
933
|
+
|
934
|
+
/* Check the remaining bits */
|
935
|
+
if (fields_seen[req_field_count >> 5] != (allbits >> (32 - (req_field_count & 31))))
|
919
936
|
PB_RETURN_ERROR(stream, "missing required field");
|
920
937
|
}
|
921
|
-
|
922
|
-
/* Check the remaining bits */
|
923
|
-
if (fields_seen[req_field_count >> 3] != (0xFF >> (8 - (req_field_count & 7))))
|
924
|
-
PB_RETURN_ERROR(stream, "missing required field");
|
925
938
|
}
|
926
939
|
|
927
940
|
return true;
|
@@ -1023,6 +1036,12 @@ static void pb_release_single_field(const pb_field_iter_t *iter)
|
|
1023
1036
|
if (PB_HTYPE(type) == PB_HTYPE_REPEATED)
|
1024
1037
|
{
|
1025
1038
|
count = *(pb_size_t*)iter->pSize;
|
1039
|
+
|
1040
|
+
if (PB_ATYPE(type) == PB_ATYPE_STATIC && count > iter->pos->array_size)
|
1041
|
+
{
|
1042
|
+
/* Protect against corrupted _count fields */
|
1043
|
+
count = iter->pos->array_size;
|
1044
|
+
}
|
1026
1045
|
}
|
1027
1046
|
|
1028
1047
|
if (pItem)
|
@@ -1030,7 +1049,7 @@ static void pb_release_single_field(const pb_field_iter_t *iter)
|
|
1030
1049
|
while (count--)
|
1031
1050
|
{
|
1032
1051
|
pb_release((const pb_field_t*)iter->pos->ptr, pItem);
|
1033
|
-
pItem = (
|
1052
|
+
pItem = (char*)pItem + iter->pos->data_size;
|
1034
1053
|
}
|
1035
1054
|
}
|
1036
1055
|
}
|
@@ -1067,6 +1086,9 @@ void pb_release(const pb_field_t fields[], void *dest_struct)
|
|
1067
1086
|
{
|
1068
1087
|
pb_field_iter_t iter;
|
1069
1088
|
|
1089
|
+
if (!dest_struct)
|
1090
|
+
return; /* Ignore NULL pointers, similar to free() */
|
1091
|
+
|
1070
1092
|
if (!pb_field_iter_begin(&iter, fields, dest_struct))
|
1071
1093
|
return; /* Empty message type */
|
1072
1094
|
|
@@ -1095,44 +1117,35 @@ bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest)
|
|
1095
1117
|
|
1096
1118
|
bool pb_decode_fixed32(pb_istream_t *stream, void *dest)
|
1097
1119
|
{
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
if (!pb_read(stream, lebytes, 4))
|
1120
|
+
pb_byte_t bytes[4];
|
1121
|
+
|
1122
|
+
if (!pb_read(stream, bytes, 4))
|
1103
1123
|
return false;
|
1104
1124
|
|
1105
|
-
bytes[0]
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1125
|
+
*(uint32_t*)dest = ((uint32_t)bytes[0] << 0) |
|
1126
|
+
((uint32_t)bytes[1] << 8) |
|
1127
|
+
((uint32_t)bytes[2] << 16) |
|
1128
|
+
((uint32_t)bytes[3] << 24);
|
1109
1129
|
return true;
|
1110
|
-
#else
|
1111
|
-
return pb_read(stream, (uint8_t*)dest, 4);
|
1112
|
-
#endif
|
1113
1130
|
}
|
1114
1131
|
|
1115
1132
|
bool pb_decode_fixed64(pb_istream_t *stream, void *dest)
|
1116
1133
|
{
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
if (!pb_read(stream, lebytes, 8))
|
1134
|
+
pb_byte_t bytes[8];
|
1135
|
+
|
1136
|
+
if (!pb_read(stream, bytes, 8))
|
1122
1137
|
return false;
|
1123
1138
|
|
1124
|
-
bytes[0]
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1139
|
+
*(uint64_t*)dest = ((uint64_t)bytes[0] << 0) |
|
1140
|
+
((uint64_t)bytes[1] << 8) |
|
1141
|
+
((uint64_t)bytes[2] << 16) |
|
1142
|
+
((uint64_t)bytes[3] << 24) |
|
1143
|
+
((uint64_t)bytes[4] << 32) |
|
1144
|
+
((uint64_t)bytes[5] << 40) |
|
1145
|
+
((uint64_t)bytes[6] << 48) |
|
1146
|
+
((uint64_t)bytes[7] << 56);
|
1147
|
+
|
1132
1148
|
return true;
|
1133
|
-
#else
|
1134
|
-
return pb_read(stream, (uint8_t*)dest, 8);
|
1135
|
-
#endif
|
1136
1149
|
}
|
1137
1150
|
|
1138
1151
|
static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest)
|
@@ -1149,19 +1162,22 @@ static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *fi
|
|
1149
1162
|
* not break decoding of such messages, we cast <=32 bit fields to
|
1150
1163
|
* int32_t first to get the sign correct.
|
1151
1164
|
*/
|
1152
|
-
if (field->data_size ==
|
1165
|
+
if (field->data_size == sizeof(int64_t))
|
1153
1166
|
svalue = (int64_t)value;
|
1154
1167
|
else
|
1155
1168
|
svalue = (int32_t)value;
|
1156
1169
|
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1170
|
+
/* Cast to the proper field size, while checking for overflows */
|
1171
|
+
if (field->data_size == sizeof(int64_t))
|
1172
|
+
clamped = *(int64_t*)dest = svalue;
|
1173
|
+
else if (field->data_size == sizeof(int32_t))
|
1174
|
+
clamped = *(int32_t*)dest = (int32_t)svalue;
|
1175
|
+
else if (field->data_size == sizeof(int_least16_t))
|
1176
|
+
clamped = *(int_least16_t*)dest = (int_least16_t)svalue;
|
1177
|
+
else if (field->data_size == sizeof(int_least8_t))
|
1178
|
+
clamped = *(int_least8_t*)dest = (int_least8_t)svalue;
|
1179
|
+
else
|
1180
|
+
PB_RETURN_ERROR(stream, "invalid data_size");
|
1165
1181
|
|
1166
1182
|
if (clamped != svalue)
|
1167
1183
|
PB_RETURN_ERROR(stream, "integer too large");
|
@@ -1175,14 +1191,17 @@ static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *f
|
|
1175
1191
|
if (!pb_decode_varint(stream, &value))
|
1176
1192
|
return false;
|
1177
1193
|
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1194
|
+
/* Cast to the proper field size, while checking for overflows */
|
1195
|
+
if (field->data_size == sizeof(uint64_t))
|
1196
|
+
clamped = *(uint64_t*)dest = value;
|
1197
|
+
else if (field->data_size == sizeof(uint32_t))
|
1198
|
+
clamped = *(uint32_t*)dest = (uint32_t)value;
|
1199
|
+
else if (field->data_size == sizeof(uint_least16_t))
|
1200
|
+
clamped = *(uint_least16_t*)dest = (uint_least16_t)value;
|
1201
|
+
else if (field->data_size == sizeof(uint_least8_t))
|
1202
|
+
clamped = *(uint_least8_t*)dest = (uint_least8_t)value;
|
1203
|
+
else
|
1204
|
+
PB_RETURN_ERROR(stream, "invalid data_size");
|
1186
1205
|
|
1187
1206
|
if (clamped != value)
|
1188
1207
|
PB_RETURN_ERROR(stream, "integer too large");
|
@@ -1196,14 +1215,17 @@ static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *f
|
|
1196
1215
|
if (!pb_decode_svarint(stream, &value))
|
1197
1216
|
return false;
|
1198
1217
|
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1218
|
+
/* Cast to the proper field size, while checking for overflows */
|
1219
|
+
if (field->data_size == sizeof(int64_t))
|
1220
|
+
clamped = *(int64_t*)dest = value;
|
1221
|
+
else if (field->data_size == sizeof(int32_t))
|
1222
|
+
clamped = *(int32_t*)dest = (int32_t)value;
|
1223
|
+
else if (field->data_size == sizeof(int_least16_t))
|
1224
|
+
clamped = *(int_least16_t*)dest = (int_least16_t)value;
|
1225
|
+
else if (field->data_size == sizeof(int_least8_t))
|
1226
|
+
clamped = *(int_least8_t*)dest = (int_least8_t)value;
|
1227
|
+
else
|
1228
|
+
PB_RETURN_ERROR(stream, "invalid data_size");
|
1207
1229
|
|
1208
1230
|
if (clamped != value)
|
1209
1231
|
PB_RETURN_ERROR(stream, "integer too large");
|
@@ -1251,6 +1273,12 @@ static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *fie
|
|
1251
1273
|
}
|
1252
1274
|
else
|
1253
1275
|
{
|
1276
|
+
if (PB_LTYPE(field->type) == PB_LTYPE_FIXED_LENGTH_BYTES) {
|
1277
|
+
if (size != field->data_size)
|
1278
|
+
PB_RETURN_ERROR(stream, "incorrect inline bytes size");
|
1279
|
+
return pb_read(stream, (pb_byte_t*)dest, field->data_size);
|
1280
|
+
}
|
1281
|
+
|
1254
1282
|
if (alloc_size > field->data_size)
|
1255
1283
|
PB_RETURN_ERROR(stream, "bytes overflow");
|
1256
1284
|
bdest = (pb_bytes_array_t*)dest;
|
@@ -1290,8 +1318,8 @@ static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *fi
|
|
1290
1318
|
PB_RETURN_ERROR(stream, "string overflow");
|
1291
1319
|
}
|
1292
1320
|
|
1293
|
-
status = pb_read(stream, (
|
1294
|
-
*((
|
1321
|
+
status = pb_read(stream, (pb_byte_t*)dest, size);
|
1322
|
+
*((pb_byte_t*)dest + size) = 0;
|
1295
1323
|
return status;
|
1296
1324
|
}
|
1297
1325
|
|