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
@@ -110,7 +110,6 @@
110
110
 
111
111
  #include <assert.h>
112
112
  #include <limits.h>
113
- #include <stdio.h>
114
113
  #include <string.h>
115
114
 
116
115
  #include <openssl/buf.h>
@@ -124,54 +123,60 @@
124
123
 
125
124
  static int do_ssl3_write(SSL *ssl, int type, const uint8_t *buf, unsigned len);
126
125
 
127
- /* kMaxWarningAlerts is the number of consecutive warning alerts that will be
128
- * processed. */
129
- static const uint8_t kMaxWarningAlerts = 4;
130
-
131
126
  /* ssl3_get_record reads a new input record. On success, it places it in
132
127
  * |ssl->s3->rrec| and returns one. Otherwise it returns <= 0 on error or if
133
128
  * more data is needed. */
134
129
  static int ssl3_get_record(SSL *ssl) {
135
- int ret;
136
130
  again:
137
- /* Ensure the buffer is large enough to decrypt in-place. */
138
- ret = ssl_read_buffer_extend_to(ssl, ssl_record_prefix_len(ssl));
139
- if (ret <= 0) {
140
- return ret;
131
+ switch (ssl->s3->recv_shutdown) {
132
+ case ssl_shutdown_none:
133
+ break;
134
+ case ssl_shutdown_fatal_alert:
135
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
136
+ return -1;
137
+ case ssl_shutdown_close_notify:
138
+ return 0;
141
139
  }
142
- assert(ssl_read_buffer_len(ssl) >= ssl_record_prefix_len(ssl));
143
140
 
144
- uint8_t *out = ssl_read_buffer(ssl) + ssl_record_prefix_len(ssl);
145
- size_t max_out = ssl_read_buffer_len(ssl) - ssl_record_prefix_len(ssl);
141
+ CBS body;
146
142
  uint8_t type, alert;
147
- size_t len, consumed;
148
- switch (tls_open_record(ssl, &type, out, &len, &consumed, &alert, max_out,
149
- ssl_read_buffer(ssl), ssl_read_buffer_len(ssl))) {
150
- case ssl_open_record_success:
151
- ssl_read_buffer_consume(ssl, consumed);
143
+ size_t consumed;
144
+ enum ssl_open_record_t open_ret =
145
+ tls_open_record(ssl, &type, &body, &consumed, &alert,
146
+ ssl_read_buffer(ssl), ssl_read_buffer_len(ssl));
147
+ if (open_ret != ssl_open_record_partial) {
148
+ ssl_read_buffer_consume(ssl, consumed);
149
+ }
150
+ switch (open_ret) {
151
+ case ssl_open_record_partial: {
152
+ int read_ret = ssl_read_buffer_extend_to(ssl, consumed);
153
+ if (read_ret <= 0) {
154
+ return read_ret;
155
+ }
156
+ goto again;
157
+ }
152
158
 
153
- if (len > 0xffff) {
159
+ case ssl_open_record_success:
160
+ if (CBS_len(&body) > 0xffff) {
154
161
  OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
155
162
  return -1;
156
163
  }
157
164
 
158
165
  SSL3_RECORD *rr = &ssl->s3->rrec;
159
166
  rr->type = type;
160
- rr->length = (uint16_t)len;
161
- rr->data = out;
167
+ rr->length = (uint16_t)CBS_len(&body);
168
+ rr->data = (uint8_t *)CBS_data(&body);
162
169
  return 1;
163
170
 
164
- case ssl_open_record_partial:
165
- ret = ssl_read_buffer_extend_to(ssl, consumed);
166
- if (ret <= 0) {
167
- return ret;
168
- }
169
- goto again;
170
-
171
171
  case ssl_open_record_discard:
172
- ssl_read_buffer_consume(ssl, consumed);
173
172
  goto again;
174
173
 
174
+ case ssl_open_record_close_notify:
175
+ return 0;
176
+
177
+ case ssl_open_record_fatal_alert:
178
+ return -1;
179
+
175
180
  case ssl_open_record_error:
176
181
  ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
177
182
  return -1;
@@ -183,6 +188,8 @@ again:
183
188
  }
184
189
 
185
190
  int ssl3_write_app_data(SSL *ssl, const void *buf, int len) {
191
+ assert(!SSL_in_init(ssl) || SSL_in_false_start(ssl));
192
+
186
193
  return ssl3_write_bytes(ssl, SSL3_RT_APPLICATION_DATA, buf, len);
187
194
  }
188
195
 
@@ -190,25 +197,12 @@ int ssl3_write_app_data(SSL *ssl, const void *buf, int len) {
190
197
  * not all data has been sent or non-blocking IO. */
191
198
  int ssl3_write_bytes(SSL *ssl, int type, const void *buf_, int len) {
192
199
  const uint8_t *buf = buf_;
193
- unsigned int tot, n, nw;
194
- int i;
200
+ unsigned tot, n, nw;
195
201
 
196
- ssl->rwstate = SSL_NOTHING;
197
202
  assert(ssl->s3->wnum <= INT_MAX);
198
203
  tot = ssl->s3->wnum;
199
204
  ssl->s3->wnum = 0;
200
205
 
201
- if (!ssl->in_handshake && SSL_in_init(ssl) && !SSL_in_false_start(ssl)) {
202
- i = ssl->handshake_func(ssl);
203
- if (i < 0) {
204
- return i;
205
- }
206
- if (i == 0) {
207
- OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_HANDSHAKE_FAILURE);
208
- return -1;
209
- }
210
- }
211
-
212
206
  /* Ensure that if we end up with a smaller value of data to write out than
213
207
  * the the original len from a write which didn't complete for non-blocking
214
208
  * I/O and also somehow ended up avoiding the check for this in
@@ -232,19 +226,19 @@ int ssl3_write_bytes(SSL *ssl, int type, const void *buf_, int len) {
232
226
  nw = n;
233
227
  }
234
228
 
235
- i = do_ssl3_write(ssl, type, &buf[tot], nw);
236
- if (i <= 0) {
229
+ int ret = do_ssl3_write(ssl, type, &buf[tot], nw);
230
+ if (ret <= 0) {
237
231
  ssl->s3->wnum = tot;
238
- return i;
232
+ return ret;
239
233
  }
240
234
 
241
- if (i == (int)n || (type == SSL3_RT_APPLICATION_DATA &&
242
- (ssl->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) {
243
- return tot + i;
235
+ if (ret == (int)n || (type == SSL3_RT_APPLICATION_DATA &&
236
+ (ssl->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) {
237
+ return tot + ret;
244
238
  }
245
239
 
246
- n -= i;
247
- tot += i;
240
+ n -= ret;
241
+ tot += ret;
248
242
  }
249
243
  }
250
244
 
@@ -274,7 +268,7 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *buf, unsigned len) {
274
268
 
275
269
  /* If we have an alert to send, lets send it */
276
270
  if (ssl->s3->alert_dispatch) {
277
- int ret = ssl->method->ssl_dispatch_alert(ssl);
271
+ int ret = ssl->method->dispatch_alert(ssl);
278
272
  if (ret <= 0) {
279
273
  return ret;
280
274
  }
@@ -314,333 +308,157 @@ static int do_ssl3_write(SSL *ssl, int type, const uint8_t *buf, unsigned len) {
314
308
  return ssl3_write_pending(ssl, type, buf, len);
315
309
  }
316
310
 
317
- int ssl3_read_app_data(SSL *ssl, uint8_t *buf, int len, int peek) {
318
- return ssl3_read_bytes(ssl, SSL3_RT_APPLICATION_DATA, buf, len, peek);
319
- }
311
+ static int consume_record(SSL *ssl, uint8_t *out, int len, int peek) {
312
+ SSL3_RECORD *rr = &ssl->s3->rrec;
320
313
 
321
- int ssl3_read_change_cipher_spec(SSL *ssl) {
322
- uint8_t byte;
323
- int ret = ssl3_read_bytes(ssl, SSL3_RT_CHANGE_CIPHER_SPEC, &byte, 1 /* len */,
324
- 0 /* no peek */);
325
- if (ret <= 0) {
326
- return ret;
314
+ if (len <= 0) {
315
+ return len;
327
316
  }
328
- assert(ret == 1);
329
317
 
330
- if (ssl->s3->rrec.length != 0 || byte != SSL3_MT_CCS) {
331
- OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC);
332
- ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
333
- return -1;
318
+ if (len > (int)rr->length) {
319
+ len = (int)rr->length;
334
320
  }
335
321
 
336
- if (ssl->msg_callback != NULL) {
337
- ssl->msg_callback(0, ssl->version, SSL3_RT_CHANGE_CIPHER_SPEC, &byte, 1,
338
- ssl, ssl->msg_callback_arg);
322
+ memcpy(out, rr->data, len);
323
+ if (!peek) {
324
+ rr->length -= len;
325
+ rr->data += len;
326
+ if (rr->length == 0) {
327
+ /* The record has been consumed, so we may now clear the buffer. */
328
+ ssl_read_buffer_discard(ssl);
329
+ }
339
330
  }
340
-
341
- return 1;
331
+ return len;
342
332
  }
343
333
 
344
- void ssl3_read_close_notify(SSL *ssl) {
345
- ssl3_read_bytes(ssl, 0, NULL, 0, 0);
346
- }
334
+ int ssl3_read_app_data(SSL *ssl, int *out_got_handshake, uint8_t *buf, int len,
335
+ int peek) {
336
+ assert(!SSL_in_init(ssl));
337
+ assert(ssl->s3->initial_handshake_complete);
338
+ *out_got_handshake = 0;
347
339
 
348
- static int ssl3_can_renegotiate(SSL *ssl) {
349
- switch (ssl->renegotiate_mode) {
350
- case ssl_renegotiate_never:
351
- return 0;
352
- case ssl_renegotiate_once:
353
- return ssl->s3->total_renegotiations == 0;
354
- case ssl_renegotiate_freely:
355
- return 1;
356
- case ssl_renegotiate_ignore:
357
- return 1;
358
- }
340
+ SSL3_RECORD *rr = &ssl->s3->rrec;
359
341
 
360
- assert(0);
361
- return 0;
362
- }
342
+ for (;;) {
343
+ /* A previous iteration may have read a partial handshake message. Do not
344
+ * allow more app data in that case. */
345
+ int has_hs_data = ssl->init_buf != NULL && ssl->init_buf->length > 0;
363
346
 
364
- /* Return up to 'len' payload bytes received in 'type' records.
365
- * 'type' is one of the following:
366
- *
367
- * - SSL3_RT_HANDSHAKE (when ssl3_get_message calls us)
368
- * - SSL3_RT_CHANGE_CIPHER_SPEC (when ssl3_read_change_cipher_spec calls us)
369
- * - SSL3_RT_APPLICATION_DATA (when ssl3_read_app_data calls us)
370
- * - 0 (during a shutdown, no data has to be returned)
371
- *
372
- * If we don't have stored data to work from, read a SSL/TLS record first
373
- * (possibly multiple records if we still don't have anything to return).
374
- *
375
- * This function must handle any surprises the peer may have for us, such as
376
- * Alert records (e.g. close_notify) or renegotiation requests. */
377
- int ssl3_read_bytes(SSL *ssl, int type, uint8_t *buf, int len, int peek) {
378
- int al, i, ret;
379
- unsigned int n;
380
- SSL3_RECORD *rr;
381
- void (*cb)(const SSL *ssl, int type, int value) = NULL;
382
-
383
- if ((type && type != SSL3_RT_APPLICATION_DATA && type != SSL3_RT_HANDSHAKE &&
384
- type != SSL3_RT_CHANGE_CIPHER_SPEC) ||
385
- (peek && type != SSL3_RT_APPLICATION_DATA)) {
386
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
387
- return -1;
388
- }
347
+ /* Get new packet if necessary. */
348
+ if (rr->length == 0 && !has_hs_data) {
349
+ int ret = ssl3_get_record(ssl);
350
+ if (ret <= 0) {
351
+ return ret;
352
+ }
353
+ }
389
354
 
390
- /* This may require multiple iterations. False Start will cause
391
- * |ssl->handshake_func| to signal success one step early, but the handshake
392
- * must be completely finished before other modes are accepted.
393
- *
394
- * TODO(davidben): Move this check up to a higher level. */
395
- while (!ssl->in_handshake && SSL_in_init(ssl)) {
396
- assert(type == SSL3_RT_APPLICATION_DATA);
397
- i = ssl->handshake_func(ssl);
398
- if (i < 0) {
399
- return i;
355
+ if (has_hs_data || rr->type == SSL3_RT_HANDSHAKE) {
356
+ /* Post-handshake data prior to TLS 1.3 is always renegotiation, which we
357
+ * never accept as a server. Otherwise |ssl3_get_message| will send
358
+ * |SSL_R_EXCESSIVE_MESSAGE_SIZE|. */
359
+ if (ssl->server && ssl3_protocol_version(ssl) < TLS1_3_VERSION) {
360
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_NO_RENEGOTIATION);
361
+ OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION);
362
+ return -1;
363
+ }
364
+
365
+ /* Parse post-handshake handshake messages. */
366
+ int ret = ssl3_get_message(ssl, -1, ssl_dont_hash_message);
367
+ if (ret <= 0) {
368
+ return ret;
369
+ }
370
+ *out_got_handshake = 1;
371
+ return -1;
400
372
  }
401
- if (i == 0) {
402
- OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_HANDSHAKE_FAILURE);
373
+
374
+ if (rr->type != SSL3_RT_APPLICATION_DATA) {
375
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_RECORD);
376
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
403
377
  return -1;
404
378
  }
405
- }
406
379
 
407
- start:
408
- ssl->rwstate = SSL_NOTHING;
380
+ if (rr->length != 0) {
381
+ return consume_record(ssl, buf, len, peek);
382
+ }
409
383
 
410
- /* ssl->s3->rrec.type - is the type of record
411
- * ssl->s3->rrec.data - data
412
- * ssl->s3->rrec.off - offset into 'data' for next read
413
- * ssl->s3->rrec.length - number of bytes. */
414
- rr = &ssl->s3->rrec;
384
+ /* Discard empty records and loop again. */
385
+ }
386
+ }
387
+
388
+ int ssl3_read_change_cipher_spec(SSL *ssl) {
389
+ SSL3_RECORD *rr = &ssl->s3->rrec;
415
390
 
416
- /* get new packet if necessary */
417
391
  if (rr->length == 0) {
418
- ret = ssl3_get_record(ssl);
392
+ int ret = ssl3_get_record(ssl);
419
393
  if (ret <= 0) {
420
394
  return ret;
421
395
  }
422
396
  }
423
397
 
424
- /* we now have a packet which can be read and processed */
425
-
426
- /* If the other end has shut down, throw anything we read away (even in
427
- * 'peek' mode) */
428
- if (ssl->shutdown & SSL_RECEIVED_SHUTDOWN) {
429
- rr->length = 0;
430
- ssl->rwstate = SSL_NOTHING;
431
- return 0;
398
+ if (rr->type != SSL3_RT_CHANGE_CIPHER_SPEC) {
399
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
400
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_RECORD);
401
+ return -1;
432
402
  }
433
403
 
434
- if (type != 0 && type == rr->type) {
435
- ssl->s3->warning_alert_count = 0;
436
-
437
- /* Make sure that we are not getting application data when we are doing a
438
- * handshake for the first time. */
439
- if (SSL_in_init(ssl) && type == SSL3_RT_APPLICATION_DATA &&
440
- ssl->s3->aead_read_ctx == NULL) {
441
- /* TODO(davidben): Is this check redundant with the handshake_func
442
- * check? */
443
- al = SSL_AD_UNEXPECTED_MESSAGE;
444
- OPENSSL_PUT_ERROR(SSL, SSL_R_APP_DATA_IN_HANDSHAKE);
445
- goto f_err;
446
- }
447
-
448
- /* Discard empty records. */
449
- if (rr->length == 0) {
450
- goto start;
451
- }
452
-
453
- if (len <= 0) {
454
- return len;
455
- }
404
+ if (rr->length != 1 || rr->data[0] != SSL3_MT_CCS) {
405
+ OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC);
406
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER);
407
+ return -1;
408
+ }
456
409
 
457
- if ((unsigned int)len > rr->length) {
458
- n = rr->length;
459
- } else {
460
- n = (unsigned int)len;
461
- }
410
+ ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data,
411
+ rr->length);
462
412
 
463
- memcpy(buf, rr->data, n);
464
- if (!peek) {
465
- rr->length -= n;
466
- rr->data += n;
467
- if (rr->length == 0) {
468
- /* The record has been consumed, so we may now clear the buffer. */
469
- ssl_read_buffer_discard(ssl);
470
- }
471
- }
413
+ rr->length = 0;
414
+ ssl_read_buffer_discard(ssl);
415
+ return 1;
416
+ }
472
417
 
473
- return n;
418
+ void ssl3_read_close_notify(SSL *ssl) {
419
+ /* Read records until an error or close_notify. */
420
+ while (ssl3_get_record(ssl) > 0) {
421
+ ;
474
422
  }
423
+ }
475
424
 
476
- /* Process unexpected records. */
425
+ int ssl3_read_handshake_bytes(SSL *ssl, uint8_t *buf, int len) {
426
+ SSL3_RECORD *rr = &ssl->s3->rrec;
477
427
 
478
- if (type == SSL3_RT_APPLICATION_DATA && rr->type == SSL3_RT_HANDSHAKE) {
479
- /* If peer renegotiations are disabled, all out-of-order handshake records
480
- * are fatal. Renegotiations as a server are never supported. */
481
- if (ssl->server || !ssl3_can_renegotiate(ssl)) {
482
- al = SSL_AD_NO_RENEGOTIATION;
483
- OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION);
484
- goto f_err;
485
- }
486
-
487
- /* This must be a HelloRequest, possibly fragmented over multiple records.
488
- * Consume data from the handshake protocol until it is complete. */
489
- static const uint8_t kHelloRequest[] = {SSL3_MT_HELLO_REQUEST, 0, 0, 0};
490
- while (ssl->s3->hello_request_len < sizeof(kHelloRequest)) {
491
- if (rr->length == 0) {
492
- /* Get a new record. */
493
- goto start;
494
- }
495
- if (rr->data[0] != kHelloRequest[ssl->s3->hello_request_len]) {
496
- al = SSL_AD_DECODE_ERROR;
497
- OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_HELLO_REQUEST);
498
- goto f_err;
428
+ for (;;) {
429
+ /* Get new packet if necessary. */
430
+ if (rr->length == 0) {
431
+ int ret = ssl3_get_record(ssl);
432
+ if (ret <= 0) {
433
+ return ret;
499
434
  }
500
- rr->data++;
501
- rr->length--;
502
- ssl->s3->hello_request_len++;
503
435
  }
504
- ssl->s3->hello_request_len = 0;
505
436
 
506
- if (ssl->msg_callback) {
507
- ssl->msg_callback(0, ssl->version, SSL3_RT_HANDSHAKE, kHelloRequest,
508
- sizeof(kHelloRequest), ssl, ssl->msg_callback_arg);
509
- }
510
-
511
- if (!SSL_is_init_finished(ssl) || !ssl->s3->initial_handshake_complete) {
512
- /* This cannot happen. If a handshake is in progress, |type| must be
513
- * |SSL3_RT_HANDSHAKE|. */
514
- assert(0);
515
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
516
- goto err;
517
- }
518
-
519
- if (ssl->renegotiate_mode == ssl_renegotiate_ignore) {
520
- goto start;
521
- }
522
-
523
- /* Renegotiation is only supported at quiescent points in the application
524
- * protocol, namely in HTTPS, just before reading the HTTP response. Require
525
- * the record-layer be idle and avoid complexities of sending a handshake
526
- * record while an application_data record is being written. */
527
- if (ssl_write_buffer_is_pending(ssl)) {
528
- al = SSL_AD_NO_RENEGOTIATION;
529
- OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION);
530
- goto f_err;
531
- }
532
-
533
- /* Begin a new handshake. */
534
- ssl->s3->total_renegotiations++;
535
- ssl->state = SSL_ST_CONNECT;
536
- i = ssl->handshake_func(ssl);
537
- if (i < 0) {
538
- return i;
539
- }
540
- if (i == 0) {
541
- OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_HANDSHAKE_FAILURE);
437
+ if (rr->type != SSL3_RT_HANDSHAKE) {
438
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_RECORD);
439
+ ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
542
440
  return -1;
543
441
  }
544
442
 
545
- /* The handshake completed synchronously. Continue reading records. */
546
- goto start;
547
- }
548
-
549
- /* If an alert record, process one alert out of the record. Note that we allow
550
- * a single record to contain multiple alerts. */
551
- if (rr->type == SSL3_RT_ALERT) {
552
- /* Alerts may not be fragmented. */
553
- if (rr->length < 2) {
554
- al = SSL_AD_DECODE_ERROR;
555
- OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_ALERT);
556
- goto f_err;
557
- }
558
-
559
- if (ssl->msg_callback) {
560
- ssl->msg_callback(0, ssl->version, SSL3_RT_ALERT, rr->data, 2, ssl,
561
- ssl->msg_callback_arg);
562
- }
563
- const uint8_t alert_level = rr->data[0];
564
- const uint8_t alert_descr = rr->data[1];
565
- rr->length -= 2;
566
- rr->data += 2;
567
-
568
- if (ssl->info_callback != NULL) {
569
- cb = ssl->info_callback;
570
- } else if (ssl->ctx->info_callback != NULL) {
571
- cb = ssl->ctx->info_callback;
572
- }
573
-
574
- if (cb != NULL) {
575
- uint16_t alert = (alert_level << 8) | alert_descr;
576
- cb(ssl, SSL_CB_READ_ALERT, alert);
577
- }
578
-
579
- if (alert_level == SSL3_AL_WARNING) {
580
- ssl->s3->warn_alert = alert_descr;
581
- if (alert_descr == SSL_AD_CLOSE_NOTIFY) {
582
- ssl->shutdown |= SSL_RECEIVED_SHUTDOWN;
583
- return 0;
584
- }
585
-
586
- /* This is a warning but we receive it if we requested renegotiation and
587
- * the peer denied it. Terminate with a fatal alert because if
588
- * application tried to renegotiatie it presumably had a good reason and
589
- * expects it to succeed.
590
- *
591
- * In future we might have a renegotiation where we don't care if the
592
- * peer refused it where we carry on. */
593
- else if (alert_descr == SSL_AD_NO_RENEGOTIATION) {
594
- al = SSL_AD_HANDSHAKE_FAILURE;
595
- OPENSSL_PUT_ERROR(SSL, SSL_R_NO_RENEGOTIATION);
596
- goto f_err;
597
- }
598
-
599
- ssl->s3->warning_alert_count++;
600
- if (ssl->s3->warning_alert_count > kMaxWarningAlerts) {
601
- al = SSL_AD_UNEXPECTED_MESSAGE;
602
- OPENSSL_PUT_ERROR(SSL, SSL_R_TOO_MANY_WARNING_ALERTS);
603
- goto f_err;
604
- }
605
- } else if (alert_level == SSL3_AL_FATAL) {
606
- char tmp[16];
607
-
608
- ssl->rwstate = SSL_NOTHING;
609
- ssl->s3->fatal_alert = alert_descr;
610
- OPENSSL_PUT_ERROR(SSL, SSL_AD_REASON_OFFSET + alert_descr);
611
- BIO_snprintf(tmp, sizeof(tmp), "%d", alert_descr);
612
- ERR_add_error_data(2, "SSL alert number ", tmp);
613
- ssl->shutdown |= SSL_RECEIVED_SHUTDOWN;
614
- SSL_CTX_remove_session(ssl->ctx, ssl->session);
615
- return 0;
616
- } else {
617
- al = SSL_AD_ILLEGAL_PARAMETER;
618
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_ALERT_TYPE);
619
- goto f_err;
443
+ if (rr->length != 0) {
444
+ return consume_record(ssl, buf, len, 0 /* consume data */);
620
445
  }
621
446
 
622
- goto start;
623
- }
624
-
625
- if (ssl->shutdown & SSL_SENT_SHUTDOWN) {
626
- /* close_notify has been sent, so discard all records other than alerts. */
627
- rr->length = 0;
628
- goto start;
447
+ /* Discard empty records and loop again. */
629
448
  }
630
-
631
- al = SSL_AD_UNEXPECTED_MESSAGE;
632
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_RECORD);
633
-
634
- f_err:
635
- ssl3_send_alert(ssl, SSL3_AL_FATAL, al);
636
- err:
637
- return -1;
638
449
  }
639
450
 
640
451
  int ssl3_send_alert(SSL *ssl, int level, int desc) {
641
- /* If a fatal one, remove from cache */
642
- if (level == 2 && ssl->session != NULL) {
643
- SSL_CTX_remove_session(ssl->ctx, ssl->session);
452
+ /* It is illegal to send an alert when we've already sent a closing one. */
453
+ if (ssl->s3->send_shutdown != ssl_shutdown_none) {
454
+ OPENSSL_PUT_ERROR(SSL, SSL_R_PROTOCOL_IS_SHUTDOWN);
455
+ return -1;
456
+ }
457
+
458
+ if (level == SSL3_AL_FATAL) {
459
+ ssl->s3->send_shutdown = ssl_shutdown_fatal_alert;
460
+ } else if (level == SSL3_AL_WARNING && desc == SSL_AD_CLOSE_NOTIFY) {
461
+ ssl->s3->send_shutdown = ssl_shutdown_close_notify;
644
462
  }
645
463
 
646
464
  ssl->s3->alert_dispatch = 1;
@@ -649,45 +467,31 @@ int ssl3_send_alert(SSL *ssl, int level, int desc) {
649
467
  if (!ssl_write_buffer_is_pending(ssl)) {
650
468
  /* Nothing is being written out, so the alert may be dispatched
651
469
  * immediately. */
652
- return ssl->method->ssl_dispatch_alert(ssl);
470
+ return ssl->method->dispatch_alert(ssl);
653
471
  }
654
472
 
655
- /* else data is still being written out, we will get written some time in the
656
- * future */
473
+ /* The alert will be dispatched later. */
657
474
  return -1;
658
475
  }
659
476
 
660
477
  int ssl3_dispatch_alert(SSL *ssl) {
661
- int i, j;
662
- void (*cb)(const SSL *ssl, int type, int value) = NULL;
663
-
664
478
  ssl->s3->alert_dispatch = 0;
665
- i = do_ssl3_write(ssl, SSL3_RT_ALERT, &ssl->s3->send_alert[0], 2);
666
- if (i <= 0) {
479
+ int ret = do_ssl3_write(ssl, SSL3_RT_ALERT, &ssl->s3->send_alert[0], 2);
480
+ if (ret <= 0) {
667
481
  ssl->s3->alert_dispatch = 1;
668
- } else {
669
- /* Alert sent to BIO. If it is important, flush it now. If the message
670
- * does not get sent due to non-blocking IO, we will not worry too much. */
671
- if (ssl->s3->send_alert[0] == SSL3_AL_FATAL) {
672
- BIO_flush(ssl->wbio);
673
- }
482
+ return ret;
483
+ }
674
484
 
675
- if (ssl->msg_callback) {
676
- ssl->msg_callback(1, ssl->version, SSL3_RT_ALERT, ssl->s3->send_alert, 2,
677
- ssl, ssl->msg_callback_arg);
678
- }
485
+ /* If the alert is fatal, flush the BIO now. */
486
+ if (ssl->s3->send_alert[0] == SSL3_AL_FATAL) {
487
+ BIO_flush(ssl->wbio);
488
+ }
679
489
 
680
- if (ssl->info_callback != NULL) {
681
- cb = ssl->info_callback;
682
- } else if (ssl->ctx->info_callback != NULL) {
683
- cb = ssl->ctx->info_callback;
684
- }
490
+ ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_ALERT, ssl->s3->send_alert,
491
+ 2);
685
492
 
686
- if (cb != NULL) {
687
- j = (ssl->s3->send_alert[0] << 8) | ssl->s3->send_alert[1];
688
- cb(ssl, SSL_CB_WRITE_ALERT, j);
689
- }
690
- }
493
+ int alert = (ssl->s3->send_alert[0] << 8) | ssl->s3->send_alert[1];
494
+ ssl_do_info_callback(ssl, SSL_CB_WRITE_ALERT, alert);
691
495
 
692
- return i;
496
+ return 1;
693
497
  }