grpc 1.0.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -1,75 +1,18 @@
1
- /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2
- * All rights reserved.
1
+ /* Copyright (c) 2016, Google Inc.
3
2
  *
4
- * This package is an SSL implementation written
5
- * by Eric Young (eay@cryptsoft.com).
6
- * The implementation was written so as to conform with Netscapes SSL.
7
- *
8
- * This library is free for commercial and non-commercial use as long as
9
- * the following conditions are aheared to. The following conditions
10
- * apply to all code found in this distribution, be it the RC4, RSA,
11
- * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12
- * included with this distribution is covered by the same copyright terms
13
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14
- *
15
- * Copyright remains Eric Young's, and as such any Copyright notices in
16
- * the code are not to be removed.
17
- * If this package is used in a product, Eric Young should be given attribution
18
- * as the author of the parts of the library used.
19
- * This can be in the form of a textual message at program startup or
20
- * in documentation (online or textual) provided with the package.
21
- *
22
- * Redistribution and use in source and binary forms, with or without
23
- * modification, are permitted provided that the following conditions
24
- * are met:
25
- * 1. Redistributions of source code must retain the copyright
26
- * notice, this list of conditions and the following disclaimer.
27
- * 2. Redistributions in binary form must reproduce the above copyright
28
- * notice, this list of conditions and the following disclaimer in the
29
- * documentation and/or other materials provided with the distribution.
30
- * 3. All advertising materials mentioning features or use of this software
31
- * must display the following acknowledgement:
32
- * "This product includes cryptographic software written by
33
- * Eric Young (eay@cryptsoft.com)"
34
- * The word 'cryptographic' can be left out if the rouines from the library
35
- * being used are not cryptographic related :-).
36
- * 4. If you include any Windows specific code (or a derivative thereof) from
37
- * the apps directory (application code) you must include an acknowledgement:
38
- * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39
- *
40
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50
- * SUCH DAMAGE.
51
- *
52
- * The licence and distribution terms for any publically available version or
53
- * derivative of this code cannot be changed. i.e. this code cannot simply be
54
- * copied and put under another distribution licence
55
- * [including the GNU Public Licence.]
56
- */
57
-
58
- #ifndef HEADER_ASN1_MAC_H
59
- #define HEADER_ASN1_MAC_H
60
-
61
- #include <openssl/asn1.h>
62
-
63
- #ifdef __cplusplus
64
- extern "C" {
65
- #endif
66
-
67
-
68
- OPENSSL_EXPORT int asn1_GetSequence(ASN1_const_CTX *c, long *length);
69
-
70
-
71
- #ifdef __cplusplus
72
- }
73
- #endif
74
-
75
- #endif
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ /* This header is provided in order to make compiling against code that expects
16
+ OpenSSL easier. */
17
+
18
+ #include "asn1.h"
@@ -631,6 +631,7 @@ typedef struct ASN1_EXTERN_FUNCS_st {
631
631
  ASN1_ex_free_func *asn1_ex_clear;
632
632
  ASN1_ex_d2i *asn1_ex_d2i;
633
633
  ASN1_ex_i2d *asn1_ex_i2d;
634
+ /* asn1_ex_print is unused. */
634
635
  ASN1_ex_print_func *asn1_ex_print;
635
636
  } ASN1_EXTERN_FUNCS;
636
637
 
@@ -835,17 +836,6 @@ typedef struct ASN1_STREAM_ARG_st {
835
836
  return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \
836
837
  }
837
838
 
838
- #define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \
839
- IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname)
840
-
841
- #define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \
842
- int fname##_print_ctx(BIO *out, stname *x, int indent, \
843
- const ASN1_PCTX *pctx) \
844
- { \
845
- return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \
846
- ASN1_ITEM_rptr(itname), pctx); \
847
- }
848
-
849
839
  #define IMPLEMENT_ASN1_FUNCTIONS_const(name) \
850
840
  IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name)
851
841
 
