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,144 +0,0 @@
1
- /* $LP: LPlib/source/LPdir_win.c,v 1.10 2004/08/26 13:36:05 _cvs_levitte Exp $ */
2
- /*
3
- * Copyright (c) 2004, Richard Levitte <richard@levitte.org>
4
- * All rights reserved.
5
- *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions
8
- * are met:
9
- * 1. Redistributions of source code must retain the above copyright
10
- * notice, this list of conditions and the following disclaimer.
11
- * 2. Redistributions in binary form must reproduce the above copyright
12
- * notice, this list of conditions and the following disclaimer in the
13
- * documentation and/or other materials provided with the distribution.
14
- *
15
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
- */
27
-
28
- #include "directory.h"
29
-
30
-
31
- #if defined(OPENSSL_WINDOWS)
32
-
33
- #pragma warning(push, 3)
34
- #include <windows.h>
35
- #pragma warning(pop)
36
- #include <errno.h>
37
- #include <string.h>
38
- #include <tchar.h>
39
-
40
- #ifndef NAME_MAX
41
- #define NAME_MAX 255
42
- #endif
43
-
44
- #include <openssl/mem.h>
45
-
46
-
47
- struct OPENSSL_dir_context_st {
48
- WIN32_FIND_DATA ctx;
49
- HANDLE handle;
50
- char entry_name[NAME_MAX + 1];
51
- };
52
-
53
- const char *OPENSSL_DIR_read(OPENSSL_DIR_CTX **ctx, const char *directory) {
54
- if (ctx == NULL || directory == NULL) {
55
- errno = EINVAL;
56
- return 0;
57
- }
58
-
59
- errno = 0;
60
- if (*ctx == NULL) {
61
- *ctx = malloc(sizeof(OPENSSL_DIR_CTX));
62
- if (*ctx == NULL) {
63
- errno = ENOMEM;
64
- return 0;
65
- }
66
- memset(*ctx, 0, sizeof(OPENSSL_DIR_CTX));
67
-
68
- if (sizeof(TCHAR) != sizeof(char)) {
69
- TCHAR *wdir = NULL;
70
- /* len_0 denotes string length *with* trailing 0 */
71
- size_t index = 0, len_0 = strlen(directory) + 1;
72
-
73
- wdir = (TCHAR *)malloc(len_0 * sizeof(TCHAR));
74
- if (wdir == NULL) {
75
- free(*ctx);
76
- *ctx = NULL;
77
- errno = ENOMEM;
78
- return 0;
79
- }
80
-
81
- if (!MultiByteToWideChar(CP_ACP, 0, directory, len_0, (WCHAR *)wdir,
82
- len_0)) {
83
- for (index = 0; index < len_0; index++) {
84
- wdir[index] = (TCHAR)directory[index];
85
- }
86
- }
87
-
88
- (*ctx)->handle = FindFirstFile(wdir, &(*ctx)->ctx);
89
-
90
- free(wdir);
91
- } else {
92
- (*ctx)->handle = FindFirstFile((TCHAR *)directory, &(*ctx)->ctx);
93
- }
94
-
95
- if ((*ctx)->handle == INVALID_HANDLE_VALUE) {
96
- free(*ctx);
97
- *ctx = NULL;
98
- errno = EINVAL;
99
- return 0;
100
- }
101
- } else {
102
- if (FindNextFile((*ctx)->handle, &(*ctx)->ctx) == FALSE) {
103
- return 0;
104
- }
105
- }
106
-
107
- if (sizeof(TCHAR) != sizeof(char)) {
108
- TCHAR *wdir = (*ctx)->ctx.cFileName;
109
- size_t index, len_0 = 0;
110
-
111
- while (wdir[len_0] && len_0 < (sizeof((*ctx)->entry_name) - 1)) {
112
- len_0++;
113
- }
114
- len_0++;
115
-
116
- if (!WideCharToMultiByte(CP_ACP, 0, (WCHAR *)wdir, len_0,
117
- (*ctx)->entry_name, sizeof((*ctx)->entry_name),
118
- NULL, 0)) {
119
- for (index = 0; index < len_0; index++) {
120
- (*ctx)->entry_name[index] = (char)wdir[index];
121
- }
122
- }
123
- } else {
124
- strncpy((*ctx)->entry_name, (const char *)(*ctx)->ctx.cFileName,
125
- sizeof((*ctx)->entry_name) - 1);
126
- }
127
-
128
- (*ctx)->entry_name[sizeof((*ctx)->entry_name) - 1] = '\0';
129
-
130
- return (*ctx)->entry_name;
131
- }
132
-
133
- int OPENSSL_DIR_end(OPENSSL_DIR_CTX **ctx) {
134
- if (ctx != NULL && *ctx != NULL) {
135
- FindClose((*ctx)->handle);
136
- free(*ctx);
137
- *ctx = NULL;
138
- return 1;
139
- }
140
- errno = EINVAL;
141
- return 0;
142
- }
143
-
144
- #endif /* OPENSSL_WINDOWS */
@@ -1,140 +0,0 @@
1
- /* Copyright (c) 2015, Google Inc.
2
- *
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
- #ifndef OPENSSL_HEADER_CRYPTO_TEST_SCOPED_TYPES_H
16
- #define OPENSSL_HEADER_CRYPTO_TEST_SCOPED_TYPES_H
17
-
18
- #include <stdint.h>
19
- #include <stdio.h>
20
-
21
- #include <memory>
22
-
23
- #include <openssl/aead.h>
24
- #include <openssl/asn1.h>
25
- #include <openssl/bio.h>
26
- #include <openssl/bn.h>
27
- #include <openssl/cmac.h>
28
- #include <openssl/dh.h>
29
- #include <openssl/ec.h>
30
- #include <openssl/ec_key.h>
31
- #include <openssl/ecdsa.h>
32
- #include <openssl/evp.h>
33
- #include <openssl/hmac.h>
34
- #include <openssl/mem.h>
35
- #include <openssl/pkcs8.h>
36
- #include <openssl/rsa.h>
37
- #include <openssl/stack.h>
38
- #include <openssl/x509.h>
39
-
40
-
41
- template<typename T, void (*func)(T*)>
42
- struct OpenSSLDeleter {
43
- void operator()(T *obj) {
44
- func(obj);
45
- }
46
- };
47
-
48
- template<typename StackType, typename T, void (*func)(T*)>
49
- struct OpenSSLStackDeleter {
50
- void operator()(StackType *obj) {
51
- sk_pop_free(reinterpret_cast<_STACK*>(obj),
52
- reinterpret_cast<void (*)(void *)>(func));
53
- }
54
- };
55
-
56
- template<typename T>
57
- struct OpenSSLFree {
58
- void operator()(T *buf) {
59
- OPENSSL_free(buf);
60
- }
61
- };
62
-
63
- struct FileCloser {
64
- void operator()(FILE *file) {
65
- fclose(file);
66
- }
67
- };
68
-
69
- template<typename T, void (*func)(T*)>
70
- using ScopedOpenSSLType = std::unique_ptr<T, OpenSSLDeleter<T, func>>;
71
-
72
- template<typename StackType, typename T, void (*func)(T*)>
73
- using ScopedOpenSSLStack =
74
- std::unique_ptr<StackType, OpenSSLStackDeleter<StackType, T, func>>;
75
-
76
- template<typename T, typename CleanupRet, void (*init_func)(T*),
77
- CleanupRet (*cleanup_func)(T*)>
78
- class ScopedOpenSSLContext {
79
- public:
80
- ScopedOpenSSLContext() {
81
- init_func(&ctx_);
82
- }
83
- ~ScopedOpenSSLContext() {
84
- cleanup_func(&ctx_);
85
- }
86
-
87
- T *get() { return &ctx_; }
88
- const T *get() const { return &ctx_; }
89
-
90
- void Reset() {
91
- cleanup_func(&ctx_);
92
- init_func(&ctx_);
93
- }
94
-
95
- private:
96
- T ctx_;
97
- };
98
-
99
- using ScopedASN1_TYPE = ScopedOpenSSLType<ASN1_TYPE, ASN1_TYPE_free>;
100
- using ScopedBIO = ScopedOpenSSLType<BIO, BIO_vfree>;
101
- using ScopedBIGNUM = ScopedOpenSSLType<BIGNUM, BN_free>;
102
- using ScopedBN_CTX = ScopedOpenSSLType<BN_CTX, BN_CTX_free>;
103
- using ScopedBN_MONT_CTX = ScopedOpenSSLType<BN_MONT_CTX, BN_MONT_CTX_free>;
104
- using ScopedCMAC_CTX = ScopedOpenSSLType<CMAC_CTX, CMAC_CTX_free>;
105
- using ScopedDH = ScopedOpenSSLType<DH, DH_free>;
106
- using ScopedECDSA_SIG = ScopedOpenSSLType<ECDSA_SIG, ECDSA_SIG_free>;
107
- using ScopedEC_GROUP = ScopedOpenSSLType<EC_GROUP, EC_GROUP_free>;
108
- using ScopedEC_KEY = ScopedOpenSSLType<EC_KEY, EC_KEY_free>;
109
- using ScopedEC_POINT = ScopedOpenSSLType<EC_POINT, EC_POINT_free>;
110
- using ScopedEVP_PKEY = ScopedOpenSSLType<EVP_PKEY, EVP_PKEY_free>;
111
- using ScopedEVP_PKEY_CTX = ScopedOpenSSLType<EVP_PKEY_CTX, EVP_PKEY_CTX_free>;
112
- using ScopedPKCS8_PRIV_KEY_INFO = ScopedOpenSSLType<PKCS8_PRIV_KEY_INFO,
113
- PKCS8_PRIV_KEY_INFO_free>;
114
- using ScopedPKCS12 = ScopedOpenSSLType<PKCS12, PKCS12_free>;
115
- using ScopedRSA = ScopedOpenSSLType<RSA, RSA_free>;
116
- using ScopedX509 = ScopedOpenSSLType<X509, X509_free>;
117
- using ScopedX509_ALGOR = ScopedOpenSSLType<X509_ALGOR, X509_ALGOR_free>;
118
- using ScopedX509_SIG = ScopedOpenSSLType<X509_SIG, X509_SIG_free>;
119
- using ScopedX509_STORE_CTX = ScopedOpenSSLType<X509_STORE_CTX, X509_STORE_CTX_free>;
120
-
121
- using ScopedX509Stack = ScopedOpenSSLStack<STACK_OF(X509), X509, X509_free>;
122
-
123
- using ScopedCBB = ScopedOpenSSLContext<CBB, void, CBB_zero, CBB_cleanup>;
124
- using ScopedEVP_AEAD_CTX = ScopedOpenSSLContext<EVP_AEAD_CTX, void,
125
- EVP_AEAD_CTX_zero,
126
- EVP_AEAD_CTX_cleanup>;
127
- using ScopedEVP_CIPHER_CTX = ScopedOpenSSLContext<EVP_CIPHER_CTX, int,
128
- EVP_CIPHER_CTX_init,
129
- EVP_CIPHER_CTX_cleanup>;
130
- using ScopedEVP_MD_CTX = ScopedOpenSSLContext<EVP_MD_CTX, int, EVP_MD_CTX_init,
131
- EVP_MD_CTX_cleanup>;
132
- using ScopedHMAC_CTX = ScopedOpenSSLContext<HMAC_CTX, void, HMAC_CTX_init,
133
- HMAC_CTX_cleanup>;
134
-
135
- using ScopedOpenSSLBytes = std::unique_ptr<uint8_t, OpenSSLFree<uint8_t>>;
136
- using ScopedOpenSSLString = std::unique_ptr<char, OpenSSLFree<char>>;
137
-
138
- using ScopedFILE = std::unique_ptr<FILE, FileCloser>;
139
-
140
- #endif // OPENSSL_HEADER_CRYPTO_TEST_SCOPED_TYPES_H
@@ -1,146 +0,0 @@
1
- /*
2
- * DTLS implementation written by Nagendra Modadugu
3
- * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
4
- */
5
- /* ====================================================================
6
- * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved.
7
- *
8
- * Redistribution and use in source and binary forms, with or without
9
- * modification, are permitted provided that the following conditions
10
- * are met:
11
- *
12
- * 1. Redistributions of source code must retain the above copyright
13
- * notice, this list of conditions and the following disclaimer.
14
- *
15
- * 2. Redistributions in binary form must reproduce the above copyright
16
- * notice, this list of conditions and the following disclaimer in
17
- * the documentation and/or other materials provided with the
18
- * distribution.
19
- *
20
- * 3. All advertising materials mentioning features or use of this
21
- * software must display the following acknowledgment:
22
- * "This product includes software developed by the OpenSSL Project
23
- * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24
- *
25
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26
- * endorse or promote products derived from this software without
27
- * prior written permission. For written permission, please contact
28
- * openssl-core@OpenSSL.org.
29
- *
30
- * 5. Products derived from this software may not be called "OpenSSL"
31
- * nor may "OpenSSL" appear in their names without prior written
32
- * permission of the OpenSSL Project.
33
- *
34
- * 6. Redistributions of any form whatsoever must retain the following
35
- * acknowledgment:
36
- * "This product includes software developed by the OpenSSL Project
37
- * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38
- *
39
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50
- * OF THE POSSIBILITY OF SUCH DAMAGE.
51
- * ====================================================================
52
- *
53
- * This product includes cryptographic software written by Eric Young
54
- * (eay@cryptsoft.com). This product includes software written by Tim
55
- * Hudson (tjh@cryptsoft.com). */
56
-
57
- #ifndef OPENSSL_HEADER_PQUEUE_H
58
- #define OPENSSL_HEADER_PQUEUE_H
59
-
60
- #include <openssl/base.h>
61
-
62
- #if defined(__cplusplus)
63
- extern "C" {
64
- #endif
65
-
66
-
67
- /* Priority queue.
68
- *
69
- * The priority queue maintains a linked-list of nodes, each with a unique,
70
- * 64-bit priority, in ascending priority order. */
71
-
72
- typedef struct _pqueue *pqueue;
73
-
74
- typedef struct _pitem {
75
- uint8_t priority[8]; /* 64-bit value in big-endian encoding */
76
- void *data;
77
- struct _pitem *next;
78
- } pitem;
79
-
80
- typedef struct _pitem *piterator;
81
-
82
-
83
- /* Creating and freeing queues. */
84
-
85
- /* pqueue_new allocates a fresh, empty priority queue object and returns it, or
86
- * NULL on error. */
87
- OPENSSL_EXPORT pqueue pqueue_new(void);
88
-
89
- /* pqueue_free frees |pq| but not any of the items it points to. Thus |pq| must
90
- * be empty or a memory leak will occur. */
91
- OPENSSL_EXPORT void pqueue_free(pqueue pq);
92
-
93
-
94
- /* Creating and freeing items. */
95
-
96
- /* pitem_new allocates a fresh priority queue item that points at |data| and
97
- * has a priority given by |prio64be|, which is a 64-bit, unsigned number
98
- * expressed in big-endian form. It returns the fresh item, or NULL on
99
- * error. */
100
- OPENSSL_EXPORT pitem *pitem_new(uint8_t prio64be[8], void *data);
101
-
102
- /* pitem_free frees |item|, but not any data that it points to. */
103
- OPENSSL_EXPORT void pitem_free(pitem *item);
104
-
105
-
106
- /* Queue accessor functions */
107
-
108
- /* pqueue_peek returns the item with the smallest priority from |pq|, or NULL
109
- * if empty. */
110
- OPENSSL_EXPORT pitem *pqueue_peek(pqueue pq);
111
-
112
- /* pqueue_find returns the item whose priority matches |prio64be| or NULL if no
113
- * such item exists. */
114
- OPENSSL_EXPORT pitem *pqueue_find(pqueue pq, uint8_t *prio64be);
115
-
116
-
117
- /* Queue mutation functions */
118
-
119
- /* pqueue_insert inserts |item| into |pq| and returns item. */
120
- OPENSSL_EXPORT pitem *pqueue_insert(pqueue pq, pitem *item);
121
-
122
- /* pqueue_pop takes the item with the least priority from |pq| and returns it,
123
- * or NULL if |pq| is empty. */
124
- OPENSSL_EXPORT pitem *pqueue_pop(pqueue pq);
125
-
126
- /* pqueue_size returns the number of items in |pq|. */
127
- OPENSSL_EXPORT size_t pqueue_size(pqueue pq);
128
-
129
-
130
- /* Iterating */
131
-
132
- /* pqueue_iterator returns an iterator that can be used to iterate over the
133
- * contents of the queue. */
134
- OPENSSL_EXPORT piterator pqueue_iterator(pqueue pq);
135
-
136
- /* pqueue_next returns the current value of |iter| and advances it to the next
137
- * position. If the iterator has advanced over all the elements, it returns
138
- * NULL. */
139
- OPENSSL_EXPORT pitem *pqueue_next(piterator *iter);
140
-
141
-
142
- #if defined(__cplusplus)
143
- } /* extern C */
144
- #endif
145
-
146
- #endif /* OPENSSL_HEADER_PQUEUE_H */
@@ -1,561 +0,0 @@
1
- /*
2
- * DTLS implementation written by Nagendra Modadugu
3
- * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
4
- */
5
- /* ====================================================================
6
- * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.
7
- *
8
- * Redistribution and use in source and binary forms, with or without
9
- * modification, are permitted provided that the following conditions
10
- * are met:
11
- *
12
- * 1. Redistributions of source code must retain the above copyright
13
- * notice, this list of conditions and the following disclaimer.
14
- *
15
- * 2. Redistributions in binary form must reproduce the above copyright
16
- * notice, this list of conditions and the following disclaimer in
17
- * the documentation and/or other materials provided with the
18
- * distribution.
19
- *
20
- * 3. All advertising materials mentioning features or use of this
21
- * software must display the following acknowledgment:
22
- * "This product includes software developed by the OpenSSL Project
23
- * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24
- *
25
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26
- * endorse or promote products derived from this software without
27
- * prior written permission. For written permission, please contact
28
- * openssl-core@OpenSSL.org.
29
- *
30
- * 5. Products derived from this software may not be called "OpenSSL"
31
- * nor may "OpenSSL" appear in their names without prior written
32
- * permission of the OpenSSL Project.
33
- *
34
- * 6. Redistributions of any form whatsoever must retain the following
35
- * acknowledgment:
36
- * "This product includes software developed by the OpenSSL Project
37
- * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38
- *
39
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50
- * OF THE POSSIBILITY OF SUCH DAMAGE.
51
- * ====================================================================
52
- *
53
- * This product includes cryptographic software written by Eric Young
54
- * (eay@cryptsoft.com). This product includes software written by Tim
55
- * Hudson (tjh@cryptsoft.com).
56
- *
57
- */
58
- /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
59
- * All rights reserved.
60
- *
61
- * This package is an SSL implementation written
62
- * by Eric Young (eay@cryptsoft.com).
63
- * The implementation was written so as to conform with Netscapes SSL.
64
- *
65
- * This library is free for commercial and non-commercial use as long as
66
- * the following conditions are aheared to. The following conditions
67
- * apply to all code found in this distribution, be it the RC4, RSA,
68
- * lhash, DES, etc., code; not just the SSL code. The SSL documentation
69
- * included with this distribution is covered by the same copyright terms
70
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
71
- *
72
- * Copyright remains Eric Young's, and as such any Copyright notices in
73
- * the code are not to be removed.
74
- * If this package is used in a product, Eric Young should be given attribution
75
- * as the author of the parts of the library used.
76
- * This can be in the form of a textual message at program startup or
77
- * in documentation (online or textual) provided with the package.
78
- *
79
- * Redistribution and use in source and binary forms, with or without
80
- * modification, are permitted provided that the following conditions
81
- * are met:
82
- * 1. Redistributions of source code must retain the copyright
83
- * notice, this list of conditions and the following disclaimer.
84
- * 2. Redistributions in binary form must reproduce the above copyright
85
- * notice, this list of conditions and the following disclaimer in the
86
- * documentation and/or other materials provided with the distribution.
87
- * 3. All advertising materials mentioning features or use of this software
88
- * must display the following acknowledgement:
89
- * "This product includes cryptographic software written by
90
- * Eric Young (eay@cryptsoft.com)"
91
- * The word 'cryptographic' can be left out if the rouines from the library
92
- * being used are not cryptographic related :-).
93
- * 4. If you include any Windows specific code (or a derivative thereof) from
94
- * the apps directory (application code) you must include an acknowledgement:
95
- * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
96
- *
97
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
98
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
99
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
100
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
101
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
102
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
103
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
104
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
105
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
106
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
107
- * SUCH DAMAGE.
108
- *
109
- * The licence and distribution terms for any publically available version or
110
- * derivative of this code cannot be changed. i.e. this code cannot simply be
111
- * copied and put under another distribution licence
112
- * [including the GNU Public Licence.]
113
- */
114
-
115
- #include <openssl/ssl.h>
116
-
117
- #include <assert.h>
118
- #include <stdio.h>
119
- #include <string.h>
120
-
121
- #include <openssl/bn.h>
122
- #include <openssl/buf.h>
123
- #include <openssl/dh.h>
124
- #include <openssl/evp.h>
125
- #include <openssl/err.h>
126
- #include <openssl/md5.h>
127
- #include <openssl/mem.h>
128
- #include <openssl/obj.h>
129
- #include <openssl/rand.h>
130
-
131
- #include "internal.h"
132
-
133
-
134
- static int dtls1_get_hello_verify(SSL *ssl);
135
-
136
- int dtls1_connect(SSL *ssl) {
137
- BUF_MEM *buf = NULL;
138
- void (*cb)(const SSL *ssl, int type, int value) = NULL;
139
- int ret = -1;
140
- int new_state, state, skip = 0;
141
-
142
- assert(ssl->handshake_func == dtls1_connect);
143
- assert(!ssl->server);
144
- assert(SSL_IS_DTLS(ssl));
145
-
146
- ERR_clear_error();
147
- ERR_clear_system_error();
148
-
149
- if (ssl->info_callback != NULL) {
150
- cb = ssl->info_callback;
151
- } else if (ssl->ctx->info_callback != NULL) {
152
- cb = ssl->ctx->info_callback;
153
- }
154
-
155
- ssl->in_handshake++;
156
-
157
- for (;;) {
158
- state = ssl->state;
159
-
160
- switch (ssl->state) {
161
- case SSL_ST_CONNECT:
162
- if (cb != NULL) {
163
- cb(ssl, SSL_CB_HANDSHAKE_START, 1);
164
- }
165
-
166
- if (ssl->init_buf == NULL) {
167
- buf = BUF_MEM_new();
168
- if (buf == NULL ||
169
- !BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {
170
- ret = -1;
171
- goto end;
172
- }
173
- ssl->init_buf = buf;
174
- buf = NULL;
175
- }
176
-
177
- if (!ssl_init_wbio_buffer(ssl, 0)) {
178
- ret = -1;
179
- goto end;
180
- }
181
-
182
- /* don't push the buffering BIO quite yet */
183
-
184
- ssl->state = SSL3_ST_CW_CLNT_HELLO_A;
185
- ssl->init_num = 0;
186
- ssl->d1->send_cookie = 0;
187
- ssl->hit = 0;
188
- break;
189
-
190
- case SSL3_ST_CW_CLNT_HELLO_A:
191
- case SSL3_ST_CW_CLNT_HELLO_B:
192
- ssl->shutdown = 0;
193
- dtls1_start_timer(ssl);
194
- ret = ssl3_send_client_hello(ssl);
195
- if (ret <= 0) {
196
- goto end;
197
- }
198
-
199
- if (ssl->d1->send_cookie) {
200
- ssl->state = SSL3_ST_CW_FLUSH;
201
- ssl->s3->tmp.next_state = SSL3_ST_CR_SRVR_HELLO_A;
202
- } else {
203
- ssl->state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A;
204
- }
205
-
206
- ssl->init_num = 0;
207
- /* turn on buffering for the next lot of output */
208
- if (ssl->bbio != ssl->wbio) {
209
- ssl->wbio = BIO_push(ssl->bbio, ssl->wbio);
210
- }
211
-
212
- break;
213
-
214
- case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A:
215
- case DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B:
216
- ret = dtls1_get_hello_verify(ssl);
217
- if (ret <= 0) {
218
- goto end;
219
- }
220
- if (ssl->d1->send_cookie) {
221
- /* start again, with a cookie */
222
- dtls1_stop_timer(ssl);
223
- ssl->state = SSL3_ST_CW_CLNT_HELLO_A;
224
- } else {
225
- ssl->state = SSL3_ST_CR_SRVR_HELLO_A;
226
- }
227
- ssl->init_num = 0;
228
- break;
229
-
230
- case SSL3_ST_CR_SRVR_HELLO_A:
231
- case SSL3_ST_CR_SRVR_HELLO_B:
232
- ret = ssl3_get_server_hello(ssl);
233
- if (ret <= 0) {
234
- goto end;
235
- }
236
-
237
- if (ssl->hit) {
238
- ssl->state = SSL3_ST_CR_CHANGE;
239
- if (ssl->tlsext_ticket_expected) {
240
- /* receive renewed session ticket */
241
- ssl->state = SSL3_ST_CR_SESSION_TICKET_A;
242
- }
243
- } else {
244
- ssl->state = SSL3_ST_CR_CERT_A;
245
- }
246
- ssl->init_num = 0;
247
- break;
248
-
249
- case SSL3_ST_CR_CERT_A:
250
- case SSL3_ST_CR_CERT_B:
251
- if (ssl_cipher_has_server_public_key(ssl->s3->tmp.new_cipher)) {
252
- ret = ssl3_get_server_certificate(ssl);
253
- if (ret <= 0) {
254
- goto end;
255
- }
256
- if (ssl->s3->tmp.certificate_status_expected) {
257
- ssl->state = SSL3_ST_CR_CERT_STATUS_A;
258
- } else {
259
- ssl->state = SSL3_ST_VERIFY_SERVER_CERT;
260
- }
261
- } else {
262
- skip = 1;
263
- ssl->state = SSL3_ST_CR_KEY_EXCH_A;
264
- }
265
- ssl->init_num = 0;
266
- break;
267
-
268
- case SSL3_ST_VERIFY_SERVER_CERT:
269
- ret = ssl3_verify_server_cert(ssl);
270
- if (ret <= 0) {
271
- goto end;
272
- }
273
-
274
- ssl->state = SSL3_ST_CR_KEY_EXCH_A;
275
- ssl->init_num = 0;
276
- break;
277
-
278
- case SSL3_ST_CR_KEY_EXCH_A:
279
- case SSL3_ST_CR_KEY_EXCH_B:
280
- ret = ssl3_get_server_key_exchange(ssl);
281
- if (ret <= 0) {
282
- goto end;
283
- }
284
- ssl->state = SSL3_ST_CR_CERT_REQ_A;
285
- ssl->init_num = 0;
286
- break;
287
-
288
- case SSL3_ST_CR_CERT_REQ_A:
289
- case SSL3_ST_CR_CERT_REQ_B:
290
- ret = ssl3_get_certificate_request(ssl);
291
- if (ret <= 0) {
292
- goto end;
293
- }
294
- ssl->state = SSL3_ST_CR_SRVR_DONE_A;
295
- ssl->init_num = 0;
296
- break;
297
-
298
- case SSL3_ST_CR_SRVR_DONE_A:
299
- case SSL3_ST_CR_SRVR_DONE_B:
300
- ret = ssl3_get_server_done(ssl);
301
- if (ret <= 0) {
302
- goto end;
303
- }
304
- dtls1_stop_timer(ssl);
305
- if (ssl->s3->tmp.cert_req) {
306
- ssl->s3->tmp.next_state = SSL3_ST_CW_CERT_A;
307
- } else {
308
- ssl->s3->tmp.next_state = SSL3_ST_CW_KEY_EXCH_A;
309
- }
310
- ssl->init_num = 0;
311
- ssl->state = ssl->s3->tmp.next_state;
312
- break;
313
-
314
- case SSL3_ST_CW_CERT_A:
315
- case SSL3_ST_CW_CERT_B:
316
- case SSL3_ST_CW_CERT_C:
317
- case SSL3_ST_CW_CERT_D:
318
- dtls1_start_timer(ssl);
319
- ret = ssl3_send_client_certificate(ssl);
320
- if (ret <= 0) {
321
- goto end;
322
- }
323
- ssl->state = SSL3_ST_CW_KEY_EXCH_A;
324
- ssl->init_num = 0;
325
- break;
326
-
327
- case SSL3_ST_CW_KEY_EXCH_A:
328
- case SSL3_ST_CW_KEY_EXCH_B:
329
- dtls1_start_timer(ssl);
330
- ret = ssl3_send_client_key_exchange(ssl);
331
- if (ret <= 0) {
332
- goto end;
333
- }
334
- /* For TLS, cert_req is set to 2, so a cert chain
335
- * of nothing is sent, but no verify packet is sent */
336
- if (ssl->s3->tmp.cert_req == 1) {
337
- ssl->state = SSL3_ST_CW_CERT_VRFY_A;
338
- } else {
339
- ssl->state = SSL3_ST_CW_CHANGE_A;
340
- }
341
-
342
- ssl->init_num = 0;
343
- break;
344
-
345
- case SSL3_ST_CW_CERT_VRFY_A:
346
- case SSL3_ST_CW_CERT_VRFY_B:
347
- case SSL3_ST_CW_CERT_VRFY_C:
348
- dtls1_start_timer(ssl);
349
- ret = ssl3_send_cert_verify(ssl);
350
- if (ret <= 0) {
351
- goto end;
352
- }
353
- ssl->state = SSL3_ST_CW_CHANGE_A;
354
- ssl->init_num = 0;
355
- break;
356
-
357
- case SSL3_ST_CW_CHANGE_A:
358
- case SSL3_ST_CW_CHANGE_B:
359
- if (!ssl->hit) {
360
- dtls1_start_timer(ssl);
361
- }
362
- ret = dtls1_send_change_cipher_spec(ssl, SSL3_ST_CW_CHANGE_A,
363
- SSL3_ST_CW_CHANGE_B);
364
- if (ret <= 0) {
365
- goto end;
366
- }
367
-
368
- ssl->state = SSL3_ST_CW_FINISHED_A;
369
- ssl->init_num = 0;
370
-
371
- if (!tls1_change_cipher_state(ssl, SSL3_CHANGE_CIPHER_CLIENT_WRITE)) {
372
- ret = -1;
373
- goto end;
374
- }
375
- break;
376
-
377
- case SSL3_ST_CW_FINISHED_A:
378
- case SSL3_ST_CW_FINISHED_B:
379
- if (!ssl->hit) {
380
- dtls1_start_timer(ssl);
381
- }
382
-
383
- ret = ssl3_send_finished(ssl, SSL3_ST_CW_FINISHED_A,
384
- SSL3_ST_CW_FINISHED_B);
385
- if (ret <= 0) {
386
- goto end;
387
- }
388
- ssl->state = SSL3_ST_CW_FLUSH;
389
-
390
- if (ssl->hit) {
391
- ssl->s3->tmp.next_state = SSL_ST_OK;
392
- } else {
393
- /* Allow NewSessionTicket if ticket expected */
394
- if (ssl->tlsext_ticket_expected) {
395
- ssl->s3->tmp.next_state = SSL3_ST_CR_SESSION_TICKET_A;
396
- } else {
397
- ssl->s3->tmp.next_state = SSL3_ST_CR_CHANGE;
398
- }
399
- }
400
- ssl->init_num = 0;
401
- break;
402
-
403
- case SSL3_ST_CR_SESSION_TICKET_A:
404
- case SSL3_ST_CR_SESSION_TICKET_B:
405
- ret = ssl3_get_new_session_ticket(ssl);
406
- if (ret <= 0) {
407
- goto end;
408
- }
409
- ssl->state = SSL3_ST_CR_CHANGE;
410
- ssl->init_num = 0;
411
- break;
412
-
413
- case SSL3_ST_CR_CERT_STATUS_A:
414
- case SSL3_ST_CR_CERT_STATUS_B:
415
- ret = ssl3_get_cert_status(ssl);
416
- if (ret <= 0) {
417
- goto end;
418
- }
419
- ssl->state = SSL3_ST_VERIFY_SERVER_CERT;
420
- ssl->init_num = 0;
421
- break;
422
-
423
- case SSL3_ST_CR_CHANGE:
424
- ret = ssl->method->ssl_read_change_cipher_spec(ssl);
425
- if (ret <= 0) {
426
- goto end;
427
- }
428
-
429
- if (!tls1_change_cipher_state(ssl, SSL3_CHANGE_CIPHER_CLIENT_READ)) {
430
- ret = -1;
431
- goto end;
432
- }
433
- ssl->state = SSL3_ST_CR_FINISHED_A;
434
- break;
435
-
436
- case SSL3_ST_CR_FINISHED_A:
437
- case SSL3_ST_CR_FINISHED_B:
438
- ret =
439
- ssl3_get_finished(ssl, SSL3_ST_CR_FINISHED_A, SSL3_ST_CR_FINISHED_B);
440
- if (ret <= 0) {
441
- goto end;
442
- }
443
- dtls1_stop_timer(ssl);
444
-
445
- if (ssl->hit) {
446
- ssl->state = SSL3_ST_CW_CHANGE_A;
447
- } else {
448
- ssl->state = SSL_ST_OK;
449
- }
450
-
451
- ssl->init_num = 0;
452
- break;
453
-
454
- case SSL3_ST_CW_FLUSH:
455
- ssl->rwstate = SSL_WRITING;
456
- if (BIO_flush(ssl->wbio) <= 0) {
457
- ret = -1;
458
- goto end;
459
- }
460
- ssl->rwstate = SSL_NOTHING;
461
- ssl->state = ssl->s3->tmp.next_state;
462
- break;
463
-
464
- case SSL_ST_OK:
465
- /* clean a few things up */
466
- ssl3_cleanup_key_block(ssl);
467
-
468
- /* Remove write buffering now. */
469
- ssl_free_wbio_buffer(ssl);
470
-
471
- ssl->init_num = 0;
472
- ssl->s3->initial_handshake_complete = 1;
473
-
474
- ssl_update_cache(ssl, SSL_SESS_CACHE_CLIENT);
475
-
476
- ret = 1;
477
-
478
- if (cb != NULL) {
479
- cb(ssl, SSL_CB_HANDSHAKE_DONE, 1);
480
- }
481
-
482
- /* done with handshaking */
483
- ssl->d1->handshake_read_seq = 0;
484
- ssl->d1->next_handshake_write_seq = 0;
485
- goto end;
486
-
487
- default:
488
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_STATE);
489
- ret = -1;
490
- goto end;
491
- }
492
-
493
- /* did we do anything? */
494
- if (!ssl->s3->tmp.reuse_message && !skip) {
495
- if ((cb != NULL) && (ssl->state != state)) {
496
- new_state = ssl->state;
497
- ssl->state = state;
498
- cb(ssl, SSL_CB_CONNECT_LOOP, 1);
499
- ssl->state = new_state;
500
- }
501
- }
502
- skip = 0;
503
- }
504
-
505
- end:
506
- ssl->in_handshake--;
507
-
508
- BUF_MEM_free(buf);
509
- if (cb != NULL) {
510
- cb(ssl, SSL_CB_CONNECT_EXIT, ret);
511
- }
512
- return ret;
513
- }
514
-
515
- static int dtls1_get_hello_verify(SSL *ssl) {
516
- long n;
517
- int al, ok = 0;
518
- CBS hello_verify_request, cookie;
519
- uint16_t server_version;
520
-
521
- n = ssl->method->ssl_get_message(
522
- ssl, DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A,
523
- DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B, -1,
524
- /* Use the same maximum size as ssl3_get_server_hello. */
525
- 20000, ssl_hash_message, &ok);
526
-
527
- if (!ok) {
528
- return n;
529
- }
530
-
531
- if (ssl->s3->tmp.message_type != DTLS1_MT_HELLO_VERIFY_REQUEST) {
532
- ssl->d1->send_cookie = 0;
533
- ssl->s3->tmp.reuse_message = 1;
534
- return 1;
535
- }
536
-
537
- CBS_init(&hello_verify_request, ssl->init_msg, n);
538
-
539
- if (!CBS_get_u16(&hello_verify_request, &server_version) ||
540
- !CBS_get_u8_length_prefixed(&hello_verify_request, &cookie) ||
541
- CBS_len(&hello_verify_request) != 0) {
542
- al = SSL_AD_DECODE_ERROR;
543
- OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR);
544
- goto f_err;
545
- }
546
-
547
- if (CBS_len(&cookie) > sizeof(ssl->d1->cookie)) {
548
- al = SSL_AD_ILLEGAL_PARAMETER;
549
- goto f_err;
550
- }
551
-
552
- memcpy(ssl->d1->cookie, CBS_data(&cookie), CBS_len(&cookie));
553
- ssl->d1->cookie_len = CBS_len(&cookie);
554
-
555
- ssl->d1->send_cookie = 1;
556
- return 1;
557
-
558
- f_err:
559
- ssl3_send_alert(ssl, SSL3_AL_FATAL, al);
560
- return -1;
561
- }