grpc 0.12.0 → 0.13.0.pre1.1
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 +5707 -22222
- data/include/grpc/byte_buffer.h +2 -83
- data/include/grpc/census.h +191 -121
- data/include/grpc/compression.h +14 -38
- data/include/grpc/grpc.h +88 -434
- data/include/grpc/grpc_security.h +76 -46
- data/include/grpc/grpc_zookeeper.h +1 -1
- data/include/grpc/impl/codegen/alloc.h +74 -0
- data/include/grpc/impl/codegen/atm.h +92 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
- data/include/grpc/impl/codegen/atm_win32.h +125 -0
- data/include/grpc/impl/codegen/byte_buffer.h +121 -0
- data/include/grpc/impl/codegen/compression_types.h +73 -0
- data/include/grpc/impl/codegen/connectivity_state.h +59 -0
- data/include/grpc/impl/codegen/grpc_types.h +373 -0
- data/include/grpc/impl/codegen/log.h +110 -0
- data/include/grpc/impl/codegen/port_platform.h +362 -0
- data/include/grpc/impl/codegen/propagation_bits.h +67 -0
- data/include/grpc/impl/codegen/slice.h +182 -0
- data/include/grpc/impl/codegen/slice_buffer.h +105 -0
- data/include/grpc/impl/codegen/status.h +163 -0
- data/include/grpc/impl/codegen/sync.h +316 -0
- data/include/grpc/impl/codegen/sync_generic.h +55 -0
- data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
- data/include/grpc/impl/codegen/sync_win32.h +49 -0
- data/include/grpc/impl/codegen/time.h +132 -0
- data/include/grpc/status.h +2 -126
- data/include/grpc/support/alloc.h +2 -35
- data/include/grpc/support/atm.h +2 -55
- data/include/grpc/support/atm_gcc_atomic.h +5 -38
- data/include/grpc/support/atm_gcc_sync.h +2 -50
- data/include/grpc/support/atm_win32.h +2 -88
- data/include/grpc/support/avl.h +7 -7
- data/include/grpc/support/cmdline.h +15 -13
- data/include/grpc/support/cpu.h +5 -3
- data/include/grpc/support/histogram.h +23 -20
- data/include/grpc/support/host_port.h +5 -3
- data/include/grpc/support/log.h +2 -71
- data/include/grpc/support/log_win32.h +2 -2
- data/include/grpc/support/port_platform.h +2 -319
- data/include/grpc/support/slice.h +2 -145
- data/include/grpc/support/slice_buffer.h +2 -65
- data/include/grpc/support/string_util.h +3 -3
- data/include/grpc/support/subprocess.h +8 -6
- data/include/grpc/support/sync.h +2 -278
- data/include/grpc/support/sync_generic.h +2 -18
- data/include/grpc/support/sync_posix.h +2 -10
- data/include/grpc/support/sync_win32.h +2 -12
- data/include/grpc/support/thd.h +11 -11
- data/include/grpc/support/time.h +2 -91
- data/include/grpc/support/tls.h +1 -1
- data/include/grpc/support/tls_gcc.h +1 -1
- data/include/grpc/support/tls_msvc.h +1 -1
- data/include/grpc/support/tls_pthread.h +2 -2
- data/src/boringssl/err_data.c +1252 -0
- data/src/core/census/context.c +492 -8
- data/src/core/census/grpc_filter.c +3 -3
- data/src/core/census/initialize.c +4 -7
- data/src/core/census/operation.c +2 -2
- data/src/core/census/placeholders.c +109 -0
- data/src/core/census/rpc_metric_id.h +6 -6
- data/src/core/census/tracing.c +1 -1
- data/src/core/channel/channel_args.c +4 -3
- data/src/core/channel/channel_stack.c +1 -1
- data/src/core/channel/client_channel.c +18 -14
- data/src/core/channel/client_uchannel.c +3 -3
- data/src/core/channel/compress_filter.c +8 -8
- data/src/core/channel/http_client_filter.c +2 -2
- data/src/core/channel/http_server_filter.c +9 -9
- data/src/core/channel/subchannel_call_holder.c +12 -10
- data/src/core/client_config/lb_policies/pick_first.c +49 -31
- data/src/core/client_config/lb_policies/round_robin.c +7 -7
- data/src/core/client_config/resolvers/dns_resolver.c +3 -3
- data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
- data/src/core/client_config/subchannel.c +36 -25
- data/src/core/compression/algorithm.c +3 -3
- data/src/core/httpcli/format_request.c +1 -1
- data/src/core/httpcli/httpcli.c +5 -5
- data/src/core/httpcli/httpcli_security_connector.c +2 -3
- data/src/core/httpcli/parser.c +7 -7
- data/src/core/httpcli/parser.h +1 -1
- data/src/core/iomgr/closure.c +7 -7
- data/src/core/iomgr/closure.h +6 -5
- data/src/core/iomgr/exec_ctx.c +12 -8
- data/src/core/iomgr/exec_ctx.h +12 -5
- data/src/core/iomgr/executor.c +4 -4
- data/src/core/iomgr/executor.h +2 -2
- data/src/core/iomgr/fd_posix.c +28 -17
- data/src/core/iomgr/fd_posix.h +7 -4
- data/src/core/iomgr/iocp_windows.c +6 -8
- data/src/core/iomgr/pollset_multipoller_with_epoll.c +70 -5
- data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +4 -2
- data/src/core/iomgr/pollset_posix.c +15 -15
- data/src/core/iomgr/pollset_posix.h +4 -2
- data/src/core/iomgr/pollset_windows.c +3 -12
- data/src/core/iomgr/resolve_address_posix.c +2 -2
- data/src/core/iomgr/resolve_address_windows.c +2 -2
- data/src/core/iomgr/sockaddr_utils.c +6 -6
- data/src/core/iomgr/sockaddr_win32.h +1 -6
- data/src/core/iomgr/tcp_client_posix.c +7 -7
- data/src/core/iomgr/tcp_client_windows.c +4 -4
- data/src/core/iomgr/tcp_posix.c +14 -8
- data/src/core/iomgr/tcp_posix.h +7 -1
- data/src/core/iomgr/tcp_server.h +40 -20
- data/src/core/iomgr/tcp_server_posix.c +106 -49
- data/src/core/iomgr/tcp_server_windows.c +98 -49
- data/src/core/iomgr/tcp_windows.c +11 -15
- data/src/core/iomgr/timer.c +8 -8
- data/src/core/iomgr/timer.h +1 -1
- data/src/core/iomgr/timer_heap.c +10 -10
- data/src/core/iomgr/timer_heap.h +2 -2
- data/src/core/iomgr/udp_server.c +2 -12
- data/src/core/iomgr/udp_server.h +1 -9
- data/src/core/iomgr/workqueue.h +2 -4
- data/src/core/iomgr/workqueue_posix.c +3 -3
- data/src/core/json/json_reader.c +11 -12
- data/src/core/json/json_reader.h +4 -4
- data/src/core/json/json_string.c +19 -19
- data/src/core/json/json_writer.c +7 -9
- data/src/core/profiling/basic_timers.c +1 -1
- data/src/core/security/base64.c +9 -9
- data/src/core/security/client_auth_filter.c +4 -4
- data/src/core/security/credentials.c +5 -5
- data/src/core/security/google_default_credentials.c +3 -3
- data/src/core/security/handshake.c +6 -5
- data/src/core/security/json_token.c +13 -7
- data/src/core/security/jwt_verifier.c +3 -2
- data/src/core/security/secure_endpoint.c +16 -16
- data/src/core/security/security_connector.c +47 -17
- data/src/core/security/security_connector.h +5 -5
- data/src/core/security/server_auth_filter.c +3 -3
- data/src/core/security/server_secure_chttp2.c +30 -31
- data/src/core/statistics/census_interface.h +2 -2
- data/src/core/statistics/census_rpc_stats.h +3 -3
- data/src/core/support/alloc.c +1 -1
- data/src/core/support/cpu_posix.c +2 -2
- data/src/core/support/env_linux.c +12 -2
- data/src/core/support/env_win32.c +15 -7
- data/src/core/support/histogram.c +5 -5
- data/src/core/support/log_posix.c +1 -1
- data/src/core/support/log_win32.c +4 -3
- data/src/core/support/murmur_hash.c +11 -11
- data/src/core/support/murmur_hash.h +1 -1
- data/src/core/support/slice.c +11 -11
- data/src/core/support/slice_buffer.c +6 -6
- data/src/core/support/stack_lockfree.c +20 -10
- data/src/core/support/string.c +15 -15
- data/src/core/support/string.h +5 -5
- data/src/core/support/string_win32.c +5 -5
- data/src/core/support/subprocess_windows.c +141 -0
- data/src/core/support/sync.c +4 -4
- data/src/core/support/sync_posix.c +2 -2
- data/src/core/support/sync_win32.c +10 -5
- data/src/core/support/time.c +29 -29
- data/src/core/support/time_posix.c +15 -6
- data/src/core/support/time_precise.c +2 -2
- data/src/core/support/time_win32.c +18 -9
- data/src/core/support/tls_pthread.c +1 -1
- data/src/core/support/wrap_memcpy.c +53 -0
- data/src/core/surface/alarm.c +83 -0
- data/src/core/surface/byte_buffer_reader.c +1 -1
- data/src/core/surface/call.c +78 -69
- data/src/core/surface/call.h +2 -2
- data/src/core/surface/call_test_only.h +2 -2
- data/src/core/surface/channel.c +9 -9
- data/src/core/surface/channel.h +1 -1
- data/src/core/surface/channel_connectivity.c +3 -3
- data/src/core/surface/channel_create.c +3 -3
- data/src/core/surface/channel_ping.c +2 -2
- data/src/core/surface/completion_queue.c +11 -12
- data/src/core/surface/completion_queue.h +1 -1
- data/src/core/surface/init.c +7 -5
- data/src/core/surface/lame_client.c +3 -3
- data/src/core/surface/secure_channel_create.c +3 -3
- data/src/core/surface/server.c +28 -28
- data/src/core/surface/server_chttp2.c +8 -8
- data/src/core/surface/server_create.c +1 -4
- data/src/core/surface/validate_metadata.c +3 -3
- data/src/core/surface/version.c +2 -2
- data/src/core/transport/byte_stream.c +8 -6
- data/src/core/transport/byte_stream.h +6 -5
- data/src/core/transport/chttp2/bin_encoder.c +29 -29
- data/src/core/transport/chttp2/frame_data.c +29 -26
- data/src/core/transport/chttp2/frame_data.h +6 -6
- data/src/core/transport/chttp2/frame_goaway.c +30 -30
- data/src/core/transport/chttp2/frame_goaway.h +6 -6
- data/src/core/transport/chttp2/frame_ping.c +6 -6
- data/src/core/transport/chttp2/frame_ping.h +5 -5
- data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
- data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
- data/src/core/transport/chttp2/frame_settings.c +30 -30
- data/src/core/transport/chttp2/frame_settings.h +13 -13
- data/src/core/transport/chttp2/frame_window_update.c +17 -18
- data/src/core/transport/chttp2/frame_window_update.h +5 -7
- data/src/core/transport/chttp2/hpack_encoder.c +69 -73
- data/src/core/transport/chttp2/hpack_encoder.h +16 -16
- data/src/core/transport/chttp2/hpack_parser.c +167 -167
- data/src/core/transport/chttp2/hpack_parser.h +16 -16
- data/src/core/transport/chttp2/hpack_table.c +13 -13
- data/src/core/transport/chttp2/hpack_table.h +11 -11
- data/src/core/transport/chttp2/internal.h +97 -86
- data/src/core/transport/chttp2/parsing.c +25 -25
- data/src/core/transport/chttp2/stream_lists.c +26 -3
- data/src/core/transport/chttp2/stream_map.c +13 -14
- data/src/core/transport/chttp2/stream_map.h +6 -7
- data/src/core/transport/chttp2/timeout_encoding.c +19 -16
- data/src/core/transport/chttp2/varint.c +8 -9
- data/src/core/transport/chttp2/varint.h +7 -8
- data/src/core/transport/chttp2/writing.c +26 -23
- data/src/core/transport/chttp2_transport.c +133 -92
- data/src/core/transport/connectivity_state.c +6 -6
- data/src/core/transport/metadata.c +18 -18
- data/src/core/transport/metadata.h +5 -5
- data/src/core/transport/static_metadata.c +15 -16
- data/src/core/transport/static_metadata.h +5 -5
- data/src/core/transport/transport.c +5 -5
- data/src/core/transport/transport.h +14 -1
- data/src/core/tsi/fake_transport_security.c +7 -7
- data/src/core/tsi/ssl_transport_security.c +6 -4
- data/src/core/tsi/ssl_types.h +55 -0
- data/src/ruby/ext/grpc/extconf.rb +51 -14
- data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
- data/src/ruby/ext/grpc/rb_call.c +6 -3
- data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
- data/src/ruby/ext/grpc/rb_channel.c +4 -2
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
- data/src/ruby/ext/grpc/rb_grpc.c +11 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
- data/src/ruby/ext/grpc/rb_loader.c +72 -0
- data/src/ruby/ext/grpc/rb_loader.h +40 -0
- data/src/ruby/ext/grpc/rb_server.c +3 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/grpc.rb +34 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/third_party/boringssl/crypto/aes/aes.c +1142 -0
- data/third_party/boringssl/crypto/aes/internal.h +87 -0
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
- data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
- data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
- data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
- data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
- data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
- data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
- data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
- data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
- data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
- data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
- data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
- data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
- data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
- data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
- data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
- data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
- data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
- data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
- data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
- data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
- data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
- data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
- data/third_party/boringssl/crypto/base64/base64.c +478 -0
- data/third_party/boringssl/crypto/bio/bio.c +608 -0
- data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
- data/third_party/boringssl/crypto/bio/buffer.c +496 -0
- data/third_party/boringssl/crypto/bio/connect.c +544 -0
- data/third_party/boringssl/crypto/bio/fd.c +270 -0
- data/third_party/boringssl/crypto/bio/file.c +349 -0
- data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
- data/third_party/boringssl/crypto/bio/internal.h +108 -0
- data/third_party/boringssl/crypto/bio/pair.c +803 -0
- data/third_party/boringssl/crypto/bio/printf.c +119 -0
- data/third_party/boringssl/crypto/bio/socket.c +195 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
- data/third_party/boringssl/crypto/bn/add.c +377 -0
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
- data/third_party/boringssl/crypto/bn/bn.c +341 -0
- data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
- data/third_party/boringssl/crypto/bn/cmp.c +200 -0
- data/third_party/boringssl/crypto/bn/convert.c +597 -0
- data/third_party/boringssl/crypto/bn/ctx.c +311 -0
- data/third_party/boringssl/crypto/bn/div.c +625 -0
- data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
- data/third_party/boringssl/crypto/bn/gcd.c +711 -0
- data/third_party/boringssl/crypto/bn/generic.c +1019 -0
- data/third_party/boringssl/crypto/bn/internal.h +294 -0
- data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
- data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
- data/third_party/boringssl/crypto/bn/mul.c +888 -0
- data/third_party/boringssl/crypto/bn/prime.c +845 -0
- data/third_party/boringssl/crypto/bn/random.c +326 -0
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
- data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
- data/third_party/boringssl/crypto/bn/shift.c +299 -0
- data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
- data/third_party/boringssl/crypto/buf/buf.c +235 -0
- data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
- data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
- data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
- data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
- data/third_party/boringssl/crypto/cipher/aead.c +167 -0
- data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
- data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
- data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
- data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
- data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
- data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
- data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
- data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
- data/third_party/boringssl/crypto/cipher/internal.h +164 -0
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
- data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
- data/third_party/boringssl/crypto/conf/conf.c +778 -0
- data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
- data/third_party/boringssl/crypto/conf/internal.h +31 -0
- data/third_party/boringssl/crypto/cpu-arm.c +199 -0
- data/third_party/boringssl/crypto/cpu-intel.c +261 -0
- data/third_party/boringssl/crypto/crypto.c +140 -0
- data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
- data/third_party/boringssl/crypto/des/des.c +771 -0
- data/third_party/boringssl/crypto/des/internal.h +212 -0
- data/third_party/boringssl/crypto/dh/check.c +180 -0
- data/third_party/boringssl/crypto/dh/dh.c +463 -0
- data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
- data/third_party/boringssl/crypto/dh/internal.h +80 -0
- data/third_party/boringssl/crypto/dh/params.c +301 -0
- data/third_party/boringssl/crypto/digest/digest.c +248 -0
- data/third_party/boringssl/crypto/digest/digests.c +321 -0
- data/third_party/boringssl/crypto/digest/internal.h +112 -0
- data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
- data/third_party/boringssl/crypto/directory.h +66 -0
- data/third_party/boringssl/crypto/directory_posix.c +108 -0
- data/third_party/boringssl/crypto/directory_win.c +144 -0
- data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
- data/third_party/boringssl/crypto/dsa/internal.h +78 -0
- data/third_party/boringssl/crypto/ec/ec.c +889 -0
- data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
- data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
- data/third_party/boringssl/crypto/ec/internal.h +318 -0
- data/third_party/boringssl/crypto/ec/oct.c +416 -0
- data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
- data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
- data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
- data/third_party/boringssl/crypto/ec/simple.c +1313 -0
- data/third_party/boringssl/crypto/ec/util-64.c +183 -0
- data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
- data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
- data/third_party/boringssl/crypto/engine/engine.c +96 -0
- data/third_party/boringssl/crypto/err/err.c +756 -0
- data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
- data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
- data/third_party/boringssl/crypto/evp/evp.c +411 -0
- data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
- data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
- data/third_party/boringssl/crypto/evp/internal.h +278 -0
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
- data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
- data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
- data/third_party/boringssl/crypto/evp/sign.c +151 -0
- data/third_party/boringssl/crypto/ex_data.c +294 -0
- data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
- data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
- data/third_party/boringssl/crypto/internal.h +532 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
- data/third_party/boringssl/crypto/md4/md4.c +225 -0
- data/third_party/boringssl/crypto/md5/md5.c +275 -0
- data/third_party/boringssl/crypto/mem.c +200 -0
- data/third_party/boringssl/crypto/modes/cbc.c +216 -0
- data/third_party/boringssl/crypto/modes/cfb.c +231 -0
- data/third_party/boringssl/crypto/modes/ctr.c +226 -0
- data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
- data/third_party/boringssl/crypto/modes/internal.h +370 -0
- data/third_party/boringssl/crypto/modes/ofb.c +108 -0
- data/third_party/boringssl/crypto/obj/obj.c +664 -0
- data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
- data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
- data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
- data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
- data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
- data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
- data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
- data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
- data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
- data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
- data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
- data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
- data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
- data/third_party/boringssl/crypto/rand/internal.h +32 -0
- data/third_party/boringssl/crypto/rand/rand.c +239 -0
- data/third_party/boringssl/crypto/rand/urandom.c +223 -0
- data/third_party/boringssl/crypto/rand/windows.c +56 -0
- data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
- data/third_party/boringssl/crypto/refcount_c11.c +67 -0
- data/third_party/boringssl/crypto/refcount_lock.c +53 -0
- data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
- data/third_party/boringssl/crypto/rsa/internal.h +164 -0
- data/third_party/boringssl/crypto/rsa/padding.c +711 -0
- data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
- data/third_party/boringssl/crypto/sha/sha1.c +337 -0
- data/third_party/boringssl/crypto/sha/sha256.c +327 -0
- data/third_party/boringssl/crypto/sha/sha512.c +607 -0
- data/third_party/boringssl/crypto/stack/stack.c +386 -0
- data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
- data/third_party/boringssl/crypto/test/test_util.h +35 -0
- data/third_party/boringssl/crypto/thread.c +101 -0
- data/third_party/boringssl/crypto/thread_none.c +55 -0
- data/third_party/boringssl/crypto/thread_pthread.c +167 -0
- data/third_party/boringssl/crypto/thread_win.c +282 -0
- data/third_party/boringssl/crypto/time_support.c +212 -0
- data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
- data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
- data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
- data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
- data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
- data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
- data/third_party/boringssl/crypto/x509/by_file.c +295 -0
- data/third_party/boringssl/crypto/x509/charmap.h +15 -0
- data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
- data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
- data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
- data/third_party/boringssl/crypto/x509/t_req.c +246 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
- data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
- data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
- data/third_party/boringssl/crypto/x509/x509.c +152 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
- data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
- data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
- data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
- data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
- data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
- data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
- data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
- data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
- data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
- data/third_party/boringssl/crypto/x509/x509name.c +381 -0
- data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
- data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
- data/third_party/boringssl/crypto/x509/x509type.c +128 -0
- data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
- data/third_party/boringssl/crypto/x509/x_all.c +547 -0
- data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
- data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
- data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
- data/third_party/boringssl/crypto/x509/x_info.c +95 -0
- data/third_party/boringssl/crypto/x509/x_name.c +538 -0
- data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
- data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
- data/third_party/boringssl/crypto/x509/x_req.c +112 -0
- data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
- data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
- data/third_party/boringssl/crypto/x509/x_val.c +69 -0
- data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
- data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
- data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
- data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
- data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
- data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
- data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
- data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
- data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
- data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
- data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
- data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
- data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
- data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
- data/third_party/boringssl/include/openssl/aead.h +346 -0
- data/third_party/boringssl/include/openssl/aes.h +158 -0
- data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
- data/third_party/boringssl/include/openssl/asn1.h +1168 -0
- data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
- data/third_party/boringssl/include/openssl/asn1t.h +906 -0
- data/third_party/boringssl/include/openssl/base.h +261 -0
- data/third_party/boringssl/include/openssl/base64.h +184 -0
- data/third_party/boringssl/include/openssl/bio.h +902 -0
- data/third_party/boringssl/include/openssl/blowfish.h +93 -0
- data/third_party/boringssl/include/openssl/bn.h +885 -0
- data/third_party/boringssl/include/openssl/buf.h +118 -0
- data/third_party/boringssl/include/openssl/buffer.h +18 -0
- data/third_party/boringssl/include/openssl/bytestring.h +360 -0
- data/third_party/boringssl/include/openssl/cast.h +96 -0
- data/third_party/boringssl/include/openssl/chacha.h +37 -0
- data/third_party/boringssl/include/openssl/cipher.h +571 -0
- data/third_party/boringssl/include/openssl/cmac.h +76 -0
- data/third_party/boringssl/include/openssl/conf.h +145 -0
- data/third_party/boringssl/include/openssl/cpu.h +184 -0
- data/third_party/boringssl/include/openssl/crypto.h +68 -0
- data/third_party/boringssl/include/openssl/curve25519.h +88 -0
- data/third_party/boringssl/include/openssl/des.h +177 -0
- data/third_party/boringssl/include/openssl/dh.h +238 -0
- data/third_party/boringssl/include/openssl/digest.h +258 -0
- data/third_party/boringssl/include/openssl/dsa.h +343 -0
- data/third_party/boringssl/include/openssl/dtls1.h +16 -0
- data/third_party/boringssl/include/openssl/ec.h +355 -0
- data/third_party/boringssl/include/openssl/ec_key.h +280 -0
- data/third_party/boringssl/include/openssl/ecdh.h +102 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
- data/third_party/boringssl/include/openssl/engine.h +98 -0
- data/third_party/boringssl/include/openssl/err.h +487 -0
- data/third_party/boringssl/include/openssl/evp.h +750 -0
- data/third_party/boringssl/include/openssl/ex_data.h +213 -0
- data/third_party/boringssl/include/openssl/hkdf.h +44 -0
- data/third_party/boringssl/include/openssl/hmac.h +160 -0
- data/third_party/boringssl/include/openssl/lhash.h +192 -0
- data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
- data/third_party/boringssl/include/openssl/md4.h +102 -0
- data/third_party/boringssl/include/openssl/md5.h +107 -0
- data/third_party/boringssl/include/openssl/mem.h +140 -0
- data/third_party/boringssl/include/openssl/obj.h +198 -0
- data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
- data/third_party/boringssl/include/openssl/objects.h +18 -0
- data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
- data/third_party/boringssl/include/openssl/opensslv.h +18 -0
- data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
- data/third_party/boringssl/include/openssl/pem.h +521 -0
- data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
- data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
- data/third_party/boringssl/include/openssl/poly1305.h +51 -0
- data/third_party/boringssl/include/openssl/pqueue.h +146 -0
- data/third_party/boringssl/include/openssl/rand.h +113 -0
- data/third_party/boringssl/include/openssl/rc4.h +90 -0
- data/third_party/boringssl/include/openssl/rsa.h +637 -0
- data/third_party/boringssl/include/openssl/safestack.h +16 -0
- data/third_party/boringssl/include/openssl/sha.h +256 -0
- data/third_party/boringssl/include/openssl/srtp.h +18 -0
- data/third_party/boringssl/include/openssl/ssl.h +4466 -0
- data/third_party/boringssl/include/openssl/ssl3.h +441 -0
- data/third_party/boringssl/include/openssl/stack.h +298 -0
- data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
- data/third_party/boringssl/include/openssl/thread.h +173 -0
- data/third_party/boringssl/include/openssl/time_support.h +90 -0
- data/third_party/boringssl/include/openssl/tls1.h +653 -0
- data/third_party/boringssl/include/openssl/type_check.h +91 -0
- data/third_party/boringssl/include/openssl/x509.h +1258 -0
- data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
- data/third_party/boringssl/include/openssl/x509v3.h +798 -0
- data/third_party/boringssl/ssl/custom_extensions.c +257 -0
- data/third_party/boringssl/ssl/d1_both.c +880 -0
- data/third_party/boringssl/ssl/d1_clnt.c +566 -0
- data/third_party/boringssl/ssl/d1_lib.c +340 -0
- data/third_party/boringssl/ssl/d1_meth.c +130 -0
- data/third_party/boringssl/ssl/d1_pkt.c +578 -0
- data/third_party/boringssl/ssl/d1_srtp.c +234 -0
- data/third_party/boringssl/ssl/d1_srvr.c +485 -0
- data/third_party/boringssl/ssl/dtls_record.c +308 -0
- data/third_party/boringssl/ssl/internal.h +1276 -0
- data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
- data/third_party/boringssl/ssl/s3_both.c +571 -0
- data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
- data/third_party/boringssl/ssl/s3_enc.c +494 -0
- data/third_party/boringssl/ssl/s3_lib.c +587 -0
- data/third_party/boringssl/ssl/s3_meth.c +166 -0
- data/third_party/boringssl/ssl/s3_pkt.c +732 -0
- data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
- data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
- data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
- data/third_party/boringssl/ssl/ssl_cert.c +539 -0
- data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
- data/third_party/boringssl/ssl/ssl_file.c +633 -0
- data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
- data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
- data/third_party/boringssl/ssl/ssl_session.c +764 -0
- data/third_party/boringssl/ssl/ssl_stat.c +591 -0
- data/third_party/boringssl/ssl/t1_enc.c +708 -0
- data/third_party/boringssl/ssl/t1_lib.c +2905 -0
- data/third_party/boringssl/ssl/test/async_bio.h +45 -0
- data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
- data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
- data/third_party/boringssl/ssl/test/test_config.h +108 -0
- data/third_party/boringssl/ssl/tls_record.c +342 -0
- data/third_party/zlib/adler32.c +179 -0
- data/third_party/zlib/compress.c +80 -0
- data/third_party/zlib/crc32.c +425 -0
- data/third_party/zlib/crc32.h +441 -0
- data/third_party/zlib/deflate.c +1967 -0
- data/third_party/zlib/deflate.h +346 -0
- data/third_party/zlib/gzclose.c +25 -0
- data/third_party/zlib/gzguts.h +209 -0
- data/third_party/zlib/gzlib.c +634 -0
- data/third_party/zlib/gzread.c +594 -0
- data/third_party/zlib/gzwrite.c +577 -0
- data/third_party/zlib/infback.c +640 -0
- data/third_party/zlib/inffast.c +340 -0
- data/third_party/zlib/inffast.h +11 -0
- data/third_party/zlib/inffixed.h +94 -0
- data/third_party/zlib/inflate.c +1512 -0
- data/third_party/zlib/inflate.h +122 -0
- data/third_party/zlib/inftrees.c +306 -0
- data/third_party/zlib/inftrees.h +62 -0
- data/third_party/zlib/trees.c +1226 -0
- data/third_party/zlib/trees.h +128 -0
- data/third_party/zlib/uncompr.c +59 -0
- data/third_party/zlib/zconf.h +511 -0
- data/third_party/zlib/zlib.h +1768 -0
- data/third_party/zlib/zutil.c +324 -0
- data/third_party/zlib/zutil.h +253 -0
- metadata +492 -25
- data/Rakefile +0 -63
- data/src/ruby/lib/grpc/grpc.so +0 -0
data/src/core/census/context.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
*
|
3
|
-
* Copyright 2015, Google Inc.
|
3
|
+
* Copyright 2015-2016, Google Inc.
|
4
4
|
* All rights reserved.
|
5
5
|
*
|
6
6
|
* Redistribution and use in source and binary forms, with or without
|
@@ -31,16 +31,500 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#include "src/core/census/context.h"
|
35
|
-
|
36
|
-
#include <string.h>
|
37
34
|
#include <grpc/census.h>
|
38
35
|
#include <grpc/support/alloc.h>
|
36
|
+
#include <grpc/support/log.h>
|
37
|
+
#include <grpc/support/port_platform.h>
|
38
|
+
#include <grpc/support/useful.h>
|
39
|
+
#include <stdbool.h>
|
40
|
+
#include <string.h>
|
41
|
+
#include "src/core/support/string.h"
|
42
|
+
|
43
|
+
// Functions in this file support the public context API, including
|
44
|
+
// encoding/decoding as part of context propagation across RPC's. The overall
|
45
|
+
// requirements (in approximate priority order) for the
|
46
|
+
// context representation:
|
47
|
+
// 1. Efficient conversion to/from wire format
|
48
|
+
// 2. Minimal bytes used on-wire
|
49
|
+
// 3. Efficient context creation
|
50
|
+
// 4. Efficient lookup of tag value for a key
|
51
|
+
// 5. Efficient iteration over tags
|
52
|
+
// 6. Minimal memory footprint
|
53
|
+
//
|
54
|
+
// Notes on tradeoffs/decisions:
|
55
|
+
// * tag includes 1 byte length of key, as well as nil-terminating byte. These
|
56
|
+
// are to aid in efficient parsing and the ability to directly return key
|
57
|
+
// strings. This is more important than saving a single byte/tag on the wire.
|
58
|
+
// * The wire encoding uses only single byte values. This eliminates the need
|
59
|
+
// to handle endian-ness conversions. It also means there is a hard upper
|
60
|
+
// limit of 255 for both CENSUS_MAX_TAG_KV_LEN and CENSUS_MAX_PROPAGATED_TAGS.
|
61
|
+
// * Keep all tag information (keys/values/flags) in a single memory buffer,
|
62
|
+
// that can be directly copied to the wire.
|
63
|
+
// * Binary tags share the same structure as, but are encoded separately from,
|
64
|
+
// non-binary tags. This is primarily because non-binary tags are far more
|
65
|
+
// likely to be repeated across multiple RPC calls, so are more efficiently
|
66
|
+
// cached and compressed in any metadata schemes.
|
67
|
+
|
68
|
+
// Structure representing a set of tags. Essentially a count of number of tags
|
69
|
+
// present, and pointer to a chunk of memory that contains the per-tag details.
|
70
|
+
struct tag_set {
|
71
|
+
int ntags; // number of tags.
|
72
|
+
int ntags_alloc; // ntags + number of deleted tags (total number of tags
|
73
|
+
// in all of kvm). This will always be == ntags, except during the process
|
74
|
+
// of building a new tag set.
|
75
|
+
size_t kvm_size; // number of bytes allocated for key/value storage.
|
76
|
+
size_t kvm_used; // number of bytes of used key/value memory
|
77
|
+
char *kvm; // key/value memory. Consists of repeated entries of:
|
78
|
+
// Offset Size Description
|
79
|
+
// 0 1 Key length, including trailing 0. (K)
|
80
|
+
// 1 1 Value length. (V)
|
81
|
+
// 2 1 Flags
|
82
|
+
// 3 K Key bytes
|
83
|
+
// 3 + K V Value bytes
|
84
|
+
//
|
85
|
+
// We refer to the first 3 entries as the 'tag header'. If extra values are
|
86
|
+
// introduced in the header, you will need to modify the TAG_HEADER_SIZE
|
87
|
+
// constant, the raw_tag structure (and everything that uses it) and the
|
88
|
+
// encode/decode functions appropriately.
|
89
|
+
};
|
90
|
+
|
91
|
+
// Number of bytes in tag header.
|
92
|
+
#define TAG_HEADER_SIZE 3 // key length (1) + value length (1) + flags (1)
|
93
|
+
// Offsets to tag header entries.
|
94
|
+
#define KEY_LEN_OFFSET 0
|
95
|
+
#define VALUE_LEN_OFFSET 1
|
96
|
+
#define FLAG_OFFSET 2
|
97
|
+
|
98
|
+
// raw_tag represents the raw-storage form of a tag in the kvm of a tag_set.
|
99
|
+
struct raw_tag {
|
100
|
+
uint8_t key_len;
|
101
|
+
uint8_t value_len;
|
102
|
+
uint8_t flags;
|
103
|
+
char *key;
|
104
|
+
char *value;
|
105
|
+
};
|
106
|
+
|
107
|
+
// Use a reserved flag bit for indication of deleted tag.
|
108
|
+
#define CENSUS_TAG_DELETED CENSUS_TAG_RESERVED
|
109
|
+
#define CENSUS_TAG_IS_DELETED(flags) (flags & CENSUS_TAG_DELETED)
|
110
|
+
|
111
|
+
// Primary (external) representation of a context. Composed of 3 underlying
|
112
|
+
// tag_set structs, one for each of the binary/printable propagated tags, and
|
113
|
+
// one for everything else. This is to efficiently support tag
|
114
|
+
// encoding/decoding.
|
115
|
+
struct census_context {
|
116
|
+
struct tag_set tags[3];
|
117
|
+
census_context_status status;
|
118
|
+
};
|
119
|
+
|
120
|
+
// Indices into the tags member of census_context
|
121
|
+
#define PROPAGATED_TAGS 0
|
122
|
+
#define PROPAGATED_BINARY_TAGS 1
|
123
|
+
#define LOCAL_TAGS 2
|
124
|
+
|
125
|
+
// Extract a raw tag given a pointer (raw) to the tag header. Allow for some
|
126
|
+
// extra bytes in the tag header (see encode/decode functions for usage: this
|
127
|
+
// allows for future expansion of the tag header).
|
128
|
+
static char *decode_tag(struct raw_tag *tag, char *header, int offset) {
|
129
|
+
tag->key_len = (uint8_t)(*header++);
|
130
|
+
tag->value_len = (uint8_t)(*header++);
|
131
|
+
tag->flags = (uint8_t)(*header++);
|
132
|
+
header += offset;
|
133
|
+
tag->key = header;
|
134
|
+
header += tag->key_len;
|
135
|
+
tag->value = header;
|
136
|
+
return header + tag->value_len;
|
137
|
+
}
|
39
138
|
|
40
|
-
|
139
|
+
// Make a copy (in 'to') of an existing tag_set.
|
140
|
+
static void tag_set_copy(struct tag_set *to, const struct tag_set *from) {
|
141
|
+
memcpy(to, from, sizeof(struct tag_set));
|
142
|
+
to->kvm = gpr_malloc(to->kvm_size);
|
143
|
+
memcpy(to->kvm, from->kvm, from->kvm_used);
|
144
|
+
}
|
145
|
+
|
146
|
+
// Delete a tag from a tag_set, if it exists (returns true if it did).
|
147
|
+
static bool tag_set_delete_tag(struct tag_set *tags, const char *key,
|
148
|
+
size_t key_len) {
|
149
|
+
char *kvp = tags->kvm;
|
150
|
+
for (int i = 0; i < tags->ntags_alloc; i++) {
|
151
|
+
uint8_t *flags = (uint8_t *)(kvp + FLAG_OFFSET);
|
152
|
+
struct raw_tag tag;
|
153
|
+
kvp = decode_tag(&tag, kvp, 0);
|
154
|
+
if (CENSUS_TAG_IS_DELETED(tag.flags)) continue;
|
155
|
+
if ((key_len == tag.key_len) && (memcmp(key, tag.key, key_len) == 0)) {
|
156
|
+
*flags |= CENSUS_TAG_DELETED;
|
157
|
+
tags->ntags--;
|
158
|
+
return true;
|
159
|
+
}
|
160
|
+
}
|
161
|
+
return false;
|
162
|
+
}
|
163
|
+
|
164
|
+
// Delete a tag from a context, return true if it existed.
|
165
|
+
static bool context_delete_tag(census_context *context, const census_tag *tag,
|
166
|
+
size_t key_len) {
|
167
|
+
return (
|
168
|
+
tag_set_delete_tag(&context->tags[LOCAL_TAGS], tag->key, key_len) ||
|
169
|
+
tag_set_delete_tag(&context->tags[PROPAGATED_TAGS], tag->key, key_len) ||
|
170
|
+
tag_set_delete_tag(&context->tags[PROPAGATED_BINARY_TAGS], tag->key,
|
171
|
+
key_len));
|
172
|
+
}
|
173
|
+
|
174
|
+
// Add a tag to a tag_set. Return true on success, false if the tag could
|
175
|
+
// not be added because of constraints on tag set size. This function should
|
176
|
+
// not be called if the tag may already exist (in a non-deleted state) in
|
177
|
+
// the tag_set, as that would result in two tags with the same key.
|
178
|
+
static bool tag_set_add_tag(struct tag_set *tags, const census_tag *tag,
|
179
|
+
size_t key_len) {
|
180
|
+
if (tags->ntags == CENSUS_MAX_PROPAGATED_TAGS) {
|
181
|
+
return false;
|
182
|
+
}
|
183
|
+
const size_t tag_size = key_len + tag->value_len + TAG_HEADER_SIZE;
|
184
|
+
if (tags->kvm_used + tag_size > tags->kvm_size) {
|
185
|
+
// allocate new memory if needed
|
186
|
+
tags->kvm_size += 2 * CENSUS_MAX_TAG_KV_LEN + TAG_HEADER_SIZE;
|
187
|
+
char *new_kvm = gpr_malloc(tags->kvm_size);
|
188
|
+
memcpy(new_kvm, tags->kvm, tags->kvm_used);
|
189
|
+
gpr_free(tags->kvm);
|
190
|
+
tags->kvm = new_kvm;
|
191
|
+
}
|
192
|
+
char *kvp = tags->kvm + tags->kvm_used;
|
193
|
+
*kvp++ = (char)key_len;
|
194
|
+
*kvp++ = (char)tag->value_len;
|
195
|
+
// ensure reserved flags are not used.
|
196
|
+
*kvp++ = (char)(tag->flags & (CENSUS_TAG_PROPAGATE | CENSUS_TAG_STATS |
|
197
|
+
CENSUS_TAG_BINARY));
|
198
|
+
memcpy(kvp, tag->key, key_len);
|
199
|
+
kvp += key_len;
|
200
|
+
memcpy(kvp, tag->value, tag->value_len);
|
201
|
+
tags->kvm_used += tag_size;
|
202
|
+
tags->ntags++;
|
203
|
+
tags->ntags_alloc++;
|
204
|
+
return true;
|
205
|
+
}
|
206
|
+
|
207
|
+
// Add/modify/delete a tag to/in a context. Caller must validate that tag key
|
208
|
+
// etc. are valid.
|
209
|
+
static void context_modify_tag(census_context *context, const census_tag *tag,
|
210
|
+
size_t key_len) {
|
211
|
+
// First delete the tag if it is already present.
|
212
|
+
bool deleted = context_delete_tag(context, tag, key_len);
|
213
|
+
// Determine if we need to add it back.
|
214
|
+
bool call_add = tag->value != NULL && tag->value_len != 0;
|
215
|
+
bool added = false;
|
216
|
+
if (call_add) {
|
217
|
+
if (CENSUS_TAG_IS_PROPAGATED(tag->flags)) {
|
218
|
+
if (CENSUS_TAG_IS_BINARY(tag->flags)) {
|
219
|
+
added = tag_set_add_tag(&context->tags[PROPAGATED_BINARY_TAGS], tag,
|
220
|
+
key_len);
|
221
|
+
} else {
|
222
|
+
added = tag_set_add_tag(&context->tags[PROPAGATED_TAGS], tag, key_len);
|
223
|
+
}
|
224
|
+
} else {
|
225
|
+
added = tag_set_add_tag(&context->tags[LOCAL_TAGS], tag, key_len);
|
226
|
+
}
|
227
|
+
}
|
228
|
+
if (deleted) {
|
229
|
+
if (call_add) {
|
230
|
+
context->status.n_modified_tags++;
|
231
|
+
} else {
|
232
|
+
context->status.n_deleted_tags++;
|
233
|
+
}
|
234
|
+
} else {
|
235
|
+
if (added) {
|
236
|
+
context->status.n_added_tags++;
|
237
|
+
} else {
|
238
|
+
context->status.n_ignored_tags++;
|
239
|
+
}
|
240
|
+
}
|
241
|
+
}
|
242
|
+
|
243
|
+
// Remove memory used for deleted tags from a tag set. Basic algorithm:
|
244
|
+
// 1) Walk through tag set to find first deleted tag. Record where it is.
|
245
|
+
// 2) Find the next not-deleted tag. Copy all of kvm from there to the end
|
246
|
+
// "over" the deleted tags
|
247
|
+
// 3) repeat #1 and #2 until we have seen all tags
|
248
|
+
// 4) if we are still looking for a not-deleted tag, then all the end portion
|
249
|
+
// of the kvm is deleted. Just reduce the used amount of memory by the
|
250
|
+
// appropriate amount.
|
251
|
+
static void tag_set_flatten(struct tag_set *tags) {
|
252
|
+
if (tags->ntags == tags->ntags_alloc) return;
|
253
|
+
bool found_deleted = false; // found a deleted tag.
|
254
|
+
char *kvp = tags->kvm;
|
255
|
+
char *dbase = NULL; // record location of deleted tag
|
256
|
+
for (int i = 0; i < tags->ntags_alloc; i++) {
|
257
|
+
struct raw_tag tag;
|
258
|
+
char *next_kvp = decode_tag(&tag, kvp, 0);
|
259
|
+
if (found_deleted) {
|
260
|
+
if (!CENSUS_TAG_IS_DELETED(tag.flags)) {
|
261
|
+
ptrdiff_t reduce = kvp - dbase; // #bytes in deleted tags
|
262
|
+
GPR_ASSERT(reduce > 0);
|
263
|
+
ptrdiff_t copy_size = tags->kvm + tags->kvm_used - kvp;
|
264
|
+
GPR_ASSERT(copy_size > 0);
|
265
|
+
memmove(dbase, kvp, (size_t)copy_size);
|
266
|
+
tags->kvm_used -= (size_t)reduce;
|
267
|
+
next_kvp -= reduce;
|
268
|
+
found_deleted = false;
|
269
|
+
}
|
270
|
+
} else {
|
271
|
+
if (CENSUS_TAG_IS_DELETED(tag.flags)) {
|
272
|
+
dbase = kvp;
|
273
|
+
found_deleted = true;
|
274
|
+
}
|
275
|
+
}
|
276
|
+
kvp = next_kvp;
|
277
|
+
}
|
278
|
+
if (found_deleted) {
|
279
|
+
GPR_ASSERT(dbase > tags->kvm);
|
280
|
+
tags->kvm_used = (size_t)(dbase - tags->kvm);
|
281
|
+
}
|
282
|
+
tags->ntags_alloc = tags->ntags;
|
283
|
+
}
|
41
284
|
|
42
|
-
|
43
|
-
|
44
|
-
|
285
|
+
census_context *census_context_create(const census_context *base,
|
286
|
+
const census_tag *tags, int ntags,
|
287
|
+
census_context_status const **status) {
|
288
|
+
census_context *context = gpr_malloc(sizeof(census_context));
|
289
|
+
// If we are given a base, copy it into our new tag set. Otherwise set it
|
290
|
+
// to zero/NULL everything.
|
291
|
+
if (base == NULL) {
|
292
|
+
memset(context, 0, sizeof(census_context));
|
293
|
+
} else {
|
294
|
+
tag_set_copy(&context->tags[PROPAGATED_TAGS], &base->tags[PROPAGATED_TAGS]);
|
295
|
+
tag_set_copy(&context->tags[PROPAGATED_BINARY_TAGS],
|
296
|
+
&base->tags[PROPAGATED_BINARY_TAGS]);
|
297
|
+
tag_set_copy(&context->tags[LOCAL_TAGS], &base->tags[LOCAL_TAGS]);
|
298
|
+
memset(&context->status, 0, sizeof(context->status));
|
299
|
+
}
|
300
|
+
// Walk over the additional tags and, for those that aren't invalid, modify
|
301
|
+
// the context to add/replace/delete as required.
|
302
|
+
for (int i = 0; i < ntags; i++) {
|
303
|
+
const census_tag *tag = &tags[i];
|
304
|
+
size_t key_len = strlen(tag->key) + 1;
|
305
|
+
// ignore the tag if it is too long/short.
|
306
|
+
if (key_len != 1 && key_len <= CENSUS_MAX_TAG_KV_LEN &&
|
307
|
+
tag->value_len <= CENSUS_MAX_TAG_KV_LEN) {
|
308
|
+
context_modify_tag(context, tag, key_len);
|
309
|
+
} else {
|
310
|
+
context->status.n_invalid_tags++;
|
311
|
+
}
|
312
|
+
}
|
313
|
+
// Remove any deleted tags, update status if needed, and return.
|
314
|
+
tag_set_flatten(&context->tags[PROPAGATED_TAGS]);
|
315
|
+
tag_set_flatten(&context->tags[PROPAGATED_BINARY_TAGS]);
|
316
|
+
tag_set_flatten(&context->tags[LOCAL_TAGS]);
|
317
|
+
context->status.n_propagated_tags = context->tags[PROPAGATED_TAGS].ntags;
|
318
|
+
context->status.n_propagated_binary_tags =
|
319
|
+
context->tags[PROPAGATED_BINARY_TAGS].ntags;
|
320
|
+
context->status.n_local_tags = context->tags[LOCAL_TAGS].ntags;
|
321
|
+
if (status) {
|
322
|
+
*status = &context->status;
|
323
|
+
}
|
324
|
+
return context;
|
325
|
+
}
|
326
|
+
|
327
|
+
const census_context_status *census_context_get_status(
|
328
|
+
const census_context *context) {
|
329
|
+
return &context->status;
|
330
|
+
}
|
331
|
+
|
332
|
+
void census_context_destroy(census_context *context) {
|
333
|
+
gpr_free(context->tags[PROPAGATED_TAGS].kvm);
|
334
|
+
gpr_free(context->tags[PROPAGATED_BINARY_TAGS].kvm);
|
335
|
+
gpr_free(context->tags[LOCAL_TAGS].kvm);
|
336
|
+
gpr_free(context);
|
337
|
+
}
|
338
|
+
|
339
|
+
void census_context_initialize_iterator(const census_context *context,
|
340
|
+
census_context_iterator *iterator) {
|
341
|
+
iterator->context = context;
|
342
|
+
iterator->index = 0;
|
343
|
+
if (context->tags[PROPAGATED_TAGS].ntags != 0) {
|
344
|
+
iterator->base = PROPAGATED_TAGS;
|
345
|
+
iterator->kvm = context->tags[PROPAGATED_TAGS].kvm;
|
346
|
+
} else if (context->tags[PROPAGATED_BINARY_TAGS].ntags != 0) {
|
347
|
+
iterator->base = PROPAGATED_BINARY_TAGS;
|
348
|
+
iterator->kvm = context->tags[PROPAGATED_BINARY_TAGS].kvm;
|
349
|
+
} else if (context->tags[LOCAL_TAGS].ntags != 0) {
|
350
|
+
iterator->base = LOCAL_TAGS;
|
351
|
+
iterator->kvm = context->tags[LOCAL_TAGS].kvm;
|
352
|
+
} else {
|
353
|
+
iterator->base = -1;
|
354
|
+
}
|
355
|
+
}
|
356
|
+
|
357
|
+
int census_context_next_tag(census_context_iterator *iterator,
|
358
|
+
census_tag *tag) {
|
359
|
+
if (iterator->base < 0) {
|
360
|
+
return 0;
|
361
|
+
}
|
362
|
+
struct raw_tag raw;
|
363
|
+
iterator->kvm = decode_tag(&raw, iterator->kvm, 0);
|
364
|
+
tag->key = raw.key;
|
365
|
+
tag->value = raw.value;
|
366
|
+
tag->value_len = raw.value_len;
|
367
|
+
tag->flags = raw.flags;
|
368
|
+
if (++iterator->index == iterator->context->tags[iterator->base].ntags) {
|
369
|
+
do {
|
370
|
+
if (iterator->base == LOCAL_TAGS) {
|
371
|
+
iterator->base = -1;
|
372
|
+
return 1;
|
373
|
+
}
|
374
|
+
} while (iterator->context->tags[++iterator->base].ntags == 0);
|
375
|
+
iterator->index = 0;
|
376
|
+
iterator->kvm = iterator->context->tags[iterator->base].kvm;
|
377
|
+
}
|
378
|
+
return 1;
|
379
|
+
}
|
380
|
+
|
381
|
+
// Find a tag in a tag_set by key. Return true if found, false otherwise.
|
382
|
+
static bool tag_set_get_tag(const struct tag_set *tags, const char *key,
|
383
|
+
size_t key_len, census_tag *tag) {
|
384
|
+
char *kvp = tags->kvm;
|
385
|
+
for (int i = 0; i < tags->ntags; i++) {
|
386
|
+
struct raw_tag raw;
|
387
|
+
kvp = decode_tag(&raw, kvp, 0);
|
388
|
+
if (key_len == raw.key_len && memcmp(raw.key, key, key_len) == 0) {
|
389
|
+
tag->key = raw.key;
|
390
|
+
tag->value = raw.value;
|
391
|
+
tag->value_len = raw.value_len;
|
392
|
+
tag->flags = raw.flags;
|
393
|
+
return true;
|
394
|
+
}
|
395
|
+
}
|
396
|
+
return false;
|
397
|
+
}
|
398
|
+
|
399
|
+
int census_context_get_tag(const census_context *context, const char *key,
|
400
|
+
census_tag *tag) {
|
401
|
+
size_t key_len = strlen(key) + 1;
|
402
|
+
if (key_len == 1) {
|
403
|
+
return 0;
|
404
|
+
}
|
405
|
+
if (tag_set_get_tag(&context->tags[PROPAGATED_TAGS], key, key_len, tag) ||
|
406
|
+
tag_set_get_tag(&context->tags[PROPAGATED_BINARY_TAGS], key, key_len,
|
407
|
+
tag) ||
|
408
|
+
tag_set_get_tag(&context->tags[LOCAL_TAGS], key, key_len, tag)) {
|
409
|
+
return 1;
|
410
|
+
}
|
45
411
|
return 0;
|
46
412
|
}
|
413
|
+
|
414
|
+
// Context encoding and decoding functions.
|
415
|
+
//
|
416
|
+
// Wire format for tag_set's on the wire:
|
417
|
+
//
|
418
|
+
// First, a tag set header:
|
419
|
+
//
|
420
|
+
// offset bytes description
|
421
|
+
// 0 1 version number
|
422
|
+
// 1 1 number of bytes in this header. This allows for future
|
423
|
+
// expansion.
|
424
|
+
// 2 1 number of bytes in each tag header.
|
425
|
+
// 3 1 ntags value from tag set.
|
426
|
+
//
|
427
|
+
// This is followed by the key/value memory from struct tag_set.
|
428
|
+
|
429
|
+
#define ENCODED_VERSION 0 // Version number
|
430
|
+
#define ENCODED_HEADER_SIZE 4 // size of tag set header
|
431
|
+
|
432
|
+
// Encode a tag set. Returns 0 if buffer is too small.
|
433
|
+
static size_t tag_set_encode(const struct tag_set *tags, char *buffer,
|
434
|
+
size_t buf_size) {
|
435
|
+
if (buf_size < ENCODED_HEADER_SIZE + tags->kvm_used) {
|
436
|
+
return 0;
|
437
|
+
}
|
438
|
+
buf_size -= ENCODED_HEADER_SIZE;
|
439
|
+
*buffer++ = (char)ENCODED_VERSION;
|
440
|
+
*buffer++ = (char)ENCODED_HEADER_SIZE;
|
441
|
+
*buffer++ = (char)TAG_HEADER_SIZE;
|
442
|
+
*buffer++ = (char)tags->ntags;
|
443
|
+
if (tags->ntags == 0) {
|
444
|
+
return ENCODED_HEADER_SIZE;
|
445
|
+
}
|
446
|
+
memcpy(buffer, tags->kvm, tags->kvm_used);
|
447
|
+
return ENCODED_HEADER_SIZE + tags->kvm_used;
|
448
|
+
}
|
449
|
+
|
450
|
+
char *census_context_encode(const census_context *context, char *buffer,
|
451
|
+
size_t buf_size, size_t *print_buf_size,
|
452
|
+
size_t *bin_buf_size) {
|
453
|
+
*print_buf_size =
|
454
|
+
tag_set_encode(&context->tags[PROPAGATED_TAGS], buffer, buf_size);
|
455
|
+
if (*print_buf_size == 0) {
|
456
|
+
return NULL;
|
457
|
+
}
|
458
|
+
char *b_buffer = buffer + *print_buf_size;
|
459
|
+
*bin_buf_size = tag_set_encode(&context->tags[PROPAGATED_BINARY_TAGS],
|
460
|
+
b_buffer, buf_size - *print_buf_size);
|
461
|
+
if (*bin_buf_size == 0) {
|
462
|
+
return NULL;
|
463
|
+
}
|
464
|
+
return b_buffer;
|
465
|
+
}
|
466
|
+
|
467
|
+
// Decode a tag set.
|
468
|
+
static void tag_set_decode(struct tag_set *tags, const char *buffer,
|
469
|
+
size_t size) {
|
470
|
+
uint8_t version = (uint8_t)(*buffer++);
|
471
|
+
uint8_t header_size = (uint8_t)(*buffer++);
|
472
|
+
uint8_t tag_header_size = (uint8_t)(*buffer++);
|
473
|
+
tags->ntags = tags->ntags_alloc = (int)(*buffer++);
|
474
|
+
if (tags->ntags == 0) {
|
475
|
+
tags->ntags_alloc = 0;
|
476
|
+
tags->kvm_size = 0;
|
477
|
+
tags->kvm_used = 0;
|
478
|
+
tags->kvm = NULL;
|
479
|
+
return;
|
480
|
+
}
|
481
|
+
if (header_size != ENCODED_HEADER_SIZE) {
|
482
|
+
GPR_ASSERT(version != ENCODED_VERSION);
|
483
|
+
GPR_ASSERT(ENCODED_HEADER_SIZE < header_size);
|
484
|
+
buffer += (header_size - ENCODED_HEADER_SIZE);
|
485
|
+
}
|
486
|
+
tags->kvm_used = size - header_size;
|
487
|
+
tags->kvm_size = tags->kvm_used + CENSUS_MAX_TAG_KV_LEN;
|
488
|
+
tags->kvm = gpr_malloc(tags->kvm_size);
|
489
|
+
if (tag_header_size != TAG_HEADER_SIZE) {
|
490
|
+
// something new in the tag information. I don't understand it, so
|
491
|
+
// don't copy it over.
|
492
|
+
GPR_ASSERT(version != ENCODED_VERSION);
|
493
|
+
GPR_ASSERT(tag_header_size > TAG_HEADER_SIZE);
|
494
|
+
char *kvp = tags->kvm;
|
495
|
+
for (int i = 0; i < tags->ntags; i++) {
|
496
|
+
memcpy(kvp, buffer, TAG_HEADER_SIZE);
|
497
|
+
kvp += header_size;
|
498
|
+
struct raw_tag raw;
|
499
|
+
buffer =
|
500
|
+
decode_tag(&raw, (char *)buffer, tag_header_size - TAG_HEADER_SIZE);
|
501
|
+
memcpy(kvp, raw.key, (size_t)raw.key_len + raw.value_len);
|
502
|
+
kvp += raw.key_len + raw.value_len;
|
503
|
+
}
|
504
|
+
} else {
|
505
|
+
memcpy(tags->kvm, buffer, tags->kvm_used);
|
506
|
+
}
|
507
|
+
}
|
508
|
+
|
509
|
+
census_context *census_context_decode(const char *buffer, size_t size,
|
510
|
+
const char *bin_buffer, size_t bin_size) {
|
511
|
+
census_context *context = gpr_malloc(sizeof(census_context));
|
512
|
+
memset(&context->tags[LOCAL_TAGS], 0, sizeof(struct tag_set));
|
513
|
+
if (buffer == NULL) {
|
514
|
+
memset(&context->tags[PROPAGATED_TAGS], 0, sizeof(struct tag_set));
|
515
|
+
} else {
|
516
|
+
tag_set_decode(&context->tags[PROPAGATED_TAGS], buffer, size);
|
517
|
+
}
|
518
|
+
if (bin_buffer == NULL) {
|
519
|
+
memset(&context->tags[PROPAGATED_BINARY_TAGS], 0, sizeof(struct tag_set));
|
520
|
+
} else {
|
521
|
+
tag_set_decode(&context->tags[PROPAGATED_BINARY_TAGS], bin_buffer,
|
522
|
+
bin_size);
|
523
|
+
}
|
524
|
+
memset(&context->status, 0, sizeof(context->status));
|
525
|
+
context->status.n_propagated_tags = context->tags[PROPAGATED_TAGS].ntags;
|
526
|
+
context->status.n_propagated_binary_tags =
|
527
|
+
context->tags[PROPAGATED_BINARY_TAGS].ntags;
|
528
|
+
// TODO(aveitch): check that BINARY flag is correct for each type.
|
529
|
+
return context;
|
530
|
+
}
|