grpc 0.13.1 → 0.14.1.pre1

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 (724) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -828
  3. data/include/grpc/byte_buffer.h +1 -1
  4. data/include/grpc/byte_buffer_reader.h +1 -20
  5. data/include/grpc/census.h +4 -4
  6. data/include/grpc/compression.h +6 -5
  7. data/include/grpc/grpc.h +31 -20
  8. data/include/grpc/grpc_security.h +17 -31
  9. data/include/grpc/grpc_security_constants.h +114 -0
  10. data/include/grpc/grpc_zookeeper.h +1 -1
  11. data/include/grpc/impl/codegen/alloc.h +1 -1
  12. data/include/grpc/impl/codegen/atm.h +1 -1
  13. data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
  14. data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
  15. data/include/grpc/impl/codegen/atm_win32.h +1 -1
  16. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  17. data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
  18. data/include/grpc/impl/codegen/grpc_types.h +20 -3
  19. data/include/grpc/impl/codegen/log.h +9 -2
  20. data/include/grpc/impl/codegen/port_platform.h +102 -17
  21. data/include/grpc/impl/codegen/propagation_bits.h +3 -3
  22. data/include/grpc/impl/codegen/slice.h +3 -3
  23. data/include/grpc/impl/codegen/slice_buffer.h +3 -3
  24. data/include/grpc/impl/codegen/status.h +1 -1
  25. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  26. data/include/grpc/impl/codegen/sync_posix.h +1 -1
  27. data/include/grpc/impl/codegen/sync_win32.h +1 -1
  28. data/include/grpc/impl/codegen/time.h +3 -3
  29. data/include/grpc/status.h +1 -1
  30. data/include/grpc/support/alloc.h +1 -1
  31. data/include/grpc/support/atm.h +1 -1
  32. data/include/grpc/support/atm_gcc_atomic.h +4 -4
  33. data/include/grpc/support/atm_gcc_sync.h +1 -1
  34. data/include/grpc/support/atm_win32.h +1 -1
  35. data/include/grpc/support/avl.h +1 -1
  36. data/include/grpc/support/cmdline.h +1 -1
  37. data/include/grpc/support/cpu.h +1 -1
  38. data/include/grpc/support/histogram.h +1 -1
  39. data/include/grpc/support/host_port.h +1 -1
  40. data/include/grpc/support/log.h +1 -1
  41. data/include/grpc/support/log_win32.h +1 -1
  42. data/include/grpc/support/port_platform.h +1 -1
  43. data/include/grpc/support/slice.h +1 -1
  44. data/include/grpc/support/slice_buffer.h +1 -1
  45. data/include/grpc/support/string_util.h +3 -1
  46. data/include/grpc/support/subprocess.h +2 -2
  47. data/include/grpc/support/sync.h +1 -1
  48. data/include/grpc/support/sync_generic.h +1 -1
  49. data/include/grpc/support/sync_posix.h +1 -1
  50. data/include/grpc/support/sync_win32.h +1 -1
  51. data/include/grpc/support/thd.h +1 -1
  52. data/include/grpc/support/time.h +1 -1
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +45 -1
  55. data/include/grpc/support/tls_msvc.h +3 -3
  56. data/include/grpc/support/tls_pthread.h +1 -1
  57. data/include/grpc/support/useful.h +1 -1
  58. data/src/boringssl/err_data.c +258 -252
  59. data/src/core/{census → ext/census}/aggregation.h +3 -3
  60. data/src/core/{statistics → ext/census}/census_interface.h +3 -3
  61. data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
  62. data/src/core/{census → ext/census}/context.c +2 -2
  63. data/src/core/{census → ext/census}/grpc_context.c +2 -2
  64. data/src/core/{census → ext/census}/grpc_filter.c +30 -16
  65. data/src/core/{census → ext/census}/grpc_filter.h +4 -4
  66. data/src/core/ext/census/grpc_plugin.c +82 -0
  67. data/src/core/{census → ext/census}/initialize.c +1 -1
  68. data/src/core/{census → ext/census}/mlog.c +2 -2
  69. data/src/core/{census → ext/census}/mlog.h +4 -4
  70. data/src/core/{census → ext/census}/operation.c +0 -0
  71. data/src/core/{census → ext/census}/placeholders.c +0 -0
  72. data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
  73. data/src/core/{census → ext/census}/tracing.c +0 -0
  74. data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
  75. data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
  76. data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
  77. data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
  78. data/src/core/ext/client_config/client_channel_factory.h +85 -0
  79. data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
  80. data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
  81. data/src/core/ext/client_config/client_config_plugin.c +95 -0
  82. data/src/core/{client_config → ext/client_config}/connector.c +2 -2
  83. data/src/core/{client_config → ext/client_config}/connector.h +7 -10
  84. data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
  85. data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
  86. data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
  87. data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
  88. data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
  89. data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
  90. data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
  91. data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
  92. data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
  93. data/src/core/ext/client_config/parse_address.c +137 -0
  94. data/src/core/ext/client_config/parse_address.h +56 -0
  95. data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
  96. data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
  97. data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
  98. data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
  99. data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
  100. data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
  101. data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
  102. data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
  103. data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
  104. data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
  105. data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
  106. data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
  107. data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
  108. data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
  109. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
  110. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
  111. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
  112. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
  113. data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
  114. data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
  115. data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
  116. data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
  117. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
  118. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
  119. data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
  120. data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
  121. data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
  122. data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
  123. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
  124. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
  125. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
  126. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
  127. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
  128. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
  129. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
  130. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
  131. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
  132. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
  133. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
  134. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
  135. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
  136. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
  137. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
  138. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
  139. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
  140. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
  141. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
  142. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
  143. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
  144. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
  145. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
  146. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
  147. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
  148. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  149. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
  150. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
  151. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
  152. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
  153. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
  154. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
  155. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
  156. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
  157. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
  158. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
  159. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
  160. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
  161. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
  162. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
  163. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
  164. data/src/core/{channel → lib/channel}/channel_args.c +3 -15
  165. data/src/core/{channel → lib/channel}/channel_args.h +11 -15
  166. data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
  167. data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
  168. data/src/core/lib/channel/channel_stack_builder.c +277 -0
  169. data/src/core/lib/channel/channel_stack_builder.h +161 -0
  170. data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
  171. data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
  172. data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
  173. data/src/core/lib/channel/connected_channel.h +42 -0
  174. data/src/core/{channel → lib/channel}/context.h +3 -3
  175. data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
  176. data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
  177. data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
  178. data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
  179. data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
  180. data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
  181. data/src/core/{compression → lib/compression}/message_compress.c +1 -1
  182. data/src/core/{compression → lib/compression}/message_compress.h +3 -3
  183. data/src/core/{debug → lib/debug}/trace.c +2 -2
  184. data/src/core/{debug → lib/debug}/trace.h +3 -3
  185. data/src/core/{httpcli → lib/http}/format_request.c +8 -8
  186. data/src/core/{httpcli → lib/http}/format_request.h +4 -4
  187. data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
  188. data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
  189. data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
  190. data/src/core/lib/http/parser.c +341 -0
  191. data/src/core/lib/http/parser.h +119 -0
  192. data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
  193. data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
  194. data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
  195. data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
  196. data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
  197. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
  198. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
  199. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
  200. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
  201. data/src/core/lib/iomgr/ev_posix.c +164 -0
  202. data/src/core/lib/iomgr/ev_posix.h +158 -0
  203. data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
  204. data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
  205. data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
  206. data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
  207. data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
  208. data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
  209. data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
  210. data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
  211. data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
  212. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
  213. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
  214. data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
  215. data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
  216. data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
  217. data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
  218. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  219. data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
  220. data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
  221. data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
  222. data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
  223. data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
  224. data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
  225. data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
  226. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
  227. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
  228. data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
  229. data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
  230. data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
  231. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
  232. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
  233. data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
  234. data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
  235. data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
  236. data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
  237. data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
  238. data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
  239. data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
  240. data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
  241. data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
  242. data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
  243. data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
  244. data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
  245. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
  246. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
  247. data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
  248. data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
  249. data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
  250. data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
  251. data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
  252. data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
  254. data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
  256. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
  257. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
  258. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
  259. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
  260. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
  261. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
  262. data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
  263. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
  264. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
  265. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
  266. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
  267. data/src/core/{json → lib/json}/json.c +1 -1
  268. data/src/core/{json → lib/json}/json.h +4 -4
  269. data/src/core/{json → lib/json}/json_common.h +3 -3
  270. data/src/core/{json → lib/json}/json_reader.c +16 -4
  271. data/src/core/{json → lib/json}/json_reader.h +4 -4
  272. data/src/core/{json → lib/json}/json_string.c +4 -4
  273. data/src/core/{json → lib/json}/json_writer.c +1 -1
  274. data/src/core/{json → lib/json}/json_writer.h +4 -4
  275. data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
  276. data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
  277. data/src/core/{profiling → lib/profiling}/timers.h +3 -3
  278. data/src/core/{security → lib/security}/auth_filters.h +4 -4
  279. data/src/core/{security → lib/security}/b64.c +2 -2
  280. data/src/core/{security → lib/security}/b64.h +4 -4
  281. data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
  282. data/src/core/{security → lib/security}/credentials.c +42 -26
  283. data/src/core/{security → lib/security}/credentials.h +11 -10
  284. data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
  285. data/src/core/{security → lib/security}/credentials_posix.c +3 -3
  286. data/src/core/{security → lib/security}/credentials_win32.c +3 -3
  287. data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
  288. data/src/core/{security → lib/security}/handshake.c +4 -4
  289. data/src/core/{security → lib/security}/handshake.h +6 -6
  290. data/src/core/{security → lib/security}/json_token.c +4 -4
  291. data/src/core/{security → lib/security}/json_token.h +4 -4
  292. data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
  293. data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
  294. data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
  295. data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
  296. data/src/core/{security → lib/security}/security_connector.c +53 -21
  297. data/src/core/{security → lib/security}/security_connector.h +8 -8
  298. data/src/core/{security → lib/security}/security_context.c +5 -5
  299. data/src/core/{security → lib/security}/security_context.h +5 -5
  300. data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
  301. data/src/core/{support → lib/support}/alloc.c +5 -3
  302. data/src/core/{support → lib/support}/avl.c +1 -1
  303. data/src/core/lib/support/backoff.c +76 -0
  304. data/src/core/lib/support/backoff.h +68 -0
  305. data/src/core/{support → lib/support}/block_annotate.h +3 -3
  306. data/src/core/{support → lib/support}/cmdline.c +1 -1
  307. data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
  308. data/src/core/{support → lib/support}/cpu_linux.c +2 -2
  309. data/src/core/{support → lib/support}/cpu_posix.c +2 -2
  310. data/src/core/{support → lib/support}/cpu_windows.c +0 -0
  311. data/src/core/{support → lib/support}/env.h +3 -3
  312. data/src/core/{support → lib/support}/env_linux.c +3 -3
  313. data/src/core/{support → lib/support}/env_posix.c +2 -2
  314. data/src/core/{support → lib/support}/env_win32.c +27 -21
  315. data/src/core/{support → lib/support}/histogram.c +1 -1
  316. data/src/core/{support → lib/support}/host_port.c +1 -1
  317. data/src/core/{support → lib/support}/load_file.c +4 -4
  318. data/src/core/{support → lib/support}/load_file.h +4 -4
  319. data/src/core/{support → lib/support}/log.c +33 -0
  320. data/src/core/{support → lib/support}/log_android.c +2 -2
  321. data/src/core/{support → lib/support}/log_linux.c +6 -5
  322. data/src/core/{support → lib/support}/log_posix.c +3 -3
  323. data/src/core/{support → lib/support}/log_win32.c +8 -22
  324. data/src/core/{support → lib/support}/murmur_hash.c +1 -1
  325. data/src/core/{support → lib/support}/murmur_hash.h +3 -3
  326. data/src/core/{support → lib/support}/slice.c +0 -0
  327. data/src/core/{support → lib/support}/slice_buffer.c +0 -0
  328. data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
  329. data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
  330. data/src/core/{support → lib/support}/string.c +1 -1
  331. data/src/core/{support → lib/support}/string.h +4 -4
  332. data/src/core/{support → lib/support}/string_posix.c +1 -1
  333. data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
  334. data/src/core/lib/support/string_win32.c +83 -0
  335. data/src/core/{support → lib/support}/string_win32.h +3 -3
  336. data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
  337. data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
  338. data/src/core/{support → lib/support}/sync.c +2 -2
  339. data/src/core/{support → lib/support}/sync_posix.c +3 -3
  340. data/src/core/{support → lib/support}/sync_win32.c +1 -1
  341. data/src/core/{support → lib/support}/thd.c +0 -0
  342. data/src/core/{support → lib/support}/thd_internal.h +3 -3
  343. data/src/core/{support → lib/support}/thd_posix.c +4 -3
  344. data/src/core/{support → lib/support}/thd_win32.c +1 -1
  345. data/src/core/{support → lib/support}/time.c +2 -2
  346. data/src/core/{support → lib/support}/time_posix.c +12 -6
  347. data/src/core/{support → lib/support}/time_precise.c +0 -0
  348. data/src/core/{support → lib/support}/time_precise.h +3 -3
  349. data/src/core/{support → lib/support}/time_win32.c +7 -7
  350. data/src/core/{support → lib/support}/tls_pthread.c +0 -0
  351. data/src/core/{support → lib/support}/tmpfile.h +4 -4
  352. data/src/core/lib/support/tmpfile_msys.c +73 -0
  353. data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
  354. data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
  355. data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
  356. data/src/core/{surface → lib/surface}/alarm.c +3 -3
  357. data/src/core/{surface → lib/surface}/api_trace.c +1 -1
  358. data/src/core/{surface → lib/surface}/api_trace.h +4 -4
  359. data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
  360. data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
  361. data/src/core/{surface → lib/surface}/call.c +145 -73
  362. data/src/core/{surface → lib/surface}/call.h +14 -7
  363. data/src/core/{surface → lib/surface}/call_details.c +1 -1
  364. data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
  365. data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
  366. data/src/core/{surface → lib/surface}/channel.c +33 -34
  367. data/src/core/{surface → lib/surface}/channel.h +9 -9
  368. data/src/core/lib/surface/channel_init.c +140 -0
  369. data/src/core/lib/surface/channel_init.h +87 -0
  370. data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
  371. data/src/core/lib/surface/channel_stack_type.c +54 -0
  372. data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
  373. data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
  374. data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
  375. data/src/core/{surface → lib/surface}/event_string.c +2 -2
  376. data/src/core/{surface → lib/surface}/event_string.h +3 -3
  377. data/src/core/lib/surface/init.c +217 -0
  378. data/src/core/{surface → lib/surface}/init.h +4 -3
  379. data/src/core/lib/surface/init_secure.c +89 -0
  380. data/src/core/{surface → lib/surface}/lame_client.c +31 -19
  381. data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
  382. data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
  383. data/src/core/{surface → lib/surface}/server.c +208 -183
  384. data/src/core/{surface → lib/surface}/server.h +6 -11
  385. data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
  386. data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
  387. data/src/core/{surface → lib/surface}/version.c +2 -2
  388. data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
  389. data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
  390. data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
  391. data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
  392. data/src/core/{transport → lib/transport}/metadata.c +71 -19
  393. data/src/core/{transport → lib/transport}/metadata.h +11 -4
  394. data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
  395. data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
  396. data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
  397. data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
  398. data/src/core/{transport → lib/transport}/transport.c +25 -5
  399. data/src/core/{transport → lib/transport}/transport.h +41 -16
  400. data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
  401. data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
  402. data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
  403. data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
  404. data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
  405. data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
  406. data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
  407. data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
  408. data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
  409. data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
  410. data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
  411. data/src/ruby/ext/grpc/extconf.rb +14 -20
  412. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
  413. data/src/ruby/ext/grpc/rb_call.c +37 -4
  414. data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
  415. data/src/ruby/ext/grpc/rb_channel.c +2 -3
  416. data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
  417. data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
  418. data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
  419. data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
  420. data/src/ruby/ext/grpc/rb_grpc.c +4 -2
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
  422. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
  423. data/src/ruby/ext/grpc/rb_server.c +2 -3
  424. data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
  425. data/src/ruby/ext/grpc/rb_signal.c +70 -0
  426. data/src/ruby/ext/grpc/rb_signal.h +39 -0
  427. data/src/ruby/lib/grpc.rb +21 -13
  428. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  429. data/src/ruby/lib/grpc/errors.rb +2 -2
  430. data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
  431. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  432. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
  433. data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
  434. data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
  435. data/src/ruby/lib/grpc/generic/service.rb +5 -15
  436. data/src/ruby/lib/grpc/grpc.rb +3 -3
  437. data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
  438. data/src/ruby/lib/grpc/version.rb +2 -2
  439. data/src/ruby/pb/generate_proto_ruby.sh +9 -2
  440. data/src/ruby/pb/grpc/health/checker.rb +1 -1
  441. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
  442. data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
  443. data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
  444. data/src/ruby/pb/test/client.rb +12 -23
  445. data/src/ruby/pb/test/server.rb +1 -1
  446. data/src/ruby/spec/client_server_spec.rb +1 -1
  447. data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
  448. data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
  449. data/src/ruby/spec/generic/service_spec.rb +0 -69
  450. data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
  451. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  452. data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
  453. data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
  454. data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
  455. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
  456. data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
  457. data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
  458. data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
  459. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
  460. data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
  461. data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
  462. data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
  463. data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
  464. data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
  465. data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
  466. data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
  467. data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
  468. data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
  469. data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
  470. data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
  471. data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
  472. data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
  473. data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
  474. data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
  475. data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
  476. data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
  477. data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
  478. data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
  479. data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
  480. data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
  481. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
  482. data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
  483. data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
  484. data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
  485. data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
  486. data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
  487. data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
  488. data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
  489. data/third_party/boringssl/crypto/bio/buffer.c +3 -3
  490. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
  491. data/third_party/boringssl/crypto/bn/bn.c +1 -1
  492. data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
  493. data/third_party/boringssl/crypto/bn/convert.c +9 -4
  494. data/third_party/boringssl/crypto/bn/div.c +0 -20
  495. data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
  496. data/third_party/boringssl/crypto/bn/generic.c +6 -242
  497. data/third_party/boringssl/crypto/bn/internal.h +9 -70
  498. data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
  499. data/third_party/boringssl/crypto/bn/mul.c +6 -26
  500. data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
  501. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  502. data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
  503. data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
  504. data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
  505. data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
  506. data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
  507. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
  508. data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
  509. data/third_party/boringssl/crypto/conf/conf.c +9 -0
  510. data/third_party/boringssl/crypto/cpu-intel.c +1 -1
  511. data/third_party/boringssl/crypto/crypto.c +2 -0
  512. data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
  513. data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
  514. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
  515. data/third_party/boringssl/crypto/dh/check.c +32 -10
  516. data/third_party/boringssl/crypto/dh/dh.c +1 -1
  517. data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
  518. data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
  519. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
  520. data/third_party/boringssl/crypto/ec/ec.c +45 -31
  521. data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
  522. data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
  523. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
  524. data/third_party/boringssl/crypto/ec/internal.h +1 -19
  525. data/third_party/boringssl/crypto/ec/oct.c +12 -0
  526. data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
  527. data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
  528. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
  529. data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
  530. data/third_party/boringssl/crypto/ec/simple.c +0 -76
  531. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
  532. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
  533. data/third_party/boringssl/crypto/evp/evp.c +4 -3
  534. data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
  535. data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
  536. data/third_party/boringssl/crypto/evp/internal.h +28 -27
  537. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
  538. data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
  539. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
  540. data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
  541. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
  542. data/third_party/boringssl/crypto/internal.h +16 -1
  543. data/third_party/boringssl/crypto/mem.c +2 -2
  544. data/third_party/boringssl/crypto/modes/ctr.c +2 -1
  545. data/third_party/boringssl/crypto/modes/gcm.c +5 -3
  546. data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
  547. data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
  548. data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
  549. data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
  550. data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
  551. data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
  552. data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
  553. data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
  554. data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
  555. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
  556. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
  557. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
  558. data/third_party/boringssl/crypto/rand/rand.c +2 -0
  559. data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
  560. data/third_party/boringssl/crypto/rsa/internal.h +1 -9
  561. data/third_party/boringssl/crypto/rsa/padding.c +73 -77
  562. data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
  563. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
  564. data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
  565. data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
  566. data/third_party/boringssl/crypto/thread_win.c +15 -13
  567. data/third_party/boringssl/crypto/time_support.c +0 -6
  568. data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
  569. data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
  570. data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
  571. data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
  572. data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
  573. data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
  574. data/third_party/boringssl/crypto/x509/by_file.c +186 -206
  575. data/third_party/boringssl/crypto/x509/charmap.h +11 -11
  576. data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
  577. data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
  578. data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
  579. data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
  580. data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
  581. data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
  582. data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
  583. data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
  584. data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
  585. data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
  586. data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
  587. data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
  588. data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
  589. data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
  590. data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
  591. data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
  592. data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
  593. data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
  594. data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
  595. data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
  596. data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
  597. data/third_party/boringssl/crypto/x509/x509name.c +280 -275
  598. data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
  599. data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
  600. data/third_party/boringssl/crypto/x509/x509type.c +58 -60
  601. data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
  602. data/third_party/boringssl/crypto/x509/x_all.c +282 -328
  603. data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
  604. data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
  605. data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
  606. data/third_party/boringssl/crypto/x509/x_info.c +30 -27
  607. data/third_party/boringssl/crypto/x509/x_name.c +387 -388
  608. data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
  609. data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
  610. data/third_party/boringssl/crypto/x509/x_req.c +30 -33
  611. data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
  612. data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
  613. data/third_party/boringssl/crypto/x509/x_val.c +2 -2
  614. data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
  615. data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
  616. data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
  617. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
  618. data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
  619. data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
  620. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
  621. data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
  622. data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
  623. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
  624. data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
  625. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
  626. data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
  627. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
  628. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
  629. data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
  630. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
  631. data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
  632. data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
  633. data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
  634. data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
  635. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
  636. data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
  637. data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
  638. data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
  639. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
  640. data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
  641. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
  642. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
  643. data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
  644. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
  645. data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
  646. data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
  647. data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
  648. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
  649. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
  650. data/third_party/boringssl/include/openssl/asn1.h +40 -38
  651. data/third_party/boringssl/include/openssl/base.h +10 -1
  652. data/third_party/boringssl/include/openssl/bio.h +10 -11
  653. data/third_party/boringssl/include/openssl/bn.h +12 -9
  654. data/third_party/boringssl/include/openssl/buf.h +1 -1
  655. data/third_party/boringssl/include/openssl/bytestring.h +29 -0
  656. data/third_party/boringssl/include/openssl/conf.h +25 -0
  657. data/third_party/boringssl/include/openssl/crypto.h +6 -1
  658. data/third_party/boringssl/include/openssl/curve25519.h +6 -3
  659. data/third_party/boringssl/include/openssl/dh.h +7 -3
  660. data/third_party/boringssl/include/openssl/dsa.h +108 -51
  661. data/third_party/boringssl/include/openssl/ec.h +46 -21
  662. data/third_party/boringssl/include/openssl/ec_key.h +78 -42
  663. data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
  664. data/third_party/boringssl/include/openssl/err.h +3 -2
  665. data/third_party/boringssl/include/openssl/evp.h +120 -37
  666. data/third_party/boringssl/include/openssl/mem.h +4 -13
  667. data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
  668. data/third_party/boringssl/include/openssl/pem.h +0 -9
  669. data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
  670. data/third_party/boringssl/include/openssl/rand.h +3 -0
  671. data/third_party/boringssl/include/openssl/rsa.h +42 -42
  672. data/third_party/boringssl/include/openssl/ssl.h +115 -41
  673. data/third_party/boringssl/include/openssl/stack.h +0 -3
  674. data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
  675. data/third_party/boringssl/include/openssl/tls1.h +1 -1
  676. data/third_party/boringssl/include/openssl/x509.h +0 -2
  677. data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
  678. data/third_party/boringssl/ssl/d1_both.c +102 -101
  679. data/third_party/boringssl/ssl/d1_clnt.c +145 -150
  680. data/third_party/boringssl/ssl/d1_lib.c +63 -62
  681. data/third_party/boringssl/ssl/d1_pkt.c +73 -71
  682. data/third_party/boringssl/ssl/d1_srvr.c +116 -125
  683. data/third_party/boringssl/ssl/dtls_record.c +3 -3
  684. data/third_party/boringssl/ssl/internal.h +210 -208
  685. data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
  686. data/third_party/boringssl/ssl/s3_both.c +116 -130
  687. data/third_party/boringssl/ssl/s3_clnt.c +589 -740
  688. data/third_party/boringssl/ssl/s3_enc.c +52 -151
  689. data/third_party/boringssl/ssl/s3_lib.c +70 -76
  690. data/third_party/boringssl/ssl/s3_pkt.c +105 -144
  691. data/third_party/boringssl/ssl/s3_srvr.c +542 -806
  692. data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
  693. data/third_party/boringssl/ssl/ssl_cert.c +2 -2
  694. data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
  695. data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
  696. data/third_party/boringssl/ssl/ssl_lib.c +260 -221
  697. data/third_party/boringssl/ssl/ssl_session.c +17 -17
  698. data/third_party/boringssl/ssl/t1_enc.c +128 -273
  699. data/third_party/boringssl/ssl/t1_lib.c +134 -258
  700. data/third_party/boringssl/ssl/test/test_config.h +2 -0
  701. data/third_party/boringssl/ssl/tls_record.c +52 -15
  702. metadata +385 -359
  703. data/src/core/channel/client_uchannel.c +0 -243
  704. data/src/core/channel/client_uchannel.h +0 -60
  705. data/src/core/channel/connected_channel.h +0 -51
  706. data/src/core/client_config/lb_policies/pick_first.h +0 -43
  707. data/src/core/client_config/resolvers/dns_resolver.h +0 -42
  708. data/src/core/client_config/subchannel_factory.h +0 -66
  709. data/src/core/httpcli/parser.c +0 -211
  710. data/src/core/iomgr/fd_posix.c +0 -451
  711. data/src/core/iomgr/fd_posix.h +0 -192
  712. data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
  713. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
  714. data/src/core/iomgr/pollset_posix.c +0 -633
  715. data/src/core/iomgr/pollset_posix.h +0 -153
  716. data/src/core/iomgr/pollset_set_posix.c +0 -202
  717. data/src/core/iomgr/pollset_set_posix.h +0 -45
  718. data/src/core/surface/init.c +0 -174
  719. data/src/core/surface/init_secure.c +0 -42
  720. data/src/core/surface/server_create.c +0 -48
  721. data/src/core/transport/chttp2/huffsyms.c +0 -297
  722. data/src/ruby/bin/grpc_ruby_interop_client +0 -33
  723. data/src/ruby/bin/grpc_ruby_interop_server +0 -33
  724. data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -64,501 +64,570 @@