@@ -60,7 +60,11 @@
60
60
  #include <stdint.h>
61
61
  #include <sys/types.h>
62
62
 
63
- #include <openssl/opensslfeatures.h>
63
+ #include <openssl/opensslconf.h>
64
+
65
+ #if defined(BORINGSSL_PREFIX)
66
+ #include <boringssl_prefix_symbols.h>
67
+ #endif
64
68
 
65
69
  #if defined(__cplusplus)
66
70
  extern "C" {
@@ -79,8 +83,9 @@ extern "C" {
79
83
  #elif defined(__arm) || defined(__arm__) || defined(_M_ARM)
80
84
  #define OPENSSL_32_BIT
81
85
  #define OPENSSL_ARM
82
- #elif defined(__PPC64__) || defined(__powerpc64__)
86
+ #elif (defined(__PPC64__) || defined(__powerpc64__)) && defined(_LITTLE_ENDIAN)
83
87
  #define OPENSSL_64_BIT
88
+ #define OPENSSL_PPC64LE
84
89
  #elif defined(__mips__) && !defined(__LP64__)
85
90
  #define OPENSSL_32_BIT
86
91
  #define OPENSSL_MIPS
@@ -90,6 +95,8 @@ extern "C" {
90
95
  #elif defined(__pnacl__)
91
96
  #define OPENSSL_32_BIT
92
97
  #define OPENSSL_PNACL
98
+ #elif defined(__myriad2__)
99
+ #define OPENSSL_32_BIT
93
100
  #else
94
101
  #error "Unknown target CPU"
95
102
  #endif
@@ -109,9 +116,20 @@ extern "C" {
109
116
 
110
117
  #define OPENSSL_IS_BORINGSSL
111
118
  #define BORINGSSL_201512
119
+ #define BORINGSSL_201603
112
120
  #define OPENSSL_VERSION_NUMBER 0x10002000
113
121
  #define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER
114
122
 
123
+ /* BORINGSSL_API_VERSION is a positive integer that increments as BoringSSL
124
+ * changes over time. The value itself is not meaningful. It will be incremented
125
+ * whenever is convenient to coordinate an API change with consumers. This will
126
+ * not denote any special point in development.
127
+ *
128
+ * A consumer may use this symbol in the preprocessor to temporarily build
129
+ * against multiple revisions of BoringSSL at the same time. It is not
130
+ * recommended to do so for longer than is necessary. */
131
+ #define BORINGSSL_API_VERSION 2
132
+
115
133
  #if defined(BORINGSSL_SHARED_LIBRARY)
116
134
 
117
135
  #if defined(OPENSSL_WINDOWS)
@@ -141,11 +159,18 @@ extern "C" {
141
159
 
142
160
  #if defined(__GNUC__)
143
161
  #define OPENSSL_PRINTF_FORMAT_FUNC(string_index, first_to_check) \
144
- __attribute__((format(printf, string_index, first_to_check)))
162
+ __attribute__((__format__(__printf__, string_index, first_to_check)))
145
163
  #else
146
164
  #define OPENSSL_PRINTF_FORMAT_FUNC(string_index, first_to_check)
147
165
  #endif
148
166
 
167
+ /* OPENSSL_MSVC_PRAGMA emits a pragma on MSVC and nothing on other compilers. */
168
+ #if defined(_MSC_VER)
169
+ #define OPENSSL_MSVC_PRAGMA(arg) __pragma(arg)
170
+ #else
171
+ #define OPENSSL_MSVC_PRAGMA(arg)
172
+ #endif
173
+
149
174
 
150
175
  /* CRYPTO_THREADID is a dummy value. */
151
176
  typedef int CRYPTO_THREADID;
@@ -171,9 +196,12 @@ typedef struct asn1_string_st ASN1_UNIVERSALSTRING;
171
196
  typedef struct asn1_string_st ASN1_UTCTIME;
172
197
  typedef struct asn1_string_st ASN1_UTF8STRING;
173
198
  typedef struct asn1_string_st ASN1_VISIBLESTRING;
199
+ typedef struct asn1_type_st ASN1_TYPE;
174
200
 
175
201
  typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID;
202
+ typedef struct BASIC_CONSTRAINTS_st BASIC_CONSTRAINTS;
176
203
  typedef struct DIST_POINT_st DIST_POINT;
204
+ typedef struct DSA_SIG_st DSA_SIG;
177
205
  typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT;
178
206
  typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS;
179
207
  typedef struct Netscape_certificate_sequence NETSCAPE_CERT_SEQUENCE;
@@ -182,10 +210,12 @@ typedef struct Netscape_spki_st NETSCAPE_SPKI;
182
210
  typedef struct PBE2PARAM_st PBE2PARAM;
183
211
  typedef struct PBEPARAM_st PBEPARAM;
184
212
  typedef struct PBKDF2PARAM_st PBKDF2PARAM;
213
+ typedef struct RIPEMD160state_st RIPEMD160_CTX;
185
214
  typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE;
186
215
  typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL;
187
216
  typedef struct X509_POLICY_NODE_st X509_POLICY_NODE;
188
217
  typedef struct X509_POLICY_TREE_st X509_POLICY_TREE;
218
+ typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM;
189
219
  typedef struct X509_algor_st X509_ALGOR;
190
220
  typedef struct X509_crl_info_st X509_CRL_INFO;
191
221
  typedef struct X509_crl_st X509_CRL;
@@ -213,7 +243,9 @@ typedef struct conf_st CONF;
213
243
  typedef struct conf_value_st CONF_VALUE;
214
244
  typedef struct dh_st DH;
215
245
  typedef struct dsa_st DSA;
246
+ typedef struct ec_group_st EC_GROUP;
216
247
  typedef struct ec_key_st EC_KEY;
248
+ typedef struct ec_point_st EC_POINT;
217
249
  typedef struct ecdsa_method_st ECDSA_METHOD;
218
250
  typedef struct ecdsa_sig_st ECDSA_SIG;
219
251
  typedef struct engine_st ENGINE;
@@ -230,6 +262,7 @@ typedef struct evp_pkey_st EVP_PKEY;
230
262
  typedef struct hmac_ctx_st HMAC_CTX;
231
263
  typedef struct md4_state_st MD4_CTX;
232
264
  typedef struct md5_state_st MD5_CTX;
265
+ typedef struct newhope_poly_st NEWHOPE_POLY;
233
266
  typedef struct pkcs12_st PKCS12;
234
267
  typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO;
235
268
  typedef struct private_key_st X509_PKEY;
@@ -240,6 +273,7 @@ typedef struct rsa_st RSA;
240
273
  typedef struct sha256_state_st SHA256_CTX;
241
274
  typedef struct sha512_state_st SHA512_CTX;
242
275
  typedef struct sha_state_st SHA_CTX;
276
+ typedef struct spake2_ctx_st SPAKE2_CTX;
243
277
  typedef struct srtp_protection_profile_st SRTP_PROTECTION_PROFILE;
244
278
  typedef struct ssl_cipher_st SSL_CIPHER;
245
279
  typedef struct ssl_ctx_st SSL_CTX;
@@ -254,6 +288,7 @@ typedef struct x509_cert_aux_st X509_CERT_AUX;
254
288
  typedef struct x509_cert_pair_st X509_CERT_PAIR;
255
289
  typedef struct x509_cinf_st X509_CINF;
256
290
  typedef struct x509_crl_method_st X509_CRL_METHOD;
291
+ typedef struct x509_lookup_st X509_LOOKUP;
257
292
  typedef struct x509_revoked_st X509_REVOKED;
258
293
  typedef struct x509_st X509;
259
294
  typedef struct x509_store_ctx_st X509_STORE_CTX;
@@ -265,6 +300,113 @@ typedef void *OPENSSL_BLOCK;
265
300
 
266
301
  #if defined(__cplusplus)
267
302
  } /* extern C */
303
+
304
+ // MSVC doesn't set __cplusplus to 201103 to indicate C++11 support (see
305
+ // https://connect.microsoft.com/VisualStudio/feedback/details/763051/a-value-of-predefined-macro-cplusplus-is-still-199711l)
306
+ // so MSVC is just assumed to support C++11.
307
+ #if !defined(BORINGSSL_NO_CXX) && __cplusplus < 201103L && !defined(_MSC_VER)
308
+ #define BORINGSSL_NO_CXX
309
+ #endif
310
+
311
+ #if !defined(BORINGSSL_NO_CXX)
312
+ extern "C++" {
313
+
314
+ #include <memory>
315
+
316
+ // STLPort, used by some Android consumers, not have std::unique_ptr.
317
+ #if defined(_STLPORT_VERSION)
318
+ #define BORINGSSL_NO_CXX
319
+ #endif
320
+
321
+ } // extern C++
322
+ #endif // !BORINGSSL_NO_CXX
323
+
324
+ #if defined(BORINGSSL_NO_CXX)
325
+
326
+ #define BORINGSSL_MAKE_DELETER(type, deleter)
327
+ #define BORINGSSL_MAKE_STACK_DELETER(type, deleter)
328
+
329
+ #else
330
+
331
+ extern "C++" {
332
+
333
+ #include <memory>
334
+
335
+ namespace bssl {
336
+
337
+ namespace internal {
338
+
339
+ template <typename T>
340
+ struct DeleterImpl {};
341
+
342
+ template <typename T>
343
+ struct Deleter {
344
+ void operator()(T *ptr) {
345
+ // Rather than specialize Deleter for each type, we specialize
346
+ // DeleterImpl. This allows bssl::UniquePtr<T> to be used while only
347
+ // including base.h as long as the destructor is not emitted. This matches
348
+ // std::unique_ptr's behavior on forward-declared types.
349
+ //
350
+ // DeleterImpl itself is specialized in the corresponding module's header
351
+ // and must be included to release an object. If not included, the compiler
352
+ // will error that DeleterImpl<T> does not have a method Free.
353
+ DeleterImpl<T>::Free(ptr);
354
+ }
355
+ };
356
+
357
+ template <typename T, typename CleanupRet, void (*init)(T *),
358
+ CleanupRet (*cleanup)(T *)>
359
+ class StackAllocated {
360
+ public:
361
+ StackAllocated() { init(&ctx_); }
362
+ ~StackAllocated() { cleanup(&ctx_); }
363
+
364
+ T *get() { return &ctx_; }
365
+ const T *get() const { return &ctx_; }
366
+
367
+ void Reset() {
368
+ cleanup(&ctx_);
369
+ init(&ctx_);
370
+ }
371
+
372
+ private:
373
+ T ctx_;
374
+ };
375
+
376
+ } // namespace internal
377
+
378
+ #define BORINGSSL_MAKE_DELETER(type, deleter) \
379
+ namespace internal { \
380
+ template <> \
381
+ struct DeleterImpl<type> { \
382
+ static void Free(type *ptr) { deleter(ptr); } \
383
+ }; \
384
+ }
385
+
386
+ // This makes a unique_ptr to STACK_OF(type) that owns all elements on the
387
+ // stack, i.e. it uses sk_pop_free() to clean up.
388
+ #define BORINGSSL_MAKE_STACK_DELETER(type, deleter) \
389
+ namespace internal { \
390
+ template <> \
391
+ struct DeleterImpl<STACK_OF(type)> { \
392
+ static void Free(STACK_OF(type) *ptr) { \
393
+ sk_##type##_pop_free(ptr, deleter); \
394
+ } \
395
+ }; \
396
+ }
397
+
398
+ // Holds ownership of heap-allocated BoringSSL structures. Sample usage:
399
+ // bssl::UniquePtr<BIO> rsa(RSA_new());
400
+ // bssl::UniquePtr<BIO> bio(BIO_new(BIO_s_mem()));
401
+ template <typename T>
402
+ using UniquePtr = std::unique_ptr<T, internal::Deleter<T>>;
403
+
404
+ } // namespace bssl
405
+
406
+ } /* extern C++ */
407
+
408
+ #endif // !BORINGSSL_NO_CXX
409
+
268
410
  #endif
269
411
 
270
412
  #endif /* OPENSSL_HEADER_BASE_H */
@@ -87,15 +87,16 @@ OPENSSL_EXPORT int EVP_EncodedLength(size_t *out_len, size_t len);
87
87
 
88
88
  /* Decoding */
89
89
 
90
- /* EVP_DecodedLength sets |*out_len| to the maximum number of bytes
91
- * that will be needed to call |EVP_DecodeBase64| on an input of
92
- * length |len|. */
90
+ /* EVP_DecodedLength sets |*out_len| to the maximum number of bytes that will
91
+ * be needed to call |EVP_DecodeBase64| on an input of length |len|. It returns
92
+ * one on success or zero if |len| is not a valid length for a base64-encoded
93
+ * string. */
93
94
  OPENSSL_EXPORT int EVP_DecodedLength(size_t *out_len, size_t len);
94
95
 
95
96
  /* EVP_DecodeBase64 decodes |in_len| bytes from base64 and writes
96
97
  * |*out_len| bytes to |out|. |max_out| is the size of the output
97
98
  * buffer. If it is not enough for the maximum output size, the
98
- * operation fails. */
99
+ * operation fails. It returns one on success or zero on error. */
99
100
  OPENSSL_EXPORT int EVP_DecodeBase64(uint8_t *out, size_t *out_len,
100
101
  size_t max_out, const uint8_t *in,
101
102
  size_t in_len);
@@ -105,9 +106,7 @@ OPENSSL_EXPORT int EVP_DecodeBase64(uint8_t *out, size_t *out_len,
105
106
  *
106
107
  * OpenSSL provides a streaming base64 implementation, however its behavior is
107
108
  * very specific to PEM. It is also very lenient of invalid input. Use of any of
108
- * these functions is thus deprecated.
109
- *
110
- * TODO(davidben): Import upstream's rewrite that rejects the invalid input. */
109
+ * these functions is thus deprecated. */
111
110
 
112
111
  /* EVP_EncodeInit initialises |*ctx|, which is typically stack
113
112
  * allocated, for an encoding operation.
@@ -159,21 +158,25 @@ OPENSSL_EXPORT int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, uint8_t *out,
159
158
  *
160
159
  * WARNING: EVP_DecodeBlock's return value does not take padding into
161
160
  * account. It also strips leading whitespace and trailing
162
- * whitespace. */
161
+ * whitespace and minuses. */
163
162
  OPENSSL_EXPORT int EVP_DecodeBlock(uint8_t *dst, const uint8_t *src,
164
163
  size_t src_len);
165
164
 
166
165
 
167
166
  struct evp_encode_ctx_st {
168
- unsigned num; /* number saved in a partial encode/decode */
169
- unsigned length; /* The length is either the output line length
170
- * (in input bytes) or the shortest input line
171
- * length that is ok. Once decoding begins,
172
- * the length is adjusted up each time a longer
173
- * line is decoded */
174
- uint8_t enc_data[80]; /* data to encode */
175
- unsigned line_num; /* number read on current line */
176
- int expect_nl;
167
+ /* data_used indicates the number of bytes of |data| that are valid. When
168
+ * encoding, |data| will be filled and encoded as a lump. When decoding, only
169
+ * the first four bytes of |data| will be used. */
170
+ unsigned data_used;
171
+ uint8_t data[48];
172
+
173
+ /* eof_seen indicates that the end of the base64 data has been seen when
174
+ * decoding. Only whitespace can follow. */
175
+ char eof_seen;
176
+
177
+ /* error_encountered indicates that invalid base64 data was found. This will
178
+ * cause all future calls to fail. */
179
+ char error_encountered;
177
180
  };
178
181
 
179
182
 
@@ -61,6 +61,7 @@
61
61
 
62
62
  #include <stdio.h> /* For FILE */
63
63
 
64
+ #include <openssl/buffer.h>
64
65
  #include <openssl/err.h> /* for ERR_print_errors_fp */
65
66
  #include <openssl/ex_data.h>
66
67
  #include <openssl/stack.h>
@@ -95,8 +96,8 @@ OPENSSL_EXPORT int BIO_free(BIO *bio);
95
96
  * TODO(fork): remove. */
96
97
  OPENSSL_EXPORT void BIO_vfree(BIO *bio);
97
98
 
98
- /* BIO_up_ref increments the reference count of |bio| and returns it. */
99
- OPENSSL_EXPORT BIO *BIO_up_ref(BIO *bio);
99
+ /* BIO_up_ref increments the reference count of |bio| and returns one. */
100
+ OPENSSL_EXPORT int BIO_up_ref(BIO *bio);
100
101
 
101
102
 
102
103
  /* Basic I/O. */
@@ -151,6 +152,11 @@ OPENSSL_EXPORT long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg);
151
152
  * otherwise. */
152
153
  OPENSSL_EXPORT int BIO_reset(BIO *bio);
153
154
 
155
+ /* BIO_eof returns non-zero when |bio| has reached end-of-file. The precise
156
+ * meaning of which depends on the concrete type of |bio|. Note that in the
157
+ * case of BIO_pair this always returns non-zero. */
158
+ OPENSSL_EXPORT int BIO_eof(BIO *bio);
159
+
154
160
  /* BIO_set_flags ORs |flags| with |bio->flags|. */
155
161
  OPENSSL_EXPORT void BIO_set_flags(BIO *bio, int flags);
156
162
 
@@ -361,19 +367,17 @@ OPENSSL_EXPORT int BIO_read_asn1(BIO *bio, uint8_t **out, size_t *out_len,
361
367
  *
362
368
  * Memory BIOs support |BIO_gets| and |BIO_puts|.
363
369
  *
364
- * |BIO_eof| is true if no data is in the BIO.
365
- *
366
370
  * |BIO_ctrl_pending| returns the number of bytes currently stored. */
367
371
 
368
372
  /* BIO_s_mem returns a |BIO_METHOD| that uses a in-memory buffer. */
369
373
  OPENSSL_EXPORT const BIO_METHOD *BIO_s_mem(void);
370
374
 
371
- /* BIO_new_mem_buf creates BIO that reads and writes from |len| bytes at |buf|.
375
+ /* BIO_new_mem_buf creates read-only BIO that reads from |len| bytes at |buf|.
372
376
  * It does not take ownership of |buf|. It returns the BIO or NULL on error.
373
377
  *
374
378
  * If |len| is negative, then |buf| is treated as a NUL-terminated string, but
375
379
  * don't depend on this in new code. */
376
- OPENSSL_EXPORT BIO *BIO_new_mem_buf(void *buf, int len);
380
+ OPENSSL_EXPORT BIO *BIO_new_mem_buf(const void *buf, int len);
377
381
 
378
382
  /* BIO_mem_contents sets |*out_contents| to point to the current contents of
379
383
  * |bio| and |*out_len| to contain the length of that data. It returns one on
@@ -419,12 +423,7 @@ OPENSSL_EXPORT int BIO_set_mem_eof_return(BIO *bio, int eof_value);
419
423
  * underlying file descriptor when the BIO is freed.
420
424
  *
421
425
  * |BIO_reset| attempts to seek the file pointer to the start of file using
422
- * |lseek|.
423
- *
424
- * |BIO_seek| sets the file pointer to position |off| from start of file using
425
- * |lseek|.
426
- *
427
- * |BIO_tell| returns the current file position. */
426
+ * |lseek|. */
428
427
 
429
428
  /* BIO_s_fd returns a |BIO_METHOD| for file descriptor fds. */
430
429
  OPENSSL_EXPORT const BIO_METHOD *BIO_s_fd(void);
@@ -435,12 +434,18 @@ OPENSSL_EXPORT BIO *BIO_new_fd(int fd, int close_flag);
435
434
 
436
435
  /* BIO_set_fd sets the file descriptor of |bio| to |fd|. If |close_flag| is
437
436
  * non-zero then |fd| will be closed when |bio| is. It returns one on success
438
- * or zero on error. */
437
+ * or zero on error.
438
+ *
439
+ * This function may also be used with socket BIOs (see |BIO_s_socket| and
440
+ * |BIO_new_socket|). */
439
441
  OPENSSL_EXPORT int BIO_set_fd(BIO *bio, int fd, int close_flag);
440
442
 
441
443
  /* BIO_get_fd returns the file descriptor currently in use by |bio| or -1 if
442
444
  * |bio| does not wrap a file descriptor. If there is a file descriptor and
443
- * |out_fd| is not NULL, it also sets |*out_fd| to the file descriptor. */
445
+ * |out_fd| is not NULL, it also sets |*out_fd| to the file descriptor.
446
+ *
447
+ * This function may also be used with socket BIOs (see |BIO_s_socket| and
448
+ * |BIO_new_socket|). */
444
449
  OPENSSL_EXPORT int BIO_get_fd(BIO *bio, int *out_fd);
445
450
 
446
451
 
@@ -453,11 +458,6 @@ OPENSSL_EXPORT int BIO_get_fd(BIO *bio, int *out_fd);
453
458
  * |BIO_reset| attempts to seek the file pointer to the start of file using
454
459
  * |fseek|.
455
460
  *
456
- * |BIO_seek| sets the file pointer to the given position from the start of
457
- * file using |fseek|.
458
- *
459
- * |BIO_eof| calls |feof|.
460
- *
461
461
  * Setting the close flag causes |fclose| to be called on the stream when the
462
462
  * BIO is freed. */
463
463
 
@@ -520,7 +520,17 @@ OPENSSL_EXPORT int BIO_set_read_buffer_size(BIO *bio, int buffer_size);
520
520
  OPENSSL_EXPORT int BIO_set_write_buffer_size(BIO *bio, int buffer_size);
521
521
 
522
522
 
523
- /* Socket BIOs. */
523
+ /* Socket BIOs.
524
+ *
525
+ * Socket BIOs behave like file descriptor BIOs but, on Windows systems, wrap
526
+ * the system's |recv| and |send| functions instead of |read| and |write|. On
527
+ * Windows, file descriptors are provided by C runtime and are not
528
+ * interchangeable with sockets.
529
+ *
530
+ * Socket BIOs may be used with |BIO_set_fd| and |BIO_get_fd|.
531
+ *
532
+ * TODO(davidben): Add separate APIs and fix the internals to use |SOCKET|s
533
+ * around rather than rely on int casts. */
524
534
 
525
535
  OPENSSL_EXPORT const BIO_METHOD *BIO_s_socket(void);
526
536
 
@@ -557,10 +567,18 @@ OPENSSL_EXPORT int BIO_set_conn_hostname(BIO *bio,
557
567
  * will connect to. It returns one on success and zero otherwise. */
558
568
  OPENSSL_EXPORT int BIO_set_conn_port(BIO *bio, const char *port_str);
559
569
 
570
+ /* BIO_set_conn_int_port sets |*port| as the port that |bio| will connect to.
571
+ * It returns one on success and zero otherwise. */
572
+ OPENSSL_EXPORT int BIO_set_conn_int_port(BIO *bio, const int *port);
573
+
560
574
  /* BIO_set_nbio sets whether |bio| will use non-blocking I/O operations. It
561
575
  * returns one on success and zero otherwise. */
562
576
  OPENSSL_EXPORT int BIO_set_nbio(BIO *bio, int on);
563
577
 
578
+ /* BIO_do_connect connects |bio| if it has not been connected yet. It returns
579
+ * one on success and <= 0 otherwise. */
580
+ OPENSSL_EXPORT int BIO_do_connect(BIO *bio);
581
+
564
582
 
565
583
  /* Datagram BIOs.
566
584
  *
@@ -574,8 +592,12 @@ OPENSSL_EXPORT int BIO_set_nbio(BIO *bio, int on);
574
592
  #define BIO_CTRL_DGRAM_MTU_EXCEEDED 43 /* check whether the MTU was exceed in
575
593
  the previous write operation. */
576
594
 
577
- #define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT \
578
- 45 /* Next DTLS handshake timeout to adjust socket timeouts */
595
+ /* BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT sets a read deadline to drive
596
+ * retransmits. The |parg| argument to |BIO_ctrl| will be a pointer to a
597
+ * |timeval| struct. If the structure is all zeros, it clears the read
598
+ * deadline. Otherwise, |BIO_read| must fail with a temporary error
599
+ * (e.g. |EAGAIN|) after the deadline. */
600
+ #define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45
579
601
 
580
602
  #define BIO_CTRL_DGRAM_GET_PEER 46
581
603
 
@@ -701,6 +723,8 @@ OPENSSL_EXPORT int BIO_zero_copy_get_write_buf_done(BIO* bio,
701
723
  #define BIO_CTRL_INFO 3 /* opt - extra tit-bits */
702
724
  #define BIO_CTRL_SET 4 /* man - set the 'IO' type */
703
725
  #define BIO_CTRL_GET 5 /* man - get the 'IO' type */
726
+ #define BIO_CTRL_PUSH 6
727
+ #define BIO_CTRL_POP 7
704
728
  #define BIO_CTRL_GET_CLOSE 8 /* man - set the 'close' on free */
705
729
  #define BIO_CTRL_SET_CLOSE 9 /* man - set the 'close' on free */
706
730
  #define BIO_CTRL_PENDING 10 /* opt - is their more data buffered */
@@ -711,18 +735,8 @@ OPENSSL_EXPORT int BIO_zero_copy_get_write_buf_done(BIO* bio,
711
735
  #define BIO_CTRL_GET_CALLBACK 15 /* opt - set callback function */
712
736
  #define BIO_CTRL_SET_FILENAME 30 /* BIO_s_file special */
713
737
 
714
- /* These are never used, but exist to allow code to compile more easily. */
715
- #define BIO_CTRL_DUP 100
716
- #define BIO_CTRL_PUSH 101
717
- #define BIO_CTRL_POP 102
718
-
719
-
720
- /* Android compatibility section.
721
- *
722
- * A previous version of BoringSSL used in Android renamed ERR_print_errors_fp
723
- * to BIO_print_errors_fp. It has subsequently been renamed back to
724
- * ERR_print_errors_fp. */
725
- #define BIO_print_errors_fp ERR_print_errors_fp
738
+ /* BIO_CTRL_DUP is never used, but exists to allow code to compile more easily. */
739
+ #define BIO_CTRL_DUP 12
726
740
 
727
741
 
728
742
  /* Deprecated functions. */
@@ -878,6 +892,17 @@ struct bio_st {
878
892
 
879
893
  #if defined(__cplusplus)
880
894
  } /* extern C */
895
+
896
+ extern "C++" {
897
+
898
+ namespace bssl {
899
+
900
+ BORINGSSL_MAKE_DELETER(BIO, BIO_free)
901
+
902
+ } // namespace bssl
903
+
904
+ } /* extern C++ */
905
+
881
906
  #endif
882
907
 
883
908
  #define BIO_R_BAD_FOPEN_MODE 100