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.

Files changed (673) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +5707 -22222
  3. data/include/grpc/byte_buffer.h +2 -83
  4. data/include/grpc/census.h +191 -121
  5. data/include/grpc/compression.h +14 -38
  6. data/include/grpc/grpc.h +88 -434
  7. data/include/grpc/grpc_security.h +76 -46
  8. data/include/grpc/grpc_zookeeper.h +1 -1
  9. data/include/grpc/impl/codegen/alloc.h +74 -0
  10. data/include/grpc/impl/codegen/atm.h +92 -0
  11. data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
  12. data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
  13. data/include/grpc/impl/codegen/atm_win32.h +125 -0
  14. data/include/grpc/impl/codegen/byte_buffer.h +121 -0
  15. data/include/grpc/impl/codegen/compression_types.h +73 -0
  16. data/include/grpc/impl/codegen/connectivity_state.h +59 -0
  17. data/include/grpc/impl/codegen/grpc_types.h +373 -0
  18. data/include/grpc/impl/codegen/log.h +110 -0
  19. data/include/grpc/impl/codegen/port_platform.h +362 -0
  20. data/include/grpc/impl/codegen/propagation_bits.h +67 -0
  21. data/include/grpc/impl/codegen/slice.h +182 -0
  22. data/include/grpc/impl/codegen/slice_buffer.h +105 -0
  23. data/include/grpc/impl/codegen/status.h +163 -0
  24. data/include/grpc/impl/codegen/sync.h +316 -0
  25. data/include/grpc/impl/codegen/sync_generic.h +55 -0
  26. data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
  27. data/include/grpc/impl/codegen/sync_win32.h +49 -0
  28. data/include/grpc/impl/codegen/time.h +132 -0
  29. data/include/grpc/status.h +2 -126
  30. data/include/grpc/support/alloc.h +2 -35
  31. data/include/grpc/support/atm.h +2 -55
  32. data/include/grpc/support/atm_gcc_atomic.h +5 -38
  33. data/include/grpc/support/atm_gcc_sync.h +2 -50
  34. data/include/grpc/support/atm_win32.h +2 -88
  35. data/include/grpc/support/avl.h +7 -7
  36. data/include/grpc/support/cmdline.h +15 -13
  37. data/include/grpc/support/cpu.h +5 -3
  38. data/include/grpc/support/histogram.h +23 -20
  39. data/include/grpc/support/host_port.h +5 -3
  40. data/include/grpc/support/log.h +2 -71
  41. data/include/grpc/support/log_win32.h +2 -2
  42. data/include/grpc/support/port_platform.h +2 -319
  43. data/include/grpc/support/slice.h +2 -145
  44. data/include/grpc/support/slice_buffer.h +2 -65
  45. data/include/grpc/support/string_util.h +3 -3
  46. data/include/grpc/support/subprocess.h +8 -6
  47. data/include/grpc/support/sync.h +2 -278
  48. data/include/grpc/support/sync_generic.h +2 -18
  49. data/include/grpc/support/sync_posix.h +2 -10
  50. data/include/grpc/support/sync_win32.h +2 -12
  51. data/include/grpc/support/thd.h +11 -11
  52. data/include/grpc/support/time.h +2 -91
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +1 -1
  55. data/include/grpc/support/tls_msvc.h +1 -1
  56. data/include/grpc/support/tls_pthread.h +2 -2
  57. data/src/boringssl/err_data.c +1252 -0
  58. data/src/core/census/context.c +492 -8
  59. data/src/core/census/grpc_filter.c +3 -3
  60. data/src/core/census/initialize.c +4 -7
  61. data/src/core/census/operation.c +2 -2
  62. data/src/core/census/placeholders.c +109 -0
  63. data/src/core/census/rpc_metric_id.h +6 -6
  64. data/src/core/census/tracing.c +1 -1
  65. data/src/core/channel/channel_args.c +4 -3
  66. data/src/core/channel/channel_stack.c +1 -1
  67. data/src/core/channel/client_channel.c +18 -14
  68. data/src/core/channel/client_uchannel.c +3 -3
  69. data/src/core/channel/compress_filter.c +8 -8
  70. data/src/core/channel/http_client_filter.c +2 -2
  71. data/src/core/channel/http_server_filter.c +9 -9
  72. data/src/core/channel/subchannel_call_holder.c +12 -10
  73. data/src/core/client_config/lb_policies/pick_first.c +49 -31
  74. data/src/core/client_config/lb_policies/round_robin.c +7 -7
  75. data/src/core/client_config/resolvers/dns_resolver.c +3 -3
  76. data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
  77. data/src/core/client_config/subchannel.c +36 -25
  78. data/src/core/compression/algorithm.c +3 -3
  79. data/src/core/httpcli/format_request.c +1 -1
  80. data/src/core/httpcli/httpcli.c +5 -5
  81. data/src/core/httpcli/httpcli_security_connector.c +2 -3
  82. data/src/core/httpcli/parser.c +7 -7
  83. data/src/core/httpcli/parser.h +1 -1
  84. data/src/core/iomgr/closure.c +7 -7
  85. data/src/core/iomgr/closure.h +6 -5
  86. data/src/core/iomgr/exec_ctx.c +12 -8
  87. data/src/core/iomgr/exec_ctx.h +12 -5
  88. data/src/core/iomgr/executor.c +4 -4
  89. data/src/core/iomgr/executor.h +2 -2
  90. data/src/core/iomgr/fd_posix.c +28 -17
  91. data/src/core/iomgr/fd_posix.h +7 -4
  92. data/src/core/iomgr/iocp_windows.c +6 -8
  93. data/src/core/iomgr/pollset_multipoller_with_epoll.c +70 -5
  94. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +4 -2
  95. data/src/core/iomgr/pollset_posix.c +15 -15
  96. data/src/core/iomgr/pollset_posix.h +4 -2
  97. data/src/core/iomgr/pollset_windows.c +3 -12
  98. data/src/core/iomgr/resolve_address_posix.c +2 -2
  99. data/src/core/iomgr/resolve_address_windows.c +2 -2
  100. data/src/core/iomgr/sockaddr_utils.c +6 -6
  101. data/src/core/iomgr/sockaddr_win32.h +1 -6
  102. data/src/core/iomgr/tcp_client_posix.c +7 -7
  103. data/src/core/iomgr/tcp_client_windows.c +4 -4
  104. data/src/core/iomgr/tcp_posix.c +14 -8
  105. data/src/core/iomgr/tcp_posix.h +7 -1
  106. data/src/core/iomgr/tcp_server.h +40 -20
  107. data/src/core/iomgr/tcp_server_posix.c +106 -49
  108. data/src/core/iomgr/tcp_server_windows.c +98 -49
  109. data/src/core/iomgr/tcp_windows.c +11 -15
  110. data/src/core/iomgr/timer.c +8 -8
  111. data/src/core/iomgr/timer.h +1 -1
  112. data/src/core/iomgr/timer_heap.c +10 -10
  113. data/src/core/iomgr/timer_heap.h +2 -2
  114. data/src/core/iomgr/udp_server.c +2 -12
  115. data/src/core/iomgr/udp_server.h +1 -9
  116. data/src/core/iomgr/workqueue.h +2 -4
  117. data/src/core/iomgr/workqueue_posix.c +3 -3
  118. data/src/core/json/json_reader.c +11 -12
  119. data/src/core/json/json_reader.h +4 -4
  120. data/src/core/json/json_string.c +19 -19
  121. data/src/core/json/json_writer.c +7 -9
  122. data/src/core/profiling/basic_timers.c +1 -1
  123. data/src/core/security/base64.c +9 -9
  124. data/src/core/security/client_auth_filter.c +4 -4
  125. data/src/core/security/credentials.c +5 -5
  126. data/src/core/security/google_default_credentials.c +3 -3
  127. data/src/core/security/handshake.c +6 -5
  128. data/src/core/security/json_token.c +13 -7
  129. data/src/core/security/jwt_verifier.c +3 -2
  130. data/src/core/security/secure_endpoint.c +16 -16
  131. data/src/core/security/security_connector.c +47 -17
  132. data/src/core/security/security_connector.h +5 -5
  133. data/src/core/security/server_auth_filter.c +3 -3
  134. data/src/core/security/server_secure_chttp2.c +30 -31
  135. data/src/core/statistics/census_interface.h +2 -2
  136. data/src/core/statistics/census_rpc_stats.h +3 -3
  137. data/src/core/support/alloc.c +1 -1
  138. data/src/core/support/cpu_posix.c +2 -2
  139. data/src/core/support/env_linux.c +12 -2
  140. data/src/core/support/env_win32.c +15 -7
  141. data/src/core/support/histogram.c +5 -5
  142. data/src/core/support/log_posix.c +1 -1
  143. data/src/core/support/log_win32.c +4 -3
  144. data/src/core/support/murmur_hash.c +11 -11
  145. data/src/core/support/murmur_hash.h +1 -1
  146. data/src/core/support/slice.c +11 -11
  147. data/src/core/support/slice_buffer.c +6 -6
  148. data/src/core/support/stack_lockfree.c +20 -10
  149. data/src/core/support/string.c +15 -15
  150. data/src/core/support/string.h +5 -5
  151. data/src/core/support/string_win32.c +5 -5
  152. data/src/core/support/subprocess_windows.c +141 -0
  153. data/src/core/support/sync.c +4 -4
  154. data/src/core/support/sync_posix.c +2 -2
  155. data/src/core/support/sync_win32.c +10 -5
  156. data/src/core/support/time.c +29 -29
  157. data/src/core/support/time_posix.c +15 -6
  158. data/src/core/support/time_precise.c +2 -2
  159. data/src/core/support/time_win32.c +18 -9
  160. data/src/core/support/tls_pthread.c +1 -1
  161. data/src/core/support/wrap_memcpy.c +53 -0
  162. data/src/core/surface/alarm.c +83 -0
  163. data/src/core/surface/byte_buffer_reader.c +1 -1
  164. data/src/core/surface/call.c +78 -69
  165. data/src/core/surface/call.h +2 -2
  166. data/src/core/surface/call_test_only.h +2 -2
  167. data/src/core/surface/channel.c +9 -9
  168. data/src/core/surface/channel.h +1 -1
  169. data/src/core/surface/channel_connectivity.c +3 -3
  170. data/src/core/surface/channel_create.c +3 -3
  171. data/src/core/surface/channel_ping.c +2 -2
  172. data/src/core/surface/completion_queue.c +11 -12
  173. data/src/core/surface/completion_queue.h +1 -1
  174. data/src/core/surface/init.c +7 -5
  175. data/src/core/surface/lame_client.c +3 -3
  176. data/src/core/surface/secure_channel_create.c +3 -3
  177. data/src/core/surface/server.c +28 -28
  178. data/src/core/surface/server_chttp2.c +8 -8
  179. data/src/core/surface/server_create.c +1 -4
  180. data/src/core/surface/validate_metadata.c +3 -3
  181. data/src/core/surface/version.c +2 -2
  182. data/src/core/transport/byte_stream.c +8 -6
  183. data/src/core/transport/byte_stream.h +6 -5
  184. data/src/core/transport/chttp2/bin_encoder.c +29 -29
  185. data/src/core/transport/chttp2/frame_data.c +29 -26
  186. data/src/core/transport/chttp2/frame_data.h +6 -6
  187. data/src/core/transport/chttp2/frame_goaway.c +30 -30
  188. data/src/core/transport/chttp2/frame_goaway.h +6 -6
  189. data/src/core/transport/chttp2/frame_ping.c +6 -6
  190. data/src/core/transport/chttp2/frame_ping.h +5 -5
  191. data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
  192. data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
  193. data/src/core/transport/chttp2/frame_settings.c +30 -30
  194. data/src/core/transport/chttp2/frame_settings.h +13 -13
  195. data/src/core/transport/chttp2/frame_window_update.c +17 -18
  196. data/src/core/transport/chttp2/frame_window_update.h +5 -7
  197. data/src/core/transport/chttp2/hpack_encoder.c +69 -73
  198. data/src/core/transport/chttp2/hpack_encoder.h +16 -16
  199. data/src/core/transport/chttp2/hpack_parser.c +167 -167
  200. data/src/core/transport/chttp2/hpack_parser.h +16 -16
  201. data/src/core/transport/chttp2/hpack_table.c +13 -13
  202. data/src/core/transport/chttp2/hpack_table.h +11 -11
  203. data/src/core/transport/chttp2/internal.h +97 -86
  204. data/src/core/transport/chttp2/parsing.c +25 -25
  205. data/src/core/transport/chttp2/stream_lists.c +26 -3
  206. data/src/core/transport/chttp2/stream_map.c +13 -14
  207. data/src/core/transport/chttp2/stream_map.h +6 -7
  208. data/src/core/transport/chttp2/timeout_encoding.c +19 -16
  209. data/src/core/transport/chttp2/varint.c +8 -9
  210. data/src/core/transport/chttp2/varint.h +7 -8
  211. data/src/core/transport/chttp2/writing.c +26 -23
  212. data/src/core/transport/chttp2_transport.c +133 -92
  213. data/src/core/transport/connectivity_state.c +6 -6
  214. data/src/core/transport/metadata.c +18 -18
  215. data/src/core/transport/metadata.h +5 -5
  216. data/src/core/transport/static_metadata.c +15 -16
  217. data/src/core/transport/static_metadata.h +5 -5
  218. data/src/core/transport/transport.c +5 -5
  219. data/src/core/transport/transport.h +14 -1
  220. data/src/core/tsi/fake_transport_security.c +7 -7
  221. data/src/core/tsi/ssl_transport_security.c +6 -4
  222. data/src/core/tsi/ssl_types.h +55 -0
  223. data/src/ruby/ext/grpc/extconf.rb +51 -14
  224. data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
  225. data/src/ruby/ext/grpc/rb_call.c +6 -3
  226. data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
  227. data/src/ruby/ext/grpc/rb_channel.c +4 -2
  228. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  229. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
  230. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
  231. data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
  232. data/src/ruby/ext/grpc/rb_grpc.c +11 -3
  233. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
  234. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
  235. data/src/ruby/ext/grpc/rb_loader.c +72 -0
  236. data/src/ruby/ext/grpc/rb_loader.h +40 -0
  237. data/src/ruby/ext/grpc/rb_server.c +3 -1
  238. data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
  239. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  240. data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
  241. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  242. data/src/ruby/lib/grpc/grpc.rb +34 -0
  243. data/src/ruby/lib/grpc/version.rb +1 -1
  244. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  245. data/third_party/boringssl/crypto/aes/aes.c +1142 -0
  246. data/third_party/boringssl/crypto/aes/internal.h +87 -0
  247. data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
  248. data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
  249. data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
  250. data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
  251. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
  252. data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
  253. data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
  254. data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
  255. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
  256. data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
  257. data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
  258. data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
  259. data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
  260. data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
  261. data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
  262. data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
  263. data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
  264. data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
  265. data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
  266. data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
  267. data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
  268. data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
  269. data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
  270. data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
  271. data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
  272. data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
  273. data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
  274. data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
  275. data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
  276. data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
  277. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
  278. data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
  279. data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
  280. data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
  281. data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
  282. data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
  283. data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
  284. data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
  285. data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
  286. data/third_party/boringssl/crypto/base64/base64.c +478 -0
  287. data/third_party/boringssl/crypto/bio/bio.c +608 -0
  288. data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
  289. data/third_party/boringssl/crypto/bio/buffer.c +496 -0
  290. data/third_party/boringssl/crypto/bio/connect.c +544 -0
  291. data/third_party/boringssl/crypto/bio/fd.c +270 -0
  292. data/third_party/boringssl/crypto/bio/file.c +349 -0
  293. data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
  294. data/third_party/boringssl/crypto/bio/internal.h +108 -0
  295. data/third_party/boringssl/crypto/bio/pair.c +803 -0
  296. data/third_party/boringssl/crypto/bio/printf.c +119 -0
  297. data/third_party/boringssl/crypto/bio/socket.c +195 -0
  298. data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
  299. data/third_party/boringssl/crypto/bn/add.c +377 -0
  300. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
  301. data/third_party/boringssl/crypto/bn/bn.c +341 -0
  302. data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
  303. data/third_party/boringssl/crypto/bn/cmp.c +200 -0
  304. data/third_party/boringssl/crypto/bn/convert.c +597 -0
  305. data/third_party/boringssl/crypto/bn/ctx.c +311 -0
  306. data/third_party/boringssl/crypto/bn/div.c +625 -0
  307. data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
  308. data/third_party/boringssl/crypto/bn/gcd.c +711 -0
  309. data/third_party/boringssl/crypto/bn/generic.c +1019 -0
  310. data/third_party/boringssl/crypto/bn/internal.h +294 -0
  311. data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
  312. data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
  313. data/third_party/boringssl/crypto/bn/mul.c +888 -0
  314. data/third_party/boringssl/crypto/bn/prime.c +845 -0
  315. data/third_party/boringssl/crypto/bn/random.c +326 -0
  316. data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
  317. data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
  318. data/third_party/boringssl/crypto/bn/shift.c +299 -0
  319. data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
  320. data/third_party/boringssl/crypto/buf/buf.c +235 -0
  321. data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
  322. data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
  323. data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
  324. data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
  325. data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
  326. data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
  327. data/third_party/boringssl/crypto/cipher/aead.c +167 -0
  328. data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
  329. data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
  330. data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
  331. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
  332. data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
  333. data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
  334. data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
  335. data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
  336. data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
  337. data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
  338. data/third_party/boringssl/crypto/cipher/internal.h +164 -0
  339. data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
  340. data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
  341. data/third_party/boringssl/crypto/conf/conf.c +778 -0
  342. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  343. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  344. data/third_party/boringssl/crypto/cpu-arm.c +199 -0
  345. data/third_party/boringssl/crypto/cpu-intel.c +261 -0
  346. data/third_party/boringssl/crypto/crypto.c +140 -0
  347. data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
  348. data/third_party/boringssl/crypto/des/des.c +771 -0
  349. data/third_party/boringssl/crypto/des/internal.h +212 -0
  350. data/third_party/boringssl/crypto/dh/check.c +180 -0
  351. data/third_party/boringssl/crypto/dh/dh.c +463 -0
  352. data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
  353. data/third_party/boringssl/crypto/dh/internal.h +80 -0
  354. data/third_party/boringssl/crypto/dh/params.c +301 -0
  355. data/third_party/boringssl/crypto/digest/digest.c +248 -0
  356. data/third_party/boringssl/crypto/digest/digests.c +321 -0
  357. data/third_party/boringssl/crypto/digest/internal.h +112 -0
  358. data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
  359. data/third_party/boringssl/crypto/directory.h +66 -0
  360. data/third_party/boringssl/crypto/directory_posix.c +108 -0
  361. data/third_party/boringssl/crypto/directory_win.c +144 -0
  362. data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
  363. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
  364. data/third_party/boringssl/crypto/dsa/internal.h +78 -0
  365. data/third_party/boringssl/crypto/ec/ec.c +889 -0
  366. data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
  367. data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
  368. data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
  369. data/third_party/boringssl/crypto/ec/internal.h +318 -0
  370. data/third_party/boringssl/crypto/ec/oct.c +416 -0
  371. data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
  372. data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
  373. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
  374. data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
  375. data/third_party/boringssl/crypto/ec/simple.c +1313 -0
  376. data/third_party/boringssl/crypto/ec/util-64.c +183 -0
  377. data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
  378. data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
  379. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
  380. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
  381. data/third_party/boringssl/crypto/engine/engine.c +96 -0
  382. data/third_party/boringssl/crypto/err/err.c +756 -0
  383. data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
  384. data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
  385. data/third_party/boringssl/crypto/evp/evp.c +411 -0
  386. data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
  387. data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
  388. data/third_party/boringssl/crypto/evp/internal.h +278 -0
  389. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
  390. data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
  391. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
  392. data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
  393. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
  394. data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
  395. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  396. data/third_party/boringssl/crypto/ex_data.c +294 -0
  397. data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
  398. data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
  399. data/third_party/boringssl/crypto/internal.h +532 -0
  400. data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
  401. data/third_party/boringssl/crypto/md4/md4.c +225 -0
  402. data/third_party/boringssl/crypto/md5/md5.c +275 -0
  403. data/third_party/boringssl/crypto/mem.c +200 -0
  404. data/third_party/boringssl/crypto/modes/cbc.c +216 -0
  405. data/third_party/boringssl/crypto/modes/cfb.c +231 -0
  406. data/third_party/boringssl/crypto/modes/ctr.c +226 -0
  407. data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
  408. data/third_party/boringssl/crypto/modes/internal.h +370 -0
  409. data/third_party/boringssl/crypto/modes/ofb.c +108 -0
  410. data/third_party/boringssl/crypto/obj/obj.c +664 -0
  411. data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
  412. data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
  413. data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
  414. data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
  415. data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
  416. data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
  417. data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
  418. data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
  419. data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
  420. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  421. data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
  422. data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
  423. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
  424. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
  425. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
  426. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
  427. data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
  428. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
  429. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
  430. data/third_party/boringssl/crypto/rand/internal.h +32 -0
  431. data/third_party/boringssl/crypto/rand/rand.c +239 -0
  432. data/third_party/boringssl/crypto/rand/urandom.c +223 -0
  433. data/third_party/boringssl/crypto/rand/windows.c +56 -0
  434. data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
  435. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  436. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  437. data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
  438. data/third_party/boringssl/crypto/rsa/internal.h +164 -0
  439. data/third_party/boringssl/crypto/rsa/padding.c +711 -0
  440. data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
  441. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
  442. data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
  443. data/third_party/boringssl/crypto/sha/sha1.c +337 -0
  444. data/third_party/boringssl/crypto/sha/sha256.c +327 -0
  445. data/third_party/boringssl/crypto/sha/sha512.c +607 -0
  446. data/third_party/boringssl/crypto/stack/stack.c +386 -0
  447. data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
  448. data/third_party/boringssl/crypto/test/test_util.h +35 -0
  449. data/third_party/boringssl/crypto/thread.c +101 -0
  450. data/third_party/boringssl/crypto/thread_none.c +55 -0
  451. data/third_party/boringssl/crypto/thread_pthread.c +167 -0
  452. data/third_party/boringssl/crypto/thread_win.c +282 -0
  453. data/third_party/boringssl/crypto/time_support.c +212 -0
  454. data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
  455. data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
  456. data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
  457. data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
  458. data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
  459. data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
  460. data/third_party/boringssl/crypto/x509/by_file.c +295 -0
  461. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  462. data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
  463. data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
  464. data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
  465. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  466. data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
  467. data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
  468. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  469. data/third_party/boringssl/crypto/x509/x509.c +152 -0
  470. data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
  471. data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
  472. data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
  473. data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
  474. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  475. data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
  476. data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
  477. data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
  478. data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
  479. data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
  480. data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
  481. data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
  482. data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
  483. data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
  484. data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
  485. data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
  486. data/third_party/boringssl/crypto/x509/x509name.c +381 -0
  487. data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
  488. data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
  489. data/third_party/boringssl/crypto/x509/x509type.c +128 -0
  490. data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
  491. data/third_party/boringssl/crypto/x509/x_all.c +547 -0
  492. data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
  493. data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
  494. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  495. data/third_party/boringssl/crypto/x509/x_info.c +95 -0
  496. data/third_party/boringssl/crypto/x509/x_name.c +538 -0
  497. data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
  498. data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
  499. data/third_party/boringssl/crypto/x509/x_req.c +112 -0
  500. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  501. data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
  502. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  503. data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
  504. data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
  505. data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
  506. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
  507. data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
  508. data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
  509. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
  510. data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
  511. data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
  512. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
  513. data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
  514. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
  515. data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
  516. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
  517. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  518. data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
  519. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
  520. data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
  521. data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
  522. data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
  523. data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
  524. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
  525. data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
  526. data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
  527. data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
  528. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
  529. data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
  530. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
  531. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
  532. data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
  533. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
  534. data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
  535. data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
  536. data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
  537. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
  538. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
  539. data/third_party/boringssl/include/openssl/aead.h +346 -0
  540. data/third_party/boringssl/include/openssl/aes.h +158 -0
  541. data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
  542. data/third_party/boringssl/include/openssl/asn1.h +1168 -0
  543. data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
  544. data/third_party/boringssl/include/openssl/asn1t.h +906 -0
  545. data/third_party/boringssl/include/openssl/base.h +261 -0
  546. data/third_party/boringssl/include/openssl/base64.h +184 -0
  547. data/third_party/boringssl/include/openssl/bio.h +902 -0
  548. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  549. data/third_party/boringssl/include/openssl/bn.h +885 -0
  550. data/third_party/boringssl/include/openssl/buf.h +118 -0
  551. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  552. data/third_party/boringssl/include/openssl/bytestring.h +360 -0
  553. data/third_party/boringssl/include/openssl/cast.h +96 -0
  554. data/third_party/boringssl/include/openssl/chacha.h +37 -0
  555. data/third_party/boringssl/include/openssl/cipher.h +571 -0
  556. data/third_party/boringssl/include/openssl/cmac.h +76 -0
  557. data/third_party/boringssl/include/openssl/conf.h +145 -0
  558. data/third_party/boringssl/include/openssl/cpu.h +184 -0
  559. data/third_party/boringssl/include/openssl/crypto.h +68 -0
  560. data/third_party/boringssl/include/openssl/curve25519.h +88 -0
  561. data/third_party/boringssl/include/openssl/des.h +177 -0
  562. data/third_party/boringssl/include/openssl/dh.h +238 -0
  563. data/third_party/boringssl/include/openssl/digest.h +258 -0
  564. data/third_party/boringssl/include/openssl/dsa.h +343 -0
  565. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  566. data/third_party/boringssl/include/openssl/ec.h +355 -0
  567. data/third_party/boringssl/include/openssl/ec_key.h +280 -0
  568. data/third_party/boringssl/include/openssl/ecdh.h +102 -0
  569. data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
  570. data/third_party/boringssl/include/openssl/engine.h +98 -0
  571. data/third_party/boringssl/include/openssl/err.h +487 -0
  572. data/third_party/boringssl/include/openssl/evp.h +750 -0
  573. data/third_party/boringssl/include/openssl/ex_data.h +213 -0
  574. data/third_party/boringssl/include/openssl/hkdf.h +44 -0
  575. data/third_party/boringssl/include/openssl/hmac.h +160 -0
  576. data/third_party/boringssl/include/openssl/lhash.h +192 -0
  577. data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
  578. data/third_party/boringssl/include/openssl/md4.h +102 -0
  579. data/third_party/boringssl/include/openssl/md5.h +107 -0
  580. data/third_party/boringssl/include/openssl/mem.h +140 -0
  581. data/third_party/boringssl/include/openssl/obj.h +198 -0
  582. data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
  583. data/third_party/boringssl/include/openssl/objects.h +18 -0
  584. data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
  585. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  586. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  587. data/third_party/boringssl/include/openssl/pem.h +521 -0
  588. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  589. data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
  590. data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
  591. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  592. data/third_party/boringssl/include/openssl/pqueue.h +146 -0
  593. data/third_party/boringssl/include/openssl/rand.h +113 -0
  594. data/third_party/boringssl/include/openssl/rc4.h +90 -0
  595. data/third_party/boringssl/include/openssl/rsa.h +637 -0
  596. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  597. data/third_party/boringssl/include/openssl/sha.h +256 -0
  598. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  599. data/third_party/boringssl/include/openssl/ssl.h +4466 -0
  600. data/third_party/boringssl/include/openssl/ssl3.h +441 -0
  601. data/third_party/boringssl/include/openssl/stack.h +298 -0
  602. data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
  603. data/third_party/boringssl/include/openssl/thread.h +173 -0
  604. data/third_party/boringssl/include/openssl/time_support.h +90 -0
  605. data/third_party/boringssl/include/openssl/tls1.h +653 -0
  606. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  607. data/third_party/boringssl/include/openssl/x509.h +1258 -0
  608. data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
  609. data/third_party/boringssl/include/openssl/x509v3.h +798 -0
  610. data/third_party/boringssl/ssl/custom_extensions.c +257 -0
  611. data/third_party/boringssl/ssl/d1_both.c +880 -0
  612. data/third_party/boringssl/ssl/d1_clnt.c +566 -0
  613. data/third_party/boringssl/ssl/d1_lib.c +340 -0
  614. data/third_party/boringssl/ssl/d1_meth.c +130 -0
  615. data/third_party/boringssl/ssl/d1_pkt.c +578 -0
  616. data/third_party/boringssl/ssl/d1_srtp.c +234 -0
  617. data/third_party/boringssl/ssl/d1_srvr.c +485 -0
  618. data/third_party/boringssl/ssl/dtls_record.c +308 -0
  619. data/third_party/boringssl/ssl/internal.h +1276 -0
  620. data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
  621. data/third_party/boringssl/ssl/s3_both.c +571 -0
  622. data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
  623. data/third_party/boringssl/ssl/s3_enc.c +494 -0
  624. data/third_party/boringssl/ssl/s3_lib.c +587 -0
  625. data/third_party/boringssl/ssl/s3_meth.c +166 -0
  626. data/third_party/boringssl/ssl/s3_pkt.c +732 -0
  627. data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
  628. data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
  629. data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
  630. data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
  631. data/third_party/boringssl/ssl/ssl_cert.c +539 -0
  632. data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
  633. data/third_party/boringssl/ssl/ssl_file.c +633 -0
  634. data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
  635. data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
  636. data/third_party/boringssl/ssl/ssl_session.c +764 -0
  637. data/third_party/boringssl/ssl/ssl_stat.c +591 -0
  638. data/third_party/boringssl/ssl/t1_enc.c +708 -0
  639. data/third_party/boringssl/ssl/t1_lib.c +2905 -0
  640. data/third_party/boringssl/ssl/test/async_bio.h +45 -0
  641. data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
  642. data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
  643. data/third_party/boringssl/ssl/test/test_config.h +108 -0
  644. data/third_party/boringssl/ssl/tls_record.c +342 -0
  645. data/third_party/zlib/adler32.c +179 -0
  646. data/third_party/zlib/compress.c +80 -0
  647. data/third_party/zlib/crc32.c +425 -0
  648. data/third_party/zlib/crc32.h +441 -0
  649. data/third_party/zlib/deflate.c +1967 -0
  650. data/third_party/zlib/deflate.h +346 -0
  651. data/third_party/zlib/gzclose.c +25 -0
  652. data/third_party/zlib/gzguts.h +209 -0
  653. data/third_party/zlib/gzlib.c +634 -0
  654. data/third_party/zlib/gzread.c +594 -0
  655. data/third_party/zlib/gzwrite.c +577 -0
  656. data/third_party/zlib/infback.c +640 -0
  657. data/third_party/zlib/inffast.c +340 -0
  658. data/third_party/zlib/inffast.h +11 -0
  659. data/third_party/zlib/inffixed.h +94 -0
  660. data/third_party/zlib/inflate.c +1512 -0
  661. data/third_party/zlib/inflate.h +122 -0
  662. data/third_party/zlib/inftrees.c +306 -0
  663. data/third_party/zlib/inftrees.h +62 -0
  664. data/third_party/zlib/trees.c +1226 -0
  665. data/third_party/zlib/trees.h +128 -0
  666. data/third_party/zlib/uncompr.c +59 -0
  667. data/third_party/zlib/zconf.h +511 -0
  668. data/third_party/zlib/zlib.h +1768 -0
  669. data/third_party/zlib/zutil.c +324 -0
  670. data/third_party/zlib/zutil.h +253 -0
  671. metadata +492 -25
  672. data/Rakefile +0 -63
  673. data/src/ruby/lib/grpc/grpc.so +0 -0
@@ -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
- /* Placeholder implementation only. */
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
- size_t census_context_serialize(const census_context *context, char *buffer,
43
- size_t buf_size) {
44
- /* TODO(aveitch): implement serialization */
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
+ }