64
64
 
65
65
  #include "charmap.h"
66
66
 
67
-
68
- /* ASN1_STRING_print_ex() and X509_NAME_print_ex().
69
- * Enhanced string and name printing routines handling
70
- * multibyte characters, RFC2253 and a host of other
71
- * options.
67
+ /*
68
+ * ASN1_STRING_print_ex() and X509_NAME_print_ex(). Enhanced string and name
69
+ * printing routines handling multibyte characters, RFC2253 and a host of
70
+ * other options.
72
71
  */
73
72
 
74
-
75
- #define CHARTYPE_BS_ESC (ASN1_STRFLGS_ESC_2253 | CHARTYPE_FIRST_ESC_2253 | CHARTYPE_LAST_ESC_2253)
73
+ #define CHARTYPE_BS_ESC (ASN1_STRFLGS_ESC_2253 | CHARTYPE_FIRST_ESC_2253 | CHARTYPE_LAST_ESC_2253)
76
74
 
77
75
  #define ESC_FLAGS (ASN1_STRFLGS_ESC_2253 | \
78
- ASN1_STRFLGS_ESC_QUOTE | \
79
- ASN1_STRFLGS_ESC_CTRL | \
80
- ASN1_STRFLGS_ESC_MSB)
81
-
76
+ ASN1_STRFLGS_ESC_QUOTE | \
77
+ ASN1_STRFLGS_ESC_CTRL | \
78
+ ASN1_STRFLGS_ESC_MSB)
82
79
 
83
80
  static int send_bio_chars(void *arg, const void *buf, int len)
84
81
  {
85
- if(!arg) return 1;
86
- if(BIO_write(arg, buf, len) != len) return 0;
87
- return 1;
82
+ if (!arg)
83
+ return 1;
84
+ if (BIO_write(arg, buf, len) != len)
85
+ return 0;
86
+ return 1;
88
87
  }
89
88
 
90
89
  static int send_fp_chars(void *arg, const void *buf, int len)
91
90
  {
92
- if(!arg) return 1;
93
- if(fwrite(buf, 1, len, arg) != (unsigned int)len) return 0;
94
- return 1;
91
+ if (!arg)
92
+ return 1;
93
+ if (fwrite(buf, 1, len, arg) != (unsigned int)len)
94
+ return 0;
95
+ return 1;
95
96
  }
96
97
 
97
- typedef int char_io(void *arg, const void *buf, int len);
98
+ typedef int char_io (void *arg, const void *buf, int len);
98
99
 
99
- /* This function handles display of
100
- * strings, one character at a time.
101
- * It is passed an unsigned long for each
102
- * character because it could come from 2 or even
103
- * 4 byte forms.
100
+ /*
101
+ * This function handles display of strings, one character at a time. It is
102
+ * passed an unsigned long for each character because it could come from 2 or
103
+ * even 4 byte forms.
104
104
  */
105
105
 
106
106
  #define HEX_SIZE(type) (sizeof(type)*2)
107
107
 
108
- static int do_esc_char(unsigned long c, unsigned char flags, char *do_quotes, char_io *io_ch, void *arg)
108
+ static int do_esc_char(unsigned long c, unsigned char flags, char *do_quotes,
109
+ char_io *io_ch, void *arg)
109
110
  {
110
- unsigned char chflgs, chtmp;
111
- char tmphex[HEX_SIZE(long)+3];
112
-
113
- if(c > 0xffffffffL)
114
- return -1;
115
- if(c > 0xffff) {
116
- BIO_snprintf(tmphex, sizeof tmphex, "\\W%08lX", c);
117
- if(!io_ch(arg, tmphex, 10)) return -1;
118
- return 10;
119
- }
120
- if(c > 0xff) {
121
- BIO_snprintf(tmphex, sizeof tmphex, "\\U%04lX", c);
122
- if(!io_ch(arg, tmphex, 6)) return -1;
123
- return 6;
124
- }
125
- chtmp = (unsigned char)c;
126
- if(chtmp > 0x7f) chflgs = flags & ASN1_STRFLGS_ESC_MSB;
127
- else chflgs = char_type[chtmp] & flags;
128
- if(chflgs & CHARTYPE_BS_ESC) {
129
- /* If we don't escape with quotes, signal we need quotes */
130
- if(chflgs & ASN1_STRFLGS_ESC_QUOTE) {
131
- if(do_quotes) *do_quotes = 1;
132
- if(!io_ch(arg, &chtmp, 1)) return -1;
133
- return 1;
134
- }
135
- if(!io_ch(arg, "\\", 1)) return -1;
136
- if(!io_ch(arg, &chtmp, 1)) return -1;
137
- return 2;
138
- }
139
- if(chflgs & (ASN1_STRFLGS_ESC_CTRL|ASN1_STRFLGS_ESC_MSB)) {
140
- BIO_snprintf(tmphex, 11, "\\%02X", chtmp);
141
- if(!io_ch(arg, tmphex, 3)) return -1;
142
- return 3;
143
- }
144
- /* If we get this far and do any escaping at all must escape
145
- * the escape character itself: backslash.
146
- */
147
- if (chtmp == '\\' && flags & ESC_FLAGS) {
148
- if(!io_ch(arg, "\\\\", 2)) return -1;
149
- return 2;
150
- }
151
- if(!io_ch(arg, &chtmp, 1)) return -1;
152
- return 1;
111
+ unsigned char chflgs, chtmp;
112
+ char tmphex[HEX_SIZE(long) + 3];
113
+
114
+ if (c > 0xffffffffL)
115
+ return -1;
116
+ if (c > 0xffff) {
117
+ BIO_snprintf(tmphex, sizeof tmphex, "\\W%08lX", c);
118
+ if (!io_ch(arg, tmphex, 10))
119
+ return -1;
120
+ return 10;
121
+ }
122
+ if (c > 0xff) {
123
+ BIO_snprintf(tmphex, sizeof tmphex, "\\U%04lX", c);
124
+ if (!io_ch(arg, tmphex, 6))
125
+ return -1;
126
+ return 6;
127
+ }
128
+ chtmp = (unsigned char)c;
129
+ if (chtmp > 0x7f)
130
+ chflgs = flags & ASN1_STRFLGS_ESC_MSB;
131
+ else
132
+ chflgs = char_type[chtmp] & flags;
133
+ if (chflgs & CHARTYPE_BS_ESC) {
134
+ /* If we don't escape with quotes, signal we need quotes */
135
+ if (chflgs & ASN1_STRFLGS_ESC_QUOTE) {
136
+ if (do_quotes)
137
+ *do_quotes = 1;
138
+ if (!io_ch(arg, &chtmp, 1))
139
+ return -1;
140
+ return 1;
141
+ }
142
+ if (!io_ch(arg, "\\", 1))
143
+ return -1;
144
+ if (!io_ch(arg, &chtmp, 1))
145
+ return -1;
146
+ return 2;
147
+ }
148
+ if (chflgs & (ASN1_STRFLGS_ESC_CTRL | ASN1_STRFLGS_ESC_MSB)) {
149
+ BIO_snprintf(tmphex, 11, "\\%02X", chtmp);
150
+ if (!io_ch(arg, tmphex, 3))
151
+ return -1;
152
+ return 3;
153
+ }
154
+ /*
155
+ * If we get this far and do any escaping at all must escape the escape
156
+ * character itself: backslash.
157
+ */
158
+ if (chtmp == '\\' && flags & ESC_FLAGS) {
159
+ if (!io_ch(arg, "\\\\", 2))
160
+ return -1;
161
+ return 2;
162
+ }
163
+ if (!io_ch(arg, &chtmp, 1))
164
+ return -1;
165
+ return 1;
153
166
  }
154
167
 
155
- #define BUF_TYPE_WIDTH_MASK 0x7
156
- #define BUF_TYPE_CONVUTF8 0x8
168
+ #define BUF_TYPE_WIDTH_MASK 0x7
169
+ #define BUF_TYPE_CONVUTF8 0x8
157
170
 
158
- /* This function sends each character in a buffer to
159
- * do_esc_char(). It interprets the content formats
160
- * and converts to or from UTF8 as appropriate.
171
+ /*
172
+ * This function sends each character in a buffer to do_esc_char(). It
173
+ * interprets the content formats and converts to or from UTF8 as
174
+ * appropriate.
161
175
  */
162
176
 
163
177
  static int do_buf(unsigned char *buf, int buflen,
164
- int type, unsigned char flags, char *quotes, char_io *io_ch, void *arg)
178
+ int type, unsigned char flags, char *quotes, char_io *io_ch,
179
+ void *arg)
165
180
  {
166
- int i, outlen, len;
167
- unsigned char orflags, *p, *q;
168
- unsigned long c;
169
- p = buf;
170
- q = buf + buflen;
171
- outlen = 0;
172
- while(p != q) {
173
- if(p == buf && flags & ASN1_STRFLGS_ESC_2253) orflags = CHARTYPE_FIRST_ESC_2253;
174
- else orflags = 0;
175
- switch(type & BUF_TYPE_WIDTH_MASK) {
176
- case 4:
177
- c = ((unsigned long)*p++) << 24;
178
- c |= ((unsigned long)*p++) << 16;
179
- c |= ((unsigned long)*p++) << 8;
180
- c |= *p++;
181
- break;
182
-
183
- case 2:
184
- c = ((unsigned long)*p++) << 8;
185
- c |= *p++;
186
- break;
187
-
188
- case 1:
189
- c = *p++;
190
- break;
191
-
192
- case 0:
193
- i = UTF8_getc(p, buflen, &c);
194
- if(i < 0) return -1; /* Invalid UTF8String */
195
- p += i;
196
- break;
197
- default:
198
- return -1; /* invalid width */
199
- }
200
- if (p == q && flags & ASN1_STRFLGS_ESC_2253) orflags = CHARTYPE_LAST_ESC_2253;
201
- if(type & BUF_TYPE_CONVUTF8) {
202
- unsigned char utfbuf[6];
203
- int utflen;
204
- utflen = UTF8_putc(utfbuf, sizeof utfbuf, c);
205
- for(i = 0; i < utflen; i++) {
206
- /* We don't need to worry about setting orflags correctly
207
- * because if utflen==1 its value will be correct anyway
208
- * otherwise each character will be > 0x7f and so the
209
- * character will never be escaped on first and last.
210
- */
211
- len = do_esc_char(utfbuf[i], (unsigned char)(flags | orflags), quotes, io_ch, arg);
212
- if(len < 0) return -1;
213
- outlen += len;
214
- }
215
- } else {
216
- len = do_esc_char(c, (unsigned char)(flags | orflags), quotes, io_ch, arg);
217
- if(len < 0) return -1;
218
- outlen += len;
219
- }
220
- }
221
- return outlen;
181
+ int i, outlen, len;
182
+ unsigned char orflags, *p, *q;
183
+ unsigned long c;
184
+ p = buf;
185
+ q = buf + buflen;
186
+ outlen = 0;
187
+ while (p != q) {
188
+ if (p == buf && flags & ASN1_STRFLGS_ESC_2253)
189
+ orflags = CHARTYPE_FIRST_ESC_2253;
190
+ else
191
+ orflags = 0;
192
+ switch (type & BUF_TYPE_WIDTH_MASK) {
193
+ case 4:
194
+ c = ((unsigned long)*p++) << 24;
195
+ c |= ((unsigned long)*p++) << 16;
196
+ c |= ((unsigned long)*p++) << 8;
197
+ c |= *p++;
198
+ break;
199
+
200
+ case 2:
201
+ c = ((unsigned long)*p++) << 8;
202
+ c |= *p++;
203
+ break;
204
+
205
+ case 1:
206
+ c = *p++;
207
+ break;
208
+
209
+ case 0:
210
+ i = UTF8_getc(p, buflen, &c);
211
+ if (i < 0)
212
+ return -1; /* Invalid UTF8String */
213
+ p += i;
214
+ break;
215
+ default:
216
+ return -1; /* invalid width */
217
+ }
218
+ if (p == q && flags & ASN1_STRFLGS_ESC_2253)
219
+ orflags = CHARTYPE_LAST_ESC_2253;
220
+ if (type & BUF_TYPE_CONVUTF8) {
221
+ unsigned char utfbuf[6];
222
+ int utflen;
223
+ utflen = UTF8_putc(utfbuf, sizeof utfbuf, c);
224
+ for (i = 0; i < utflen; i++) {
225
+ /*
226
+ * We don't need to worry about setting orflags correctly
227
+ * because if utflen==1 its value will be correct anyway
228
+ * otherwise each character will be > 0x7f and so the
229
+ * character will never be escaped on first and last.
230
+ */
231
+ len =
232
+ do_esc_char(utfbuf[i], (unsigned char)(flags | orflags),
233
+ quotes, io_ch, arg);
234
+ if (len < 0)
235
+ return -1;
236
+ outlen += len;
237
+ }
238
+ } else {
239
+ len =
240
+ do_esc_char(c, (unsigned char)(flags | orflags), quotes,
241
+ io_ch, arg);
242
+ if (len < 0)
243
+ return -1;
244
+ outlen += len;
245
+ }
246
+ }
247
+ return outlen;
222
248
  }
223
249
 
224
250
  /* This function hex dumps a buffer of characters */
225
251
 
226
- static int do_hex_dump(char_io *io_ch, void *arg, unsigned char *buf, int buflen)
252
+ static int do_hex_dump(char_io *io_ch, void *arg, unsigned char *buf,
253
+ int buflen)
227
254
  {
228
- static const char hexdig[] = "0123456789ABCDEF";
229
- unsigned char *p, *q;
230
- char hextmp[2];
231
- if(arg) {
232
- p = buf;
233
- q = buf + buflen;
234
- while(p != q) {
235
- hextmp[0] = hexdig[*p >> 4];
236
- hextmp[1] = hexdig[*p & 0xf];
237
- if(!io_ch(arg, hextmp, 2)) return -1;
238
- p++;
239
- }
240
- }
241
- return buflen << 1;
255
+ static const char hexdig[] = "0123456789ABCDEF";
256
+ unsigned char *p, *q;
257
+ char hextmp[2];
258
+ if (arg) {
259
+ p = buf;
260
+ q = buf + buflen;
261
+ while (p != q) {
262
+ hextmp[0] = hexdig[*p >> 4];
263
+ hextmp[1] = hexdig[*p & 0xf];
264
+ if (!io_ch(arg, hextmp, 2))
265
+ return -1;
266
+ p++;
267
+ }
268
+ }
269
+ return buflen << 1;
242
270
  }
243
271
 
244
- /* "dump" a string. This is done when the type is unknown,
245
- * or the flags request it. We can either dump the content
246
- * octets or the entire DER encoding. This uses the RFC2253
247
- * #01234 format.
272
+ /*
273
+ * "dump" a string. This is done when the type is unknown, or the flags
274
+ * request it. We can either dump the content octets or the entire DER
275
+ * encoding. This uses the RFC2253 #01234 format.
248
276
  */
249
277
 
250
- static int do_dump(unsigned long lflags, char_io *io_ch, void *arg, ASN1_STRING *str)
278
+ static int do_dump(unsigned long lflags, char_io *io_ch, void *arg,
279
+ ASN1_STRING *str)
251
280
  {
252
- /* Placing the ASN1_STRING in a temp ASN1_TYPE allows
253
- * the DER encoding to readily obtained
254
- */
255
- ASN1_TYPE t;
256
- unsigned char *der_buf, *p;
257
- int outlen, der_len;
258
-
259
- if(!io_ch(arg, "#", 1)) return -1;
260
- /* If we don't dump DER encoding just dump content octets */
261
- if(!(lflags & ASN1_STRFLGS_DUMP_DER)) {
262
- outlen = do_hex_dump(io_ch, arg, str->data, str->length);
263
- if(outlen < 0) return -1;
264
- return outlen + 1;
265
- }
266
- t.type = str->type;
267
- t.value.ptr = (char *)str;
268
- der_len = i2d_ASN1_TYPE(&t, NULL);
269
- der_buf = OPENSSL_malloc(der_len);
270
- if(!der_buf) return -1;
271
- p = der_buf;
272
- i2d_ASN1_TYPE(&t, &p);
273
- outlen = do_hex_dump(io_ch, arg, der_buf, der_len);
274
- OPENSSL_free(der_buf);
275
- if(outlen < 0) return -1;
276
- return outlen + 1;
281
+ /*
282
+ * Placing the ASN1_STRING in a temp ASN1_TYPE allows the DER encoding to
283
+ * readily obtained
284
+ */
285
+ ASN1_TYPE t;
286
+ unsigned char *der_buf, *p;
287
+ int outlen, der_len;
288
+
289
+ if (!io_ch(arg, "#", 1))
290
+ return -1;
291
+ /* If we don't dump DER encoding just dump content octets */
292
+ if (!(lflags & ASN1_STRFLGS_DUMP_DER)) {
293
+ outlen = do_hex_dump(io_ch, arg, str->data, str->length);
294
+ if (outlen < 0)
295
+ return -1;
296
+ return outlen + 1;
297
+ }
298
+ t.type = str->type;
299
+ t.value.ptr = (char *)str;
300
+ der_len = i2d_ASN1_TYPE(&t, NULL);
301
+ der_buf = OPENSSL_malloc(der_len);
302
+ if (!der_buf)
303
+ return -1;
304
+ p = der_buf;
305
+ i2d_ASN1_TYPE(&t, &p);
306
+ outlen = do_hex_dump(io_ch, arg, der_buf, der_len);
307
+ OPENSSL_free(der_buf);
308
+ if (outlen < 0)
309
+ return -1;
310
+ return outlen + 1;
277
311
  }
278
312
 
279
- /* Lookup table to convert tags to character widths,
280
- * 0 = UTF8 encoded, -1 is used for non string types
281
- * otherwise it is the number of bytes per character
313
+ /*
314
+ * Lookup table to convert tags to character widths, 0 = UTF8 encoded, -1 is
315
+ * used for non string types otherwise it is the number of bytes per
316
+ * character
282
317
  */
283
318
 
284
319
  static const signed char tag2nbyte[] = {
285
- -1, -1, -1, -1, -1, /* 0-4 */
286
- -1, -1, -1, -1, -1, /* 5-9 */
287
- -1, -1, 0, -1, /* 10-13 */
288
- -1, -1, -1, -1, /* 15-17 */
289
- -1, 1, 1, /* 18-20 */
290
- -1, 1, 1, 1, /* 21-24 */
291
- -1, 1, -1, /* 25-27 */
292
- 4, -1, 2 /* 28-30 */
320
+ -1, -1, -1, -1, -1, /* 0-4 */
321
+ -1, -1, -1, -1, -1, /* 5-9 */
322
+ -1, -1, 0, -1, /* 10-13 */
323
+ -1, -1, -1, -1, /* 15-17 */
324
+ -1, 1, 1, /* 18-20 */
325
+ -1, 1, 1, 1, /* 21-24 */
326
+ -1, 1, -1, /* 25-27 */
327
+ 4, -1, 2 /* 28-30 */
293
328
  };
294
329
 
295
- /* This is the main function, print out an
296
- * ASN1_STRING taking note of various escape
297
- * and display options. Returns number of
298
- * characters written or -1 if an error
299
- * occurred.
330
+ /*
331
+ * This is the main function, print out an ASN1_STRING taking note of various
332
+ * escape and display options. Returns number of characters written or -1 if
333
+ * an error occurred.
300
334
  */
301
335
 
302
- static int do_print_ex(char_io *io_ch, void *arg, unsigned long lflags, ASN1_STRING *str)
336
+ static int do_print_ex(char_io *io_ch, void *arg, unsigned long lflags,
337
+ ASN1_STRING *str)
303
338
  {
304
- int outlen, len;
305
- int type;
306
- char quotes;
307
- unsigned char flags;
308
- quotes = 0;
309
- /* Keep a copy of escape flags */
310
- flags = (unsigned char)(lflags & ESC_FLAGS);
311
-
312
- type = str->type;
313
-
314
- outlen = 0;
315
-
316
-
317
- if(lflags & ASN1_STRFLGS_SHOW_TYPE) {
318
- const char *tagname;
319
- tagname = ASN1_tag2str(type);
320
- outlen += strlen(tagname);
321
- if(!io_ch(arg, tagname, outlen) || !io_ch(arg, ":", 1)) return -1;
322
- outlen++;
323
- }
324
-
325
- /* Decide what to do with type, either dump content or display it */
326
-
327
- /* Dump everything */
328
- if(lflags & ASN1_STRFLGS_DUMP_ALL) type = -1;
329
- /* Ignore the string type */
330
- else if(lflags & ASN1_STRFLGS_IGNORE_TYPE) type = 1;
331
- else {
332
- /* Else determine width based on type */
333
- if((type > 0) && (type < 31)) type = tag2nbyte[type];
334
- else type = -1;
335
- if((type == -1) && !(lflags & ASN1_STRFLGS_DUMP_UNKNOWN)) type = 1;
336
- }
337
-
338
- if(type == -1) {
339
- len = do_dump(lflags, io_ch, arg, str);
340
- if(len < 0) return -1;
341
- outlen += len;
342
- return outlen;
343
- }
344
-
345
- if(lflags & ASN1_STRFLGS_UTF8_CONVERT) {
346
- /* Note: if string is UTF8 and we want
347
- * to convert to UTF8 then we just interpret
348
- * it as 1 byte per character to avoid converting
349
- * twice.
350
- */
351
- if(!type) type = 1;
352
- else type |= BUF_TYPE_CONVUTF8;
353
- }
354
-
355
- len = do_buf(str->data, str->length, type, flags, &quotes, io_ch, NULL);
356
- if(len < 0) return -1;
357
- outlen += len;
358
- if(quotes) outlen += 2;
359
- if(!arg) return outlen;
360
- if(quotes && !io_ch(arg, "\"", 1)) return -1;
361
- if(do_buf(str->data, str->length, type, flags, NULL, io_ch, arg) < 0)
362
- return -1;
363
- if(quotes && !io_ch(arg, "\"", 1)) return -1;
364
- return outlen;
339
+ int outlen, len;
340
+ int type;
341
+ char quotes;
342
+ unsigned char flags;
343
+ quotes = 0;
344
+ /* Keep a copy of escape flags */
345
+ flags = (unsigned char)(lflags & ESC_FLAGS);
346
+
347
+ type = str->type;
348
+
349
+ outlen = 0;
350
+
351
+ if (lflags & ASN1_STRFLGS_SHOW_TYPE) {
352
+ const char *tagname;
353
+ tagname = ASN1_tag2str(type);
354
+ outlen += strlen(tagname);
355
+ if (!io_ch(arg, tagname, outlen) || !io_ch(arg, ":", 1))
356
+ return -1;
357
+ outlen++;
358
+ }
359
+
360
+ /* Decide what to do with type, either dump content or display it */
361
+
362
+ /* Dump everything */
363
+ if (lflags & ASN1_STRFLGS_DUMP_ALL)
364
+ type = -1;
365
+ /* Ignore the string type */
366
+ else if (lflags & ASN1_STRFLGS_IGNORE_TYPE)
367
+ type = 1;
368
+ else {
369
+ /* Else determine width based on type */
370
+ if ((type > 0) && (type < 31))
371
+ type = tag2nbyte[type];
372
+ else
373
+ type = -1;
374
+ if ((type == -1) && !(lflags & ASN1_STRFLGS_DUMP_UNKNOWN))
375
+ type = 1;
376
+ }
377
+
378
+ if (type == -1) {
379
+ len = do_dump(lflags, io_ch, arg, str);
380
+ if (len < 0)
381
+ return -1;
382
+ outlen += len;
383
+ return outlen;
384
+ }
385
+
386
+ if (lflags & ASN1_STRFLGS_UTF8_CONVERT) {
387
+ /*
388
+ * Note: if string is UTF8 and we want to convert to UTF8 then we
389
+ * just interpret it as 1 byte per character to avoid converting
390
+ * twice.
391
+ */
392
+ if (!type)
393
+ type = 1;
394
+ else
395
+ type |= BUF_TYPE_CONVUTF8;
396
+ }
397
+
398
+ len = do_buf(str->data, str->length, type, flags, &quotes, io_ch, NULL);
399
+ if (len < 0)
400
+ return -1;
401
+ outlen += len;
402
+ if (quotes)
403
+ outlen += 2;
404
+ if (!arg)
405
+ return outlen;
406
+ if (quotes && !io_ch(arg, "\"", 1))
407
+ return -1;
408
+ if (do_buf(str->data, str->length, type, flags, NULL, io_ch, arg) < 0)
409
+ return -1;
410
+ if (quotes && !io_ch(arg, "\"", 1))
411
+ return -1;
412
+ return outlen;
365
413
  }
366
414
 
367
415
  /* Used for line indenting: print 'indent' spaces */
368
416
 
369
417
  static int do_indent(char_io *io_ch, void *arg, int indent)
370
418
  {
371
- int i;
372
- for(i = 0; i < indent; i++)
373
- if(!io_ch(arg, " ", 1)) return 0;
374
- return 1;
419
+ int i;
420
+ for (i = 0; i < indent; i++)
421
+ if (!io_ch(arg, " ", 1))
422
+ return 0;
423
+ return 1;
375
424
  }
376
425
 
377
- #define FN_WIDTH_LN 25
378
- #define FN_WIDTH_SN 10
426
+ #define FN_WIDTH_LN 25
427
+ #define FN_WIDTH_SN 10
379
428
 
380
429
  static int do_name_ex(char_io *io_ch, void *arg, X509_NAME *n,
381
- int indent, unsigned long flags)
430
+ int indent, unsigned long flags)
382
431
  {
383
- int i, prev = -1, orflags, cnt;
384
- int fn_opt, fn_nid;
385
- ASN1_OBJECT *fn;
386
- ASN1_STRING *val;
387
- X509_NAME_ENTRY *ent;
388
- char objtmp[80];
389
- const char *objbuf;
390
- int outlen, len;
391
- const char *sep_dn, *sep_mv, *sep_eq;
392
- int sep_dn_len, sep_mv_len, sep_eq_len;
393
- if(indent < 0) indent = 0;
394
- outlen = indent;
395
- if(!do_indent(io_ch, arg, indent)) return -1;
396
- switch (flags & XN_FLAG_SEP_MASK)
397
- {
398
- case XN_FLAG_SEP_MULTILINE:
399
- sep_dn = "\n";
400
- sep_dn_len = 1;
401
- sep_mv = " + ";
402
- sep_mv_len = 3;
403
- break;
404
-
405
- case XN_FLAG_SEP_COMMA_PLUS:
406
- sep_dn = ",";
407
- sep_dn_len = 1;
408
- sep_mv = "+";
409
- sep_mv_len = 1;
410
- indent = 0;
411
- break;
412
-
413
- case XN_FLAG_SEP_CPLUS_SPC:
414
- sep_dn = ", ";
415
- sep_dn_len = 2;
416
- sep_mv = " + ";
417
- sep_mv_len = 3;
418
- indent = 0;
419
- break;
420
-
421
- case XN_FLAG_SEP_SPLUS_SPC:
422
- sep_dn = "; ";
423
- sep_dn_len = 2;
424
- sep_mv = " + ";
425
- sep_mv_len = 3;
426
- indent = 0;
427
- break;
428
-
429
- default:
430
- return -1;
431
- }
432
-
433
- if(flags & XN_FLAG_SPC_EQ) {
434
- sep_eq = " = ";
435
- sep_eq_len = 3;
436
- } else {
437
- sep_eq = "=";
438
- sep_eq_len = 1;
439
- }
440
-
441
- fn_opt = flags & XN_FLAG_FN_MASK;
442
-
443
- cnt = X509_NAME_entry_count(n);
444
- for(i = 0; i < cnt; i++) {
445
- if(flags & XN_FLAG_DN_REV)
446
- ent = X509_NAME_get_entry(n, cnt - i - 1);
447
- else ent = X509_NAME_get_entry(n, i);
448
- if(prev != -1) {
449
- if(prev == ent->set) {
450
- if(!io_ch(arg, sep_mv, sep_mv_len)) return -1;
451
- outlen += sep_mv_len;
452
- } else {
453
- if(!io_ch(arg, sep_dn, sep_dn_len)) return -1;
454
- outlen += sep_dn_len;
455
- if(!do_indent(io_ch, arg, indent)) return -1;
456
- outlen += indent;
457
- }
458
- }
459
- prev = ent->set;
460
- fn = X509_NAME_ENTRY_get_object(ent);
461
- val = X509_NAME_ENTRY_get_data(ent);
462
- fn_nid = OBJ_obj2nid(fn);
463
- if(fn_opt != XN_FLAG_FN_NONE) {
464
- int objlen, fld_len;
465
- if((fn_opt == XN_FLAG_FN_OID) || (fn_nid==NID_undef) ) {
466
- OBJ_obj2txt(objtmp, sizeof objtmp, fn, 1);
467
- fld_len = 0; /* XXX: what should this be? */
468
- objbuf = objtmp;
469
- } else {
470
- if(fn_opt == XN_FLAG_FN_SN) {
471
- fld_len = FN_WIDTH_SN;
472
- objbuf = OBJ_nid2sn(fn_nid);
473
- } else if(fn_opt == XN_FLAG_FN_LN) {
474
- fld_len = FN_WIDTH_LN;
475
- objbuf = OBJ_nid2ln(fn_nid);
476
- } else {
477
- fld_len = 0; /* XXX: what should this be? */
478
- objbuf = "";
479
- }
480
- }
481
- objlen = strlen(objbuf);
482
- if(!io_ch(arg, objbuf, objlen)) return -1;
483
- if ((objlen < fld_len) && (flags & XN_FLAG_FN_ALIGN)) {
484
- if (!do_indent(io_ch, arg, fld_len - objlen)) return -1;
485
- outlen += fld_len - objlen;
486
- }
487
- if(!io_ch(arg, sep_eq, sep_eq_len)) return -1;
488
- outlen += objlen + sep_eq_len;
489
- }
490
- /* If the field name is unknown then fix up the DER dump
491
- * flag. We might want to limit this further so it will
492
- * DER dump on anything other than a few 'standard' fields.
493
- */
494
- if((fn_nid == NID_undef) && (flags & XN_FLAG_DUMP_UNKNOWN_FIELDS))
495
- orflags = ASN1_STRFLGS_DUMP_ALL;
496
- else orflags = 0;
497
-
498
- len = do_print_ex(io_ch, arg, flags | orflags, val);
499
- if(len < 0) return -1;
500
- outlen += len;
501
- }
502
- return outlen;
432
+ int i, prev = -1, orflags, cnt;
433
+ int fn_opt, fn_nid;
434
+ ASN1_OBJECT *fn;
435
+ ASN1_STRING *val;
436
+ X509_NAME_ENTRY *ent;
437
+ char objtmp[80];
438
+ const char *objbuf;
439
+ int outlen, len;
440
+ const char *sep_dn, *sep_mv, *sep_eq;
441
+ int sep_dn_len, sep_mv_len, sep_eq_len;
442
+ if (indent < 0)
443
+ indent = 0;
444
+ outlen = indent;
445
+ if (!do_indent(io_ch, arg, indent))
446
+ return -1;
447
+ switch (flags & XN_FLAG_SEP_MASK) {
448
+ case XN_FLAG_SEP_MULTILINE:
449
+ sep_dn = "\n";
450
+ sep_dn_len = 1;
451
+ sep_mv = " + ";
452
+ sep_mv_len = 3;
453
+ break;
454
+
455
+ case XN_FLAG_SEP_COMMA_PLUS:
456
+ sep_dn = ",";
457
+ sep_dn_len = 1;
458
+ sep_mv = "+";
459
+ sep_mv_len = 1;
460
+ indent = 0;
461
+ break;
462
+
463
+ case XN_FLAG_SEP_CPLUS_SPC:
464
+ sep_dn = ", ";
465
+ sep_dn_len = 2;
466
+ sep_mv = " + ";
467
+ sep_mv_len = 3;
468
+ indent = 0;
469
+ break;
470
+
471
+ case XN_FLAG_SEP_SPLUS_SPC:
472
+ sep_dn = "; ";
473
+ sep_dn_len = 2;
474
+ sep_mv = " + ";
475
+ sep_mv_len = 3;
476
+ indent = 0;
477
+ break;
478
+
479
+ default:
480
+ return -1;
481
+ }
482
+
483
+ if (flags & XN_FLAG_SPC_EQ) {
484
+ sep_eq = " = ";
485
+ sep_eq_len = 3;
486
+ } else {
487
+ sep_eq = "=";
488
+ sep_eq_len = 1;
489
+ }
490
+
491
+ fn_opt = flags & XN_FLAG_FN_MASK;
492
+
493
+ cnt = X509_NAME_entry_count(n);
494
+ for (i = 0; i < cnt; i++) {
495
+ if (flags & XN_FLAG_DN_REV)
496
+ ent = X509_NAME_get_entry(n, cnt - i - 1);
497
+ else
498
+ ent = X509_NAME_get_entry(n, i);
499
+ if (prev != -1) {
500
+ if (prev == ent->set) {
501
+ if (!io_ch(arg, sep_mv, sep_mv_len))
502
+ return -1;
503
+ outlen += sep_mv_len;
504
+ } else {
505
+ if (!io_ch(arg, sep_dn, sep_dn_len))
506
+ return -1;
507
+ outlen += sep_dn_len;
508
+ if (!do_indent(io_ch, arg, indent))
509
+ return -1;
510
+ outlen += indent;
511
+ }
512
+ }
513
+ prev = ent->set;
514
+ fn = X509_NAME_ENTRY_get_object(ent);
515
+ val = X509_NAME_ENTRY_get_data(ent);
516
+ fn_nid = OBJ_obj2nid(fn);
517
+ if (fn_opt != XN_FLAG_FN_NONE) {
518
+ int objlen, fld_len;
519
+ if ((fn_opt == XN_FLAG_FN_OID) || (fn_nid == NID_undef)) {
520
+ OBJ_obj2txt(objtmp, sizeof objtmp, fn, 1);
521
+ fld_len = 0; /* XXX: what should this be? */
522
+ objbuf = objtmp;
523
+ } else {
524
+ if (fn_opt == XN_FLAG_FN_SN) {
525
+ fld_len = FN_WIDTH_SN;
526
+ objbuf = OBJ_nid2sn(fn_nid);
527
+ } else if (fn_opt == XN_FLAG_FN_LN) {
528
+ fld_len = FN_WIDTH_LN;
529
+ objbuf = OBJ_nid2ln(fn_nid);
530
+ } else {
531
+ fld_len = 0; /* XXX: what should this be? */
532
+ objbuf = "";
533
+ }
534
+ }
535
+ objlen = strlen(objbuf);
536
+ if (!io_ch(arg, objbuf, objlen))
537
+ return -1;
538
+ if ((objlen < fld_len) && (flags & XN_FLAG_FN_ALIGN)) {
539
+ if (!do_indent(io_ch, arg, fld_len - objlen))
540
+ return -1;
541
+ outlen += fld_len - objlen;
542
+ }
543
+ if (!io_ch(arg, sep_eq, sep_eq_len))
544
+ return -1;
545
+ outlen += objlen + sep_eq_len;
546
+ }
547
+ /*
548
+ * If the field name is unknown then fix up the DER dump flag. We
549
+ * might want to limit this further so it will DER dump on anything
550
+ * other than a few 'standard' fields.
551
+ */
552
+ if ((fn_nid == NID_undef) && (flags & XN_FLAG_DUMP_UNKNOWN_FIELDS))
553
+ orflags = ASN1_STRFLGS_DUMP_ALL;
554
+ else
555
+ orflags = 0;
556
+
557
+ len = do_print_ex(io_ch, arg, flags | orflags, val);
558
+ if (len < 0)
559
+ return -1;
560
+ outlen += len;
561
+ }
562
+ return outlen;
503
563
  }
504
564
 
505
565
  /* Wrappers round the main functions */
506
566
 
507
- int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, unsigned long flags)
567
+ int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent,
568
+ unsigned long flags)
508
569
  {
509
- if(flags == XN_FLAG_COMPAT)
510
- return X509_NAME_print(out, nm, indent);
511
- return do_name_ex(send_bio_chars, out, nm, indent, flags);
570
+ if (flags == XN_FLAG_COMPAT)
571
+ return X509_NAME_print(out, nm, indent);
572
+ return do_name_ex(send_bio_chars, out, nm, indent, flags);
512
573
  }
513
574
 
514
575
  #ifndef OPENSSL_NO_FP_API
515
- int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, unsigned long flags)
576
+ int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent,
577
+ unsigned long flags)
516
578
  {
517
- if(flags == XN_FLAG_COMPAT)
518
- {
519
- BIO *btmp;
520
- int ret;
521
- btmp = BIO_new_fp(fp, BIO_NOCLOSE);
522
- if(!btmp) return -1;
523
- ret = X509_NAME_print(btmp, nm, indent);
524
- BIO_free(btmp);
525
- return ret;
526
- }
527
- return do_name_ex(send_fp_chars, fp, nm, indent, flags);
579
+ if (flags == XN_FLAG_COMPAT) {
580
+ BIO *btmp;
581
+ int ret;
582
+ btmp = BIO_new_fp(fp, BIO_NOCLOSE);
583
+ if (!btmp)
584
+ return -1;
585
+ ret = X509_NAME_print(btmp, nm, indent);
586
+ BIO_free(btmp);
587
+ return ret;
588
+ }
589
+ return do_name_ex(send_fp_chars, fp, nm, indent, flags);
528
590
  }
529
591
  #endif
530
592
 
531
593
  int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags)
532
594
  {
533
- return do_print_ex(send_bio_chars, out, flags, str);
595
+ return do_print_ex(send_bio_chars, out, flags, str);
534
596
  }
535
597
 
536
598
  #ifndef OPENSSL_NO_FP_API
537
599
  int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags)
538
600
  {
539
- return do_print_ex(send_fp_chars, fp, flags, str);
601
+ return do_print_ex(send_fp_chars, fp, flags, str);
540
602
  }
541
603
  #endif
542
604
 
543
- /* Utility function: convert any string type to UTF8, returns number of bytes
605
+ /*
606
+ * Utility function: convert any string type to UTF8, returns number of bytes
544
607
  * in output string or a negative error code
545
608
  */
546
609
 
547
610
  int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in)
548
611
  {
549
- ASN1_STRING stmp, *str = &stmp;
550
- int mbflag, type, ret;
551
- if(!in) return -1;
552
- type = in->type;
553
- if((type < 0) || (type > 30)) return -1;
554
- mbflag = tag2nbyte[type];
555
- if(mbflag == -1) return -1;
556
- mbflag |= MBSTRING_FLAG;
557
- stmp.data = NULL;
558
- stmp.length = 0;
559
- stmp.flags = 0;
560
- ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING);
561
- if(ret < 0) return ret;
562
- *out = stmp.data;
563
- return stmp.length;
612
+ ASN1_STRING stmp, *str = &stmp;
613
+ int mbflag, type, ret;
614
+ if (!in)
615
+ return -1;
616
+ type = in->type;
617
+ if ((type < 0) || (type > 30))
618
+ return -1;
619
+ mbflag = tag2nbyte[type];
620
+ if (mbflag == -1)
621
+ return -1;
622
+ mbflag |= MBSTRING_FLAG;
623
+ stmp.data = NULL;
624
+ stmp.length = 0;
625
+ stmp.flags = 0;
626
+ ret =
627
+ ASN1_mbstring_copy(&str, in->data, in->length, mbflag,
628
+ B_ASN1_UTF8STRING);
629
+ if (ret < 0)
630
+ return ret;
631
+ *out = stmp.data;
632
+ return stmp.length;
564
633
  }