grpc 1.4.5 → 1.6.0.pre1

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

Potentially problematic release.


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

Files changed (928) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1235 -1100
  3. data/etc/roots.pem +0 -412
  4. data/include/grpc/byte_buffer.h +10 -25
  5. data/include/grpc/byte_buffer_reader.h +10 -25
  6. data/include/grpc/census.h +10 -25
  7. data/include/grpc/compression.h +10 -25
  8. data/include/grpc/grpc.h +15 -26
  9. data/include/grpc/grpc_cronet.h +10 -25
  10. data/include/grpc/grpc_posix.h +10 -25
  11. data/include/grpc/grpc_security.h +10 -25
  12. data/include/grpc/grpc_security_constants.h +10 -25
  13. data/include/grpc/impl/codegen/atm.h +11 -25
  14. data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
  15. data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
  16. data/include/grpc/impl/codegen/atm_windows.h +10 -25
  17. data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
  18. data/include/grpc/impl/codegen/compression_types.h +12 -27
  19. data/include/grpc/impl/codegen/connectivity_state.h +10 -25
  20. data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
  21. data/include/grpc/impl/codegen/gpr_slice.h +10 -25
  22. data/include/grpc/impl/codegen/gpr_types.h +10 -25
  23. data/include/grpc/impl/codegen/grpc_types.h +42 -43
  24. data/include/grpc/impl/codegen/port_platform.h +10 -25
  25. data/include/grpc/impl/codegen/propagation_bits.h +10 -25
  26. data/include/grpc/impl/codegen/slice.h +13 -28
  27. data/include/grpc/impl/codegen/status.h +10 -25
  28. data/include/grpc/impl/codegen/sync.h +10 -25
  29. data/include/grpc/impl/codegen/sync_generic.h +10 -25
  30. data/include/grpc/impl/codegen/sync_posix.h +10 -25
  31. data/include/grpc/impl/codegen/sync_windows.h +10 -25
  32. data/include/grpc/load_reporting.h +10 -25
  33. data/include/grpc/slice.h +10 -25
  34. data/include/grpc/slice_buffer.h +10 -25
  35. data/include/grpc/status.h +10 -25
  36. data/include/grpc/support/alloc.h +10 -25
  37. data/include/grpc/support/atm.h +10 -25
  38. data/include/grpc/support/atm_gcc_atomic.h +10 -25
  39. data/include/grpc/support/atm_gcc_sync.h +10 -25
  40. data/include/grpc/support/atm_windows.h +10 -25
  41. data/include/grpc/support/avl.h +46 -49
  42. data/include/grpc/support/cmdline.h +10 -25
  43. data/include/grpc/support/cpu.h +10 -25
  44. data/include/grpc/support/histogram.h +10 -25
  45. data/include/grpc/support/host_port.h +10 -25
  46. data/include/grpc/support/log.h +10 -25
  47. data/include/grpc/support/log_windows.h +10 -25
  48. data/include/grpc/support/port_platform.h +10 -25
  49. data/include/grpc/support/string_util.h +10 -25
  50. data/include/grpc/support/subprocess.h +10 -25
  51. data/include/grpc/support/sync.h +10 -25
  52. data/include/grpc/support/sync_generic.h +10 -25
  53. data/include/grpc/support/sync_posix.h +10 -25
  54. data/include/grpc/support/sync_windows.h +10 -25
  55. data/include/grpc/support/thd.h +10 -25
  56. data/include/grpc/support/time.h +10 -25
  57. data/include/grpc/support/tls.h +10 -25
  58. data/include/grpc/support/tls_gcc.h +10 -25
  59. data/include/grpc/support/tls_msvc.h +10 -25
  60. data/include/grpc/support/tls_pthread.h +10 -25
  61. data/include/grpc/support/useful.h +10 -25
  62. data/include/grpc/support/workaround_list.h +11 -26
  63. data/src/boringssl/err_data.c +277 -259
  64. data/src/core/ext/census/aggregation.h +10 -25
  65. data/src/core/ext/census/base_resources.c +10 -25
  66. data/src/core/ext/census/base_resources.h +10 -25
  67. data/src/core/ext/census/census_interface.h +10 -25
  68. data/src/core/ext/census/census_rpc_stats.h +10 -25
  69. data/src/core/ext/census/context.c +10 -25
  70. data/src/core/ext/census/gen/census.pb.c +10 -25
  71. data/src/core/ext/census/gen/census.pb.h +10 -25
  72. data/src/core/ext/census/gen/trace_context.pb.c +10 -25
  73. data/src/core/ext/census/gen/trace_context.pb.h +10 -25
  74. data/src/core/ext/census/grpc_context.c +10 -25
  75. data/src/core/ext/census/grpc_filter.c +11 -26
  76. data/src/core/ext/census/grpc_filter.h +10 -25
  77. data/src/core/ext/census/grpc_plugin.c +10 -25
  78. data/src/core/ext/census/initialize.c +10 -25
  79. data/src/core/ext/census/intrusive_hash_map.c +10 -25
  80. data/src/core/ext/census/intrusive_hash_map.h +10 -25
  81. data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
  82. data/src/core/ext/census/mlog.c +10 -25
  83. data/src/core/ext/census/mlog.h +10 -25
  84. data/src/core/ext/census/operation.c +10 -25
  85. data/src/core/ext/census/placeholders.c +10 -25
  86. data/src/core/ext/census/resource.c +10 -25
  87. data/src/core/ext/census/resource.h +10 -25
  88. data/src/core/ext/census/rpc_metric_id.h +10 -25
  89. data/src/core/ext/census/trace_context.c +10 -25
  90. data/src/core/ext/census/trace_context.h +10 -25
  91. data/src/core/ext/census/trace_label.h +10 -25
  92. data/src/core/ext/census/trace_propagation.h +10 -25
  93. data/src/core/ext/census/trace_status.h +10 -25
  94. data/src/core/ext/census/trace_string.h +10 -25
  95. data/src/core/ext/census/tracing.c +10 -26
  96. data/src/core/ext/census/tracing.h +10 -25
  97. data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
  98. data/src/core/ext/filters/client_channel/client_channel.c +617 -520
  99. data/src/core/ext/filters/client_channel/client_channel.h +15 -28
  100. data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
  101. data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
  102. data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
  103. data/src/core/ext/filters/client_channel/connector.c +10 -25
  104. data/src/core/ext/filters/client_channel/connector.h +10 -25
  105. data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
  106. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
  107. data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
  108. data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
  109. data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
  110. data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
  113. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
  114. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
  115. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
  116. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
  117. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
  118. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
  119. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
  120. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
  121. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
  122. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
  123. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
  124. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
  125. data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
  126. data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
  127. data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
  128. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
  129. data/src/core/ext/filters/client_channel/parse_address.c +10 -25
  130. data/src/core/ext/filters/client_channel/parse_address.h +10 -25
  131. data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
  132. data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
  133. data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
  134. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
  135. data/src/core/ext/filters/client_channel/resolver.c +33 -38
  136. data/src/core/ext/filters/client_channel/resolver.h +19 -30
  137. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
  143. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
  144. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
  145. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
  146. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
  147. data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
  148. data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
  149. data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
  150. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
  151. data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
  152. data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
  153. data/src/core/ext/filters/client_channel/subchannel.c +33 -55
  154. data/src/core/ext/filters/client_channel/subchannel.h +16 -26
  155. data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
  156. data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
  157. data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
  158. data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
  159. data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
  160. data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
  161. data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
  162. data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
  163. data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
  164. data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
  165. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
  166. data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
  167. data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
  168. data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
  169. data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
  170. data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
  171. data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
  172. data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
  173. data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
  174. data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
  175. data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
  176. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
  177. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
  178. data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
  179. data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
  180. data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
  181. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
  182. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
  183. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
  184. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
  185. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
  186. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
  187. data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
  188. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
  189. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
  190. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
  191. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
  192. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
  193. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
  194. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
  195. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
  196. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
  197. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
  199. data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
  200. data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
  201. data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
  202. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
  203. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
  204. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
  205. data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
  206. data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
  207. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
  208. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
  209. data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
  210. data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
  211. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
  213. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
  214. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
  215. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
  216. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
  217. data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
  218. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
  219. data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
  220. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
  221. data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
  222. data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
  223. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
  224. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
  225. data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
  226. data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
  227. data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
  228. data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
  229. data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
  230. data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
  231. data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
  232. data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
  233. data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
  234. data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
  235. data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
  236. data/src/core/lib/channel/channel_args.c +52 -27
  237. data/src/core/lib/channel/channel_args.h +18 -27
  238. data/src/core/lib/channel/channel_stack.c +11 -26
  239. data/src/core/lib/channel/channel_stack.h +12 -27
  240. data/src/core/lib/channel/channel_stack_builder.c +11 -26
  241. data/src/core/lib/channel/channel_stack_builder.h +10 -25
  242. data/src/core/lib/channel/connected_channel.c +10 -25
  243. data/src/core/lib/channel/connected_channel.h +10 -25
  244. data/src/core/lib/channel/context.h +10 -25
  245. data/src/core/lib/channel/handshaker.c +14 -29
  246. data/src/core/lib/channel/handshaker.h +10 -25
  247. data/src/core/lib/channel/handshaker_factory.c +10 -25
  248. data/src/core/lib/channel/handshaker_factory.h +10 -25
  249. data/src/core/lib/channel/handshaker_registry.c +10 -25
  250. data/src/core/lib/channel/handshaker_registry.h +10 -25
  251. data/src/core/lib/compression/algorithm_metadata.h +10 -25
  252. data/src/core/lib/compression/compression.c +10 -25
  253. data/src/core/lib/compression/message_compress.c +10 -25
  254. data/src/core/lib/compression/message_compress.h +10 -25
  255. data/src/core/lib/compression/stream_compression.c +191 -0
  256. data/src/core/lib/compression/stream_compression.h +90 -0
  257. data/src/core/lib/debug/trace.c +28 -29
  258. data/src/core/lib/debug/trace.h +16 -30
  259. data/src/core/lib/http/format_request.c +10 -25
  260. data/src/core/lib/http/format_request.h +10 -25
  261. data/src/core/lib/http/httpcli.c +19 -35
  262. data/src/core/lib/http/httpcli.h +10 -25
  263. data/src/core/lib/http/httpcli_security_connector.c +17 -30
  264. data/src/core/lib/http/parser.c +11 -26
  265. data/src/core/lib/http/parser.h +10 -25
  266. data/src/core/lib/iomgr/closure.c +62 -25
  267. data/src/core/lib/iomgr/closure.h +81 -26
  268. data/src/core/lib/iomgr/combiner.c +103 -200
  269. data/src/core/lib/iomgr/combiner.h +14 -32
  270. data/src/core/lib/iomgr/endpoint.c +10 -29
  271. data/src/core/lib/iomgr/endpoint.h +10 -29
  272. data/src/core/lib/iomgr/endpoint_pair.h +10 -25
  273. data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
  274. data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
  275. data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
  276. data/src/core/lib/iomgr/error.c +45 -46
  277. data/src/core/lib/iomgr/error.h +21 -34
  278. data/src/core/lib/iomgr/error_internal.h +10 -25
  279. data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
  280. data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
  281. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
  282. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
  283. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
  284. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
  285. data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
  286. data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
  287. data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
  288. data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
  289. data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
  290. data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
  291. data/src/core/lib/iomgr/ev_posix.c +25 -56
  292. data/src/core/lib/iomgr/ev_posix.h +15 -44
  293. data/src/core/lib/iomgr/ev_windows.c +11 -26
  294. data/src/core/lib/iomgr/exec_ctx.c +36 -45
  295. data/src/core/lib/iomgr/exec_ctx.h +10 -25
  296. data/src/core/lib/iomgr/executor.c +152 -127
  297. data/src/core/lib/iomgr/executor.h +18 -26
  298. data/src/core/lib/iomgr/gethostname.h +26 -0
  299. data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
  300. data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
  301. data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
  302. data/src/core/lib/iomgr/iocp_windows.c +10 -25
  303. data/src/core/lib/iomgr/iocp_windows.h +10 -25
  304. data/src/core/lib/iomgr/iomgr.c +17 -28
  305. data/src/core/lib/iomgr/iomgr.h +12 -27
  306. data/src/core/lib/iomgr/iomgr_internal.h +10 -25
  307. data/src/core/lib/iomgr/iomgr_posix.c +11 -26
  308. data/src/core/lib/iomgr/iomgr_posix.h +10 -25
  309. data/src/core/lib/iomgr/iomgr_uv.c +19 -26
  310. data/src/core/lib/iomgr/iomgr_uv.h +37 -0
  311. data/src/core/lib/iomgr/iomgr_windows.c +10 -25
  312. data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
  313. data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
  314. data/src/core/lib/iomgr/load_file.c +10 -25
  315. data/src/core/lib/iomgr/load_file.h +10 -25
  316. data/src/core/lib/iomgr/lockfree_event.c +22 -35
  317. data/src/core/lib/iomgr/lockfree_event.h +13 -27
  318. data/src/core/lib/iomgr/nameser.h +104 -0
  319. data/src/core/lib/iomgr/network_status_tracker.c +10 -25
  320. data/src/core/lib/iomgr/network_status_tracker.h +10 -25
  321. data/src/core/lib/iomgr/polling_entity.c +10 -25
  322. data/src/core/lib/iomgr/polling_entity.h +14 -34
  323. data/src/core/lib/iomgr/pollset.h +14 -25
  324. data/src/core/lib/iomgr/pollset_set.h +10 -25
  325. data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
  326. data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
  327. data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
  328. data/src/core/lib/iomgr/pollset_uv.c +25 -26
  329. data/src/core/lib/iomgr/pollset_uv.h +10 -25
  330. data/src/core/lib/iomgr/pollset_windows.c +17 -27
  331. data/src/core/lib/iomgr/pollset_windows.h +10 -25
  332. data/src/core/lib/iomgr/port.h +24 -25
  333. data/src/core/lib/iomgr/resolve_address.h +10 -25
  334. data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
  335. data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
  336. data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
  337. data/src/core/lib/iomgr/resource_quota.c +52 -67
  338. data/src/core/lib/iomgr/resource_quota.h +10 -25
  339. data/src/core/lib/iomgr/sockaddr.h +10 -25
  340. data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
  341. data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
  342. data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
  343. data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
  344. data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
  345. data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
  346. data/src/core/lib/iomgr/socket_mutator.c +14 -31
  347. data/src/core/lib/iomgr/socket_mutator.h +10 -25
  348. data/src/core/lib/iomgr/socket_utils.h +10 -25
  349. data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
  350. data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
  351. data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
  352. data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
  353. data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
  354. data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
  355. data/src/core/lib/iomgr/socket_windows.c +12 -27
  356. data/src/core/lib/iomgr/socket_windows.h +10 -25
  357. data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
  358. data/src/core/lib/iomgr/tcp_client.h +10 -25
  359. data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
  360. data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
  361. data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
  362. data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
  363. data/src/core/lib/iomgr/tcp_posix.c +36 -55
  364. data/src/core/lib/iomgr/tcp_posix.h +10 -25
  365. data/src/core/lib/iomgr/tcp_server.h +10 -25
  366. data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
  367. data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
  368. data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
  369. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
  370. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
  371. data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
  372. data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
  373. data/src/core/lib/iomgr/tcp_uv.c +41 -45
  374. data/src/core/lib/iomgr/tcp_uv.h +10 -25
  375. data/src/core/lib/iomgr/tcp_windows.c +39 -53
  376. data/src/core/lib/iomgr/tcp_windows.h +10 -25
  377. data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
  378. data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
  379. data/src/core/lib/iomgr/timer.h +18 -27
  380. data/src/core/lib/iomgr/timer_generic.c +91 -87
  381. data/src/core/lib/iomgr/timer_generic.h +10 -25
  382. data/src/core/lib/iomgr/timer_heap.c +10 -25
  383. data/src/core/lib/iomgr/timer_heap.h +10 -25
  384. data/src/core/lib/iomgr/timer_manager.c +178 -100
  385. data/src/core/lib/iomgr/timer_manager.h +10 -25
  386. data/src/core/lib/iomgr/timer_uv.c +23 -33
  387. data/src/core/lib/iomgr/timer_uv.h +10 -25
  388. data/src/core/lib/iomgr/udp_server.c +17 -32
  389. data/src/core/lib/iomgr/udp_server.h +10 -25
  390. data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
  391. data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
  392. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
  393. data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
  394. data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
  395. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
  396. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
  397. data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
  398. data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
  399. data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
  400. data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
  401. data/src/core/lib/json/json.c +10 -25
  402. data/src/core/lib/json/json.h +10 -25
  403. data/src/core/lib/json/json_common.h +10 -25
  404. data/src/core/lib/json/json_reader.c +11 -25
  405. data/src/core/lib/json/json_reader.h +10 -25
  406. data/src/core/lib/json/json_string.c +10 -25
  407. data/src/core/lib/json/json_writer.c +10 -25
  408. data/src/core/lib/json/json_writer.h +10 -25
  409. data/src/core/lib/profiling/basic_timers.c +10 -25
  410. data/src/core/lib/profiling/stap_timers.c +10 -25
  411. data/src/core/lib/profiling/timers.h +10 -25
  412. data/src/core/lib/security/context/security_context.c +32 -40
  413. data/src/core/lib/security/context/security_context.h +15 -26
  414. data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
  415. data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
  416. data/src/core/lib/security/credentials/credentials.c +29 -49
  417. data/src/core/lib/security/credentials/credentials.h +48 -61
  418. data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
  419. data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
  420. data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
  421. data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
  422. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
  423. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
  424. data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
  425. data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
  426. data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
  427. data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
  428. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
  429. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
  430. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
  431. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
  432. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
  433. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
  434. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
  435. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
  436. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
  437. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
  438. data/src/core/lib/security/transport/auth_filters.h +10 -25
  439. data/src/core/lib/security/transport/client_auth_filter.c +217 -112
  440. data/src/core/lib/security/transport/lb_targets_info.c +16 -32
  441. data/src/core/lib/security/transport/lb_targets_info.h +10 -25
  442. data/src/core/lib/security/transport/secure_endpoint.c +29 -43
  443. data/src/core/lib/security/transport/secure_endpoint.h +10 -25
  444. data/src/core/lib/security/transport/security_connector.c +80 -61
  445. data/src/core/lib/security/transport/security_connector.h +35 -35
  446. data/src/core/lib/security/transport/security_handshaker.c +18 -33
  447. data/src/core/lib/security/transport/security_handshaker.h +10 -25
  448. data/src/core/lib/security/transport/server_auth_filter.c +62 -116
  449. data/src/core/lib/security/transport/tsi_error.c +10 -25
  450. data/src/core/lib/security/transport/tsi_error.h +10 -25
  451. data/src/core/lib/security/util/json_util.c +10 -25
  452. data/src/core/lib/security/util/json_util.h +10 -25
  453. data/src/core/lib/slice/b64.c +10 -25
  454. data/src/core/lib/slice/b64.h +10 -25
  455. data/src/core/lib/slice/percent_encoding.c +10 -25
  456. data/src/core/lib/slice/percent_encoding.h +10 -25
  457. data/src/core/lib/slice/slice.c +10 -25
  458. data/src/core/lib/slice/slice_buffer.c +10 -25
  459. data/src/core/lib/slice/slice_hash_table.c +48 -26
  460. data/src/core/lib/slice/slice_hash_table.h +26 -28
  461. data/src/core/lib/slice/slice_intern.c +10 -25
  462. data/src/core/lib/slice/slice_internal.h +10 -25
  463. data/src/core/lib/slice/slice_string_helpers.c +10 -25
  464. data/src/core/lib/slice/slice_string_helpers.h +10 -25
  465. data/src/core/lib/support/alloc.c +10 -25
  466. data/src/core/lib/support/arena.c +12 -27
  467. data/src/core/lib/support/arena.h +10 -25
  468. data/src/core/lib/support/atm.c +17 -32
  469. data/src/core/lib/support/atomic.h +10 -25
  470. data/src/core/lib/support/atomic_with_atm.h +10 -25
  471. data/src/core/lib/support/atomic_with_std.h +10 -25
  472. data/src/core/lib/support/avl.c +101 -101
  473. data/src/core/lib/support/backoff.c +10 -25
  474. data/src/core/lib/support/backoff.h +10 -25
  475. data/src/core/lib/support/block_annotate.h +10 -25
  476. data/src/core/lib/support/cmdline.c +10 -25
  477. data/src/core/lib/support/cpu_iphone.c +10 -25
  478. data/src/core/lib/support/cpu_linux.c +10 -25
  479. data/src/core/lib/support/cpu_posix.c +10 -25
  480. data/src/core/lib/support/cpu_windows.c +10 -25
  481. data/src/core/lib/support/env.h +16 -25
  482. data/src/core/lib/support/env_linux.c +30 -37
  483. data/src/core/lib/support/env_posix.c +15 -25
  484. data/src/core/lib/support/env_windows.c +15 -25
  485. data/src/core/lib/support/histogram.c +10 -25
  486. data/src/core/lib/support/host_port.c +10 -25
  487. data/src/core/lib/support/log.c +20 -29
  488. data/src/core/lib/support/log_android.c +10 -25
  489. data/src/core/lib/support/log_linux.c +13 -26
  490. data/src/core/lib/support/log_posix.c +10 -25
  491. data/src/core/lib/support/log_windows.c +10 -25
  492. data/src/core/lib/support/memory.h +10 -25
  493. data/src/core/lib/support/mpscq.c +11 -49
  494. data/src/core/lib/support/mpscq.h +11 -50
  495. data/src/core/lib/support/murmur_hash.c +12 -25
  496. data/src/core/lib/support/murmur_hash.h +10 -25
  497. data/src/core/lib/support/spinlock.h +10 -25
  498. data/src/core/lib/support/stack_lockfree.c +10 -25
  499. data/src/core/lib/support/stack_lockfree.h +10 -25
  500. data/src/core/lib/support/string.c +10 -25
  501. data/src/core/lib/support/string.h +10 -25
  502. data/src/core/lib/support/string_posix.c +10 -25
  503. data/src/core/lib/support/string_util_windows.c +10 -25
  504. data/src/core/lib/support/string_windows.c +10 -25
  505. data/src/core/lib/support/string_windows.h +10 -25
  506. data/src/core/lib/support/subprocess_posix.c +10 -25
  507. data/src/core/lib/support/subprocess_windows.c +10 -25
  508. data/src/core/lib/support/sync.c +10 -25
  509. data/src/core/lib/support/sync_posix.c +10 -25
  510. data/src/core/lib/support/sync_windows.c +10 -25
  511. data/src/core/lib/support/thd.c +10 -25
  512. data/src/core/lib/support/thd_internal.h +10 -25
  513. data/src/core/lib/support/thd_posix.c +10 -25
  514. data/src/core/lib/support/thd_windows.c +10 -25
  515. data/src/core/lib/support/time.c +10 -25
  516. data/src/core/lib/support/time_posix.c +10 -25
  517. data/src/core/lib/support/time_precise.c +18 -33
  518. data/src/core/lib/support/time_precise.h +10 -25
  519. data/src/core/lib/support/time_windows.c +10 -25
  520. data/src/core/lib/support/tls_pthread.c +10 -25
  521. data/src/core/lib/support/tmpfile.h +10 -25
  522. data/src/core/lib/support/tmpfile_msys.c +10 -25
  523. data/src/core/lib/support/tmpfile_posix.c +10 -25
  524. data/src/core/lib/support/tmpfile_windows.c +10 -25
  525. data/src/core/lib/support/wrap_memcpy.c +10 -25
  526. data/src/core/lib/surface/alarm.c +78 -35
  527. data/src/core/lib/surface/alarm_internal.h +40 -0
  528. data/src/core/lib/surface/api_trace.c +11 -26
  529. data/src/core/lib/surface/api_trace.h +10 -25
  530. data/src/core/lib/surface/byte_buffer.c +10 -25
  531. data/src/core/lib/surface/byte_buffer_reader.c +10 -25
  532. data/src/core/lib/surface/call.c +64 -84
  533. data/src/core/lib/surface/call.h +11 -26
  534. data/src/core/lib/surface/call_details.c +10 -25
  535. data/src/core/lib/surface/call_log_batch.c +10 -25
  536. data/src/core/lib/surface/call_test_only.h +10 -25
  537. data/src/core/lib/surface/channel.c +11 -26
  538. data/src/core/lib/surface/channel.h +11 -26
  539. data/src/core/lib/surface/channel_init.c +10 -25
  540. data/src/core/lib/surface/channel_init.h +10 -25
  541. data/src/core/lib/surface/channel_ping.c +12 -27
  542. data/src/core/lib/surface/channel_stack_type.c +10 -25
  543. data/src/core/lib/surface/channel_stack_type.h +10 -25
  544. data/src/core/lib/surface/completion_queue.c +442 -331
  545. data/src/core/lib/surface/completion_queue.h +16 -33
  546. data/src/core/lib/surface/completion_queue_factory.c +10 -25
  547. data/src/core/lib/surface/completion_queue_factory.h +10 -25
  548. data/src/core/lib/surface/event_string.c +10 -25
  549. data/src/core/lib/surface/event_string.h +10 -25
  550. data/src/core/lib/surface/init.c +38 -47
  551. data/src/core/lib/surface/init.h +10 -25
  552. data/src/core/lib/surface/init_secure.c +20 -27
  553. data/src/core/lib/surface/lame_client.cc +14 -29
  554. data/src/core/lib/surface/lame_client.h +10 -25
  555. data/src/core/lib/surface/metadata_array.c +10 -25
  556. data/src/core/lib/surface/server.c +128 -81
  557. data/src/core/lib/surface/server.h +10 -25
  558. data/src/core/lib/surface/validate_metadata.c +10 -25
  559. data/src/core/lib/surface/validate_metadata.h +10 -25
  560. data/src/core/lib/surface/version.c +11 -26
  561. data/src/core/lib/transport/bdp_estimator.c +19 -29
  562. data/src/core/lib/transport/bdp_estimator.h +16 -29
  563. data/src/core/lib/transport/byte_stream.c +127 -36
  564. data/src/core/lib/transport/byte_stream.h +88 -46
  565. data/src/core/lib/transport/connectivity_state.c +17 -31
  566. data/src/core/lib/transport/connectivity_state.h +10 -25
  567. data/src/core/lib/transport/error_utils.c +10 -25
  568. data/src/core/lib/transport/error_utils.h +10 -25
  569. data/src/core/lib/transport/http2_errors.h +10 -25
  570. data/src/core/lib/transport/metadata.c +87 -85
  571. data/src/core/lib/transport/metadata.h +15 -28
  572. data/src/core/lib/transport/metadata_batch.c +10 -25
  573. data/src/core/lib/transport/metadata_batch.h +10 -25
  574. data/src/core/lib/transport/pid_controller.c +10 -25
  575. data/src/core/lib/transport/pid_controller.h +10 -25
  576. data/src/core/lib/transport/service_config.c +11 -26
  577. data/src/core/lib/transport/service_config.h +10 -25
  578. data/src/core/lib/transport/static_metadata.c +12 -26
  579. data/src/core/lib/transport/static_metadata.h +10 -25
  580. data/src/core/lib/transport/status_conversion.c +10 -25
  581. data/src/core/lib/transport/status_conversion.h +10 -25
  582. data/src/core/lib/transport/timeout_encoding.c +10 -25
  583. data/src/core/lib/transport/timeout_encoding.h +10 -25
  584. data/src/core/lib/transport/transport.c +60 -53
  585. data/src/core/lib/transport/transport.h +36 -34
  586. data/src/core/lib/transport/transport_impl.h +10 -25
  587. data/src/core/lib/transport/transport_op_string.c +10 -28
  588. data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
  589. data/src/core/tsi/fake_transport_security.c +199 -94
  590. data/src/core/tsi/fake_transport_security.h +11 -26
  591. data/src/core/tsi/gts_transport_security.c +40 -0
  592. data/src/core/tsi/gts_transport_security.h +37 -0
  593. data/src/core/tsi/ssl_transport_security.c +13 -32
  594. data/src/core/tsi/ssl_transport_security.h +10 -25
  595. data/src/core/tsi/ssl_types.h +10 -25
  596. data/src/core/tsi/transport_security.c +48 -78
  597. data/src/core/tsi/transport_security.h +18 -27
  598. data/src/core/tsi/transport_security_adapter.c +17 -29
  599. data/src/core/tsi/transport_security_adapter.h +10 -25
  600. data/src/core/tsi/transport_security_grpc.c +64 -0
  601. data/src/core/tsi/transport_security_grpc.h +80 -0
  602. data/src/core/tsi/transport_security_interface.h +21 -27
  603. data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
  604. data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
  605. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
  606. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
  607. data/src/ruby/bin/math_client.rb +10 -25
  608. data/src/ruby/bin/math_server.rb +10 -25
  609. data/src/ruby/bin/math_services_pb.rb +10 -25
  610. data/src/ruby/bin/noproto_client.rb +10 -25
  611. data/src/ruby/bin/noproto_server.rb +10 -25
  612. data/src/ruby/ext/grpc/extconf.rb +10 -25
  613. data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
  614. data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
  615. data/src/ruby/ext/grpc/rb_call.c +44 -25
  616. data/src/ruby/ext/grpc/rb_call.h +10 -25
  617. data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
  618. data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
  619. data/src/ruby/ext/grpc/rb_channel.c +10 -25
  620. data/src/ruby/ext/grpc/rb_channel.h +10 -25
  621. data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
  622. data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
  623. data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
  624. data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
  625. data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
  626. data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
  627. data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
  628. data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
  629. data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
  630. data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
  631. data/src/ruby/ext/grpc/rb_grpc.c +10 -25
  632. data/src/ruby/ext/grpc/rb_grpc.h +10 -25
  633. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
  634. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
  635. data/src/ruby/ext/grpc/rb_loader.c +10 -25
  636. data/src/ruby/ext/grpc/rb_loader.h +10 -25
  637. data/src/ruby/ext/grpc/rb_server.c +10 -25
  638. data/src/ruby/ext/grpc/rb_server.h +10 -25
  639. data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
  640. data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
  641. data/src/ruby/lib/grpc.rb +10 -25
  642. data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
  643. data/src/ruby/lib/grpc/errors.rb +16 -30
  644. data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
  645. data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
  646. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
  647. data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
  648. data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
  649. data/src/ruby/lib/grpc/generic/service.rb +10 -25
  650. data/src/ruby/lib/grpc/grpc.rb +10 -25
  651. data/src/ruby/lib/grpc/logconfig.rb +10 -25
  652. data/src/ruby/lib/grpc/notifier.rb +10 -25
  653. data/src/ruby/lib/grpc/version.rb +11 -26
  654. data/src/ruby/pb/generate_proto_ruby.sh +10 -25
  655. data/src/ruby/pb/grpc/health/checker.rb +10 -25
  656. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
  657. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
  658. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
  659. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
  660. data/src/ruby/pb/test/client.rb +10 -25
  661. data/src/ruby/pb/test/server.rb +10 -25
  662. data/src/ruby/spec/call_credentials_spec.rb +10 -25
  663. data/src/ruby/spec/call_spec.rb +43 -25
  664. data/src/ruby/spec/channel_connection_spec.rb +10 -25
  665. data/src/ruby/spec/channel_credentials_spec.rb +11 -26
  666. data/src/ruby/spec/channel_spec.rb +10 -25
  667. data/src/ruby/spec/client_auth_spec.rb +10 -25
  668. data/src/ruby/spec/client_server_spec.rb +66 -25
  669. data/src/ruby/spec/compression_options_spec.rb +10 -25
  670. data/src/ruby/spec/error_sanity_spec.rb +10 -25
  671. data/src/ruby/spec/generic/active_call_spec.rb +10 -25
  672. data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
  673. data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
  674. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
  675. data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
  676. data/src/ruby/spec/generic/service_spec.rb +10 -25
  677. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
  678. data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
  679. data/src/ruby/spec/server_credentials_spec.rb +10 -25
  680. data/src/ruby/spec/server_spec.rb +10 -25
  681. data/src/ruby/spec/spec_helper.rb +10 -25
  682. data/src/ruby/spec/time_consts_spec.rb +10 -25
  683. data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
  684. data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
  685. data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
  686. data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
  687. data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
  688. data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
  689. data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
  690. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
  691. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
  692. data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
  693. data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
  694. data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
  695. data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
  696. data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
  697. data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
  698. data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
  699. data/third_party/boringssl/crypto/base64/base64.c +7 -5
  700. data/third_party/boringssl/crypto/bio/bio.c +24 -10
  701. data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
  702. data/third_party/boringssl/crypto/bio/connect.c +7 -18
  703. data/third_party/boringssl/crypto/bio/fd.c +3 -6
  704. data/third_party/boringssl/crypto/bio/file.c +6 -6
  705. data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
  706. data/third_party/boringssl/crypto/bio/pair.c +30 -344
  707. data/third_party/boringssl/crypto/bio/socket.c +6 -7
  708. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
  709. data/third_party/boringssl/crypto/bn/add.c +1 -1
  710. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
  711. data/third_party/boringssl/crypto/bn/bn.c +6 -20
  712. data/third_party/boringssl/crypto/bn/cmp.c +14 -0
  713. data/third_party/boringssl/crypto/bn/convert.c +73 -2
  714. data/third_party/boringssl/crypto/bn/ctx.c +3 -1
  715. data/third_party/boringssl/crypto/bn/div.c +108 -51
  716. data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
  717. data/third_party/boringssl/crypto/bn/gcd.c +29 -22
  718. data/third_party/boringssl/crypto/bn/generic.c +71 -67
  719. data/third_party/boringssl/crypto/bn/internal.h +19 -6
  720. data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
  721. data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
  722. data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
  723. data/third_party/boringssl/crypto/bn/mul.c +11 -9
  724. data/third_party/boringssl/crypto/bn/random.c +6 -3
  725. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
  726. data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
  727. data/third_party/boringssl/crypto/bn/shift.c +9 -1
  728. data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
  729. data/third_party/boringssl/crypto/buf/buf.c +6 -4
  730. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
  731. data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
  732. data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
  733. data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
  734. data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
  735. data/third_party/boringssl/crypto/cipher/aead.c +3 -3
  736. data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
  737. data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
  738. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
  739. data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
  740. data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
  741. data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
  742. data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
  743. data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
  744. data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
  745. data/third_party/boringssl/crypto/conf/conf.c +6 -3
  746. data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
  747. data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
  748. data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
  749. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
  750. data/third_party/boringssl/crypto/des/des.c +1 -1
  751. data/third_party/boringssl/crypto/des/internal.h +58 -46
  752. data/third_party/boringssl/crypto/dh/dh.c +4 -8
  753. data/third_party/boringssl/crypto/digest/digest.c +5 -2
  754. data/third_party/boringssl/crypto/digest/digests.c +70 -33
  755. data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
  756. data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
  757. data/third_party/boringssl/crypto/ec/ec.c +1 -1
  758. data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
  759. data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
  760. data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
  761. data/third_party/boringssl/crypto/ec/oct.c +2 -14
  762. data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
  763. data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
  764. data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
  765. data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
  766. data/third_party/boringssl/crypto/ec/simple.c +2 -1
  767. data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
  768. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
  769. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
  770. data/third_party/boringssl/crypto/engine/engine.c +3 -1
  771. data/third_party/boringssl/crypto/err/err.c +5 -5
  772. data/third_party/boringssl/crypto/evp/evp.c +1 -1
  773. data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
  774. data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
  775. data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
  776. data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
  777. data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
  778. data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
  779. data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
  780. data/third_party/boringssl/crypto/internal.h +81 -0
  781. data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
  782. data/third_party/boringssl/crypto/md4/md4.c +20 -18
  783. data/third_party/boringssl/crypto/md5/md5.c +31 -21
  784. data/third_party/boringssl/crypto/mem.c +4 -10
  785. data/third_party/boringssl/crypto/modes/cbc.c +2 -6
  786. data/third_party/boringssl/crypto/modes/cfb.c +2 -2
  787. data/third_party/boringssl/crypto/modes/ctr.c +1 -1
  788. data/third_party/boringssl/crypto/modes/gcm.c +117 -334
  789. data/third_party/boringssl/crypto/modes/internal.h +107 -84
  790. data/third_party/boringssl/crypto/modes/ofb.c +3 -3
  791. data/third_party/boringssl/crypto/modes/polyval.c +94 -0
  792. data/third_party/boringssl/crypto/obj/obj.c +13 -8
  793. data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
  794. data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
  795. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
  796. data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
  797. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
  798. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
  799. data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
  800. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
  801. data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
  802. data/third_party/boringssl/crypto/pool/pool.c +200 -0
  803. data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
  804. data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
  805. data/third_party/boringssl/crypto/rand/rand.c +7 -7
  806. data/third_party/boringssl/crypto/rand/urandom.c +136 -22
  807. data/third_party/boringssl/crypto/rand/windows.c +2 -2
  808. data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
  809. data/third_party/boringssl/crypto/rsa/padding.c +11 -11
  810. data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
  811. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
  812. data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
  813. data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
  814. data/third_party/boringssl/crypto/sha/sha1.c +60 -42
  815. data/third_party/boringssl/crypto/sha/sha256.c +4 -2
  816. data/third_party/boringssl/crypto/sha/sha512.c +9 -7
  817. data/third_party/boringssl/crypto/stack/stack.c +10 -7
  818. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  819. data/third_party/boringssl/crypto/thread_win.c +2 -2
  820. data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
  821. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
  822. data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
  823. data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
  824. data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
  825. data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
  826. data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
  827. data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
  828. data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
  829. data/third_party/boringssl/crypto/x509/x509name.c +4 -1
  830. data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
  831. data/third_party/boringssl/crypto/x509/x_name.c +23 -13
  832. data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
  833. data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
  834. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  835. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  836. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
  837. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
  838. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
  839. data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
  840. data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
  841. data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
  842. data/third_party/boringssl/include/openssl/aead.h +9 -20
  843. data/third_party/boringssl/include/openssl/aes.h +21 -9
  844. data/third_party/boringssl/include/openssl/asn1.h +9 -1
  845. data/third_party/boringssl/include/openssl/base.h +33 -6
  846. data/third_party/boringssl/include/openssl/bio.h +10 -103
  847. data/third_party/boringssl/include/openssl/bn.h +58 -42
  848. data/third_party/boringssl/include/openssl/bytestring.h +17 -0
  849. data/third_party/boringssl/include/openssl/cipher.h +4 -3
  850. data/third_party/boringssl/include/openssl/conf.h +4 -1
  851. data/third_party/boringssl/include/openssl/curve25519.h +13 -0
  852. data/third_party/boringssl/include/openssl/digest.h +5 -3
  853. data/third_party/boringssl/include/openssl/dsa.h +5 -5
  854. data/third_party/boringssl/include/openssl/ec.h +2 -2
  855. data/third_party/boringssl/include/openssl/ecdh.h +3 -4
  856. data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
  857. data/third_party/boringssl/include/openssl/err.h +5 -5
  858. data/third_party/boringssl/include/openssl/evp.h +11 -7
  859. data/third_party/boringssl/include/openssl/lhash.h +2 -3
  860. data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
  861. data/third_party/boringssl/include/openssl/nid.h +2949 -2916
  862. data/third_party/boringssl/include/openssl/obj.h +1 -1
  863. data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
  864. data/third_party/boringssl/include/openssl/pool.h +87 -0
  865. data/third_party/boringssl/include/openssl/rand.h +1 -1
  866. data/third_party/boringssl/include/openssl/rsa.h +4 -2
  867. data/third_party/boringssl/include/openssl/sha.h +0 -4
  868. data/third_party/boringssl/include/openssl/ssl.h +327 -662
  869. data/third_party/boringssl/include/openssl/ssl3.h +1 -21
  870. data/third_party/boringssl/include/openssl/stack.h +1 -0
  871. data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
  872. data/third_party/boringssl/include/openssl/tls1.h +23 -52
  873. data/third_party/boringssl/include/openssl/type_check.h +4 -0
  874. data/third_party/boringssl/include/openssl/x509.h +10 -59
  875. data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
  876. data/third_party/boringssl/include/openssl/x509v3.h +4 -4
  877. data/third_party/boringssl/ssl/bio_ssl.c +175 -0
  878. data/third_party/boringssl/ssl/custom_extensions.c +24 -21
  879. data/third_party/boringssl/ssl/d1_both.c +259 -289
  880. data/third_party/boringssl/ssl/d1_lib.c +8 -20
  881. data/third_party/boringssl/ssl/d1_pkt.c +6 -15
  882. data/third_party/boringssl/ssl/dtls_method.c +22 -8
  883. data/third_party/boringssl/ssl/dtls_record.c +27 -2
  884. data/third_party/boringssl/ssl/handshake_client.c +460 -579
  885. data/third_party/boringssl/ssl/handshake_server.c +662 -644
  886. data/third_party/boringssl/ssl/internal.h +1009 -375
  887. data/third_party/boringssl/ssl/s3_both.c +312 -162
  888. data/third_party/boringssl/ssl/s3_lib.c +12 -128
  889. data/third_party/boringssl/ssl/s3_pkt.c +22 -30
  890. data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
  891. data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
  892. data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
  893. data/third_party/boringssl/ssl/ssl_cert.c +417 -219
  894. data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
  895. data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
  896. data/third_party/boringssl/ssl/ssl_file.c +0 -11
  897. data/third_party/boringssl/ssl/ssl_lib.c +325 -652
  898. data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
  899. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
  900. data/third_party/boringssl/ssl/ssl_session.c +206 -95
  901. data/third_party/boringssl/ssl/ssl_stat.c +18 -84
  902. data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
  903. data/third_party/boringssl/ssl/ssl_x509.c +815 -0
  904. data/third_party/boringssl/ssl/t1_enc.c +188 -174
  905. data/third_party/boringssl/ssl/t1_lib.c +1064 -764
  906. data/third_party/boringssl/ssl/tls13_both.c +290 -96
  907. data/third_party/boringssl/ssl/tls13_client.c +344 -314
  908. data/third_party/boringssl/ssl/tls13_enc.c +239 -200
  909. data/third_party/boringssl/ssl/tls13_server.c +374 -366
  910. data/third_party/boringssl/ssl/tls_method.c +40 -5
  911. data/third_party/boringssl/ssl/tls_record.c +166 -71
  912. metadata +39 -25
  913. data/src/core/lib/iomgr/workqueue.h +0 -87
  914. data/src/core/lib/iomgr/workqueue_uv.c +0 -65
  915. data/src/core/lib/iomgr/workqueue_uv.h +0 -37
  916. data/src/core/lib/iomgr/workqueue_windows.c +0 -63
  917. data/src/core/lib/iomgr/workqueue_windows.h +0 -37
  918. data/third_party/boringssl/crypto/bio/buffer.c +0 -496
  919. data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
  920. data/third_party/boringssl/crypto/newhope/internal.h +0 -71
  921. data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
  922. data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
  923. data/third_party/boringssl/crypto/newhope/poly.c +0 -183
  924. data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
  925. data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
  926. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
  927. data/third_party/boringssl/include/openssl/newhope.h +0 -158
  928. data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -230,7 +230,7 @@ X509_NAME *dpname;
230
230
  /* All existing reasons */
231
231
  #define CRLDP_ALL_REASONS 0x807f
232
232
 
233
- #define CRL_REASON_NONE -1
233
+ #define CRL_REASON_NONE (-1)
234
234
  #define CRL_REASON_UNSPECIFIED 0
235
235
  #define CRL_REASON_KEY_COMPROMISE 1
236
236
  #define CRL_REASON_CA_COMPROMISE 2
@@ -376,8 +376,8 @@ struct ISSUING_DIST_POINT_st
376
376
  /* onlysomereasons present */
377
377
  #define IDP_REASONS 0x40
378
378
 
379
- #define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \
380
- ",name:", val->name, ",value:", val->value);
379
+ #define X509V3_conf_err(val) ERR_add_error_data(6, "section:", (val)->section, \
380
+ ",name:", (val)->name, ",value:", (val)->value);
381
381
 
382
382
  #define X509V3_set_ctx_test(ctx) \
383
383
  X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
@@ -389,7 +389,7 @@ struct ISSUING_DIST_POINT_st
389
389
  (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \
390
390
  (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \
391
391
  NULL, NULL, \
392
- (void *)table}
392
+ (void *)(table)}
393
393
 
394
394
  #define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \
395
395
  0,0,0,0, \
@@ -0,0 +1,175 @@
1
+ /*
2
+ * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3
+ *
4
+ * Licensed under the OpenSSL license (the "License"). You may not use
5
+ * this file except in compliance with the License. You can obtain a copy
6
+ * in the file LICENSE in the source distribution or at
7
+ * https://www.openssl.org/source/license.html
8
+ */
9
+
10
+ #include <openssl/ssl.h>
11
+
12
+ #include <openssl/bio.h>
13
+
14
+
15
+ static int ssl_read(BIO *bio, char *out, int outl) {
16
+ SSL *ssl = bio->ptr;
17
+ if (ssl == NULL) {
18
+ return 0;
19
+ }
20
+
21
+ BIO_clear_retry_flags(bio);
22
+
23
+ const int ret = SSL_read(ssl, out, outl);
24
+
25
+ switch (SSL_get_error(ssl, ret)) {
26
+ case SSL_ERROR_WANT_READ:
27
+ BIO_set_retry_read(bio);
28
+ break;
29
+
30
+ case SSL_ERROR_WANT_WRITE:
31
+ BIO_set_retry_write(bio);
32
+ break;
33
+
34
+ case SSL_ERROR_WANT_ACCEPT:
35
+ BIO_set_retry_special(bio);
36
+ bio->retry_reason = BIO_RR_ACCEPT;
37
+ break;
38
+
39
+ case SSL_ERROR_WANT_CONNECT:
40
+ BIO_set_retry_special(bio);
41
+ bio->retry_reason = BIO_RR_CONNECT;
42
+ break;
43
+
44
+ case SSL_ERROR_NONE:
45
+ case SSL_ERROR_SYSCALL:
46
+ case SSL_ERROR_SSL:
47
+ case SSL_ERROR_ZERO_RETURN:
48
+ default:
49
+ break;
50
+ }
51
+
52
+ return ret;
53
+ }
54
+
55
+ static int ssl_write(BIO *bio, const char *out, int outl) {
56
+ SSL *ssl = bio->ptr;
57
+ if (ssl == NULL) {
58
+ return 0;
59
+ }
60
+
61
+ BIO_clear_retry_flags(bio);
62
+
63
+ const int ret = SSL_write(ssl, out, outl);
64
+
65
+ switch (SSL_get_error(ssl, ret)) {
66
+ case SSL_ERROR_WANT_WRITE:
67
+ BIO_set_retry_write(bio);
68
+ break;
69
+
70
+ case SSL_ERROR_WANT_READ:
71
+ BIO_set_retry_read(bio);
72
+ break;
73
+
74
+ case SSL_ERROR_WANT_CONNECT:
75
+ BIO_set_retry_special(bio);
76
+ bio->retry_reason = BIO_RR_CONNECT;
77
+ break;
78
+
79
+ case SSL_ERROR_NONE:
80
+ case SSL_ERROR_SYSCALL:
81
+ case SSL_ERROR_SSL:
82
+ default:
83
+ break;
84
+ }
85
+
86
+ return ret;
87
+ }
88
+
89
+ static long ssl_ctrl(BIO *bio, int cmd, long num, void *ptr) {
90
+ SSL *ssl = bio->ptr;
91
+ if (ssl == NULL && cmd != BIO_C_SET_SSL) {
92
+ return 0;
93
+ }
94
+
95
+ switch (cmd) {
96
+ case BIO_C_SET_SSL:
97
+ bio->shutdown = num;
98
+ bio->ptr = ptr;
99
+ bio->init = 1;
100
+ return 1;
101
+
102
+ case BIO_CTRL_GET_CLOSE:
103
+ return bio->shutdown;
104
+
105
+ case BIO_CTRL_SET_CLOSE:
106
+ bio->shutdown = num;
107
+ return 1;
108
+
109
+ case BIO_CTRL_WPENDING:
110
+ return BIO_ctrl(SSL_get_wbio(ssl), cmd, num, ptr);
111
+
112
+ case BIO_CTRL_PENDING:
113
+ return SSL_pending(ssl);
114
+
115
+ case BIO_CTRL_FLUSH: {
116
+ BIO_clear_retry_flags(bio);
117
+ long ret = BIO_ctrl(SSL_get_wbio(ssl), cmd, num, ptr);
118
+ BIO_copy_next_retry(bio);
119
+ return ret;
120
+ }
121
+
122
+ case BIO_CTRL_PUSH:
123
+ case BIO_CTRL_POP:
124
+ case BIO_CTRL_DUP:
125
+ return -1;
126
+
127
+ default:
128
+ return BIO_ctrl(SSL_get_rbio(ssl), cmd, num, ptr);
129
+ }
130
+ }
131
+
132
+ static int ssl_new(BIO *bio) {
133
+ return 1;
134
+ }
135
+
136
+ static int ssl_free(BIO *bio) {
137
+ SSL *ssl = bio->ptr;
138
+
139
+ if (ssl == NULL) {
140
+ return 1;
141
+ }
142
+
143
+ SSL_shutdown(ssl);
144
+ if (bio->shutdown) {
145
+ SSL_free(ssl);
146
+ }
147
+
148
+ return 1;
149
+ }
150
+
151
+ static long ssl_callback_ctrl(BIO *bio, int cmd, bio_info_cb fp) {
152
+ SSL *ssl = bio->ptr;
153
+ if (ssl == NULL) {
154
+ return 0;
155
+ }
156
+
157
+ switch (cmd) {
158
+ case BIO_CTRL_SET_CALLBACK:
159
+ return -1;
160
+
161
+ default:
162
+ return BIO_callback_ctrl(SSL_get_rbio(ssl), cmd, fp);
163
+ }
164
+ }
165
+
166
+ static const BIO_METHOD ssl_method = {
167
+ BIO_TYPE_SSL, "SSL", ssl_write, ssl_read, NULL,
168
+ NULL, ssl_ctrl, ssl_new, ssl_free, ssl_callback_ctrl,
169
+ };
170
+
171
+ const BIO_METHOD *BIO_f_ssl(void) { return &ssl_method; }
172
+
173
+ long BIO_set_ssl(BIO *bio, SSL *ssl, int take_owership) {
174
+ return BIO_ctrl(bio, BIO_C_SET_SSL, take_owership, ssl);
175
+ }
@@ -58,7 +58,8 @@ static int default_add_callback(SSL *ssl, unsigned extension_value,
58
58
  return 1;
59
59
  }
60
60
 
61
- static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
61
+ static int custom_ext_add_hello(SSL_HANDSHAKE *hs, CBB *extensions) {
62
+ SSL *const ssl = hs->ssl;
62
63
  STACK_OF(SSL_CUSTOM_EXTENSION) *stack = ssl->ctx->client_custom_extensions;
63
64
  if (ssl->server) {
64
65
  stack = ssl->ctx->server_custom_extensions;
@@ -72,7 +73,7 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
72
73
  const SSL_CUSTOM_EXTENSION *ext = sk_SSL_CUSTOM_EXTENSION_value(stack, i);
73
74
 
74
75
  if (ssl->server &&
75
- !(ssl->s3->tmp.custom_extensions.received & (1u << i))) {
76
+ !(hs->custom_extensions.received & (1u << i))) {
76
77
  /* Servers cannot echo extensions that the client didn't send. */
77
78
  continue;
78
79
  }
@@ -90,7 +91,7 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
90
91
  !CBB_add_bytes(&contents_cbb, contents, contents_len) ||
91
92
  !CBB_flush(extensions)) {
92
93
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
93
- ERR_add_error_dataf("extension: %u", (unsigned) ext->value);
94
+ ERR_add_error_dataf("extension %u", (unsigned) ext->value);
94
95
  if (ext->free_callback && 0 < contents_len) {
95
96
  ext->free_callback(ssl, ext->value, contents, ext->add_arg);
96
97
  }
@@ -102,8 +103,8 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
102
103
  }
103
104
 
104
105
  if (!ssl->server) {
105
- assert((ssl->s3->tmp.custom_extensions.sent & (1u << i)) == 0);
106
- ssl->s3->tmp.custom_extensions.sent |= (1u << i);
106
+ assert((hs->custom_extensions.sent & (1u << i)) == 0);
107
+ hs->custom_extensions.sent |= (1u << i);
107
108
  }
108
109
  break;
109
110
 
@@ -113,7 +114,7 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
113
114
  default:
114
115
  ssl3_send_alert(ssl, SSL3_AL_FATAL, alert);
115
116
  OPENSSL_PUT_ERROR(SSL, SSL_R_CUSTOM_EXTENSION_ERROR);
116
- ERR_add_error_dataf("extension: %u", (unsigned) ext->value);
117
+ ERR_add_error_dataf("extension %u", (unsigned) ext->value);
117
118
  return 0;
118
119
  }
119
120
  }
@@ -121,12 +122,13 @@ static int custom_ext_add_hello(SSL *ssl, CBB *extensions) {
121
122
  return 1;
122
123
  }
123
124
 
124
- int custom_ext_add_clienthello(SSL *ssl, CBB *extensions) {
125
- return custom_ext_add_hello(ssl, extensions);
125
+ int custom_ext_add_clienthello(SSL_HANDSHAKE *hs, CBB *extensions) {
126
+ return custom_ext_add_hello(hs, extensions);
126
127
  }
127
128
 
128
- int custom_ext_parse_serverhello(SSL *ssl, int *out_alert, uint16_t value,
129
- const CBS *extension) {
129
+ int custom_ext_parse_serverhello(SSL_HANDSHAKE *hs, int *out_alert,
130
+ uint16_t value, const CBS *extension) {
131
+ SSL *const ssl = hs->ssl;
130
132
  unsigned index;
131
133
  const SSL_CUSTOM_EXTENSION *ext =
132
134
  custom_ext_find(ssl->ctx->client_custom_extensions, &index, value);
@@ -134,9 +136,9 @@ int custom_ext_parse_serverhello(SSL *ssl, int *out_alert, uint16_t value,
134
136
  if (/* Unknown extensions are not allowed in a ServerHello. */
135
137
  ext == NULL ||
136
138
  /* Also, if we didn't send the extension, that's also unacceptable. */
137
- !(ssl->s3->tmp.custom_extensions.sent & (1u << index))) {
139
+ !(hs->custom_extensions.sent & (1u << index))) {
138
140
  OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION);
139
- ERR_add_error_dataf("extension: %u", (unsigned)value);
141
+ ERR_add_error_dataf("extension %u", (unsigned)value);
140
142
  *out_alert = SSL_AD_UNSUPPORTED_EXTENSION;
141
143
  return 0;
142
144
  }
@@ -145,15 +147,16 @@ int custom_ext_parse_serverhello(SSL *ssl, int *out_alert, uint16_t value,
145
147
  !ext->parse_callback(ssl, value, CBS_data(extension), CBS_len(extension),
146
148
  out_alert, ext->parse_arg)) {
147
149
  OPENSSL_PUT_ERROR(SSL, SSL_R_CUSTOM_EXTENSION_ERROR);
148
- ERR_add_error_dataf("extension: %u", (unsigned)ext->value);
150
+ ERR_add_error_dataf("extension %u", (unsigned)ext->value);
149
151
  return 0;
150
152
  }
151
153
 
152
154
  return 1;
153
155
  }
154
156
 
155
- int custom_ext_parse_clienthello(SSL *ssl, int *out_alert, uint16_t value,
156
- const CBS *extension) {
157
+ int custom_ext_parse_clienthello(SSL_HANDSHAKE *hs, int *out_alert,
158
+ uint16_t value, const CBS *extension) {
159
+ SSL *const ssl = hs->ssl;
157
160
  unsigned index;
158
161
  const SSL_CUSTOM_EXTENSION *ext =
159
162
  custom_ext_find(ssl->ctx->server_custom_extensions, &index, value);
@@ -162,29 +165,29 @@ int custom_ext_parse_clienthello(SSL *ssl, int *out_alert, uint16_t value,
162
165
  return 1;
163
166
  }
164
167
 
165
- assert((ssl->s3->tmp.custom_extensions.received & (1u << index)) == 0);
166
- ssl->s3->tmp.custom_extensions.received |= (1u << index);
168
+ assert((hs->custom_extensions.received & (1u << index)) == 0);
169
+ hs->custom_extensions.received |= (1u << index);
167
170
 
168
171
  if (ext->parse_callback &&
169
172
  !ext->parse_callback(ssl, value, CBS_data(extension), CBS_len(extension),
170
173
  out_alert, ext->parse_arg)) {
171
174
  OPENSSL_PUT_ERROR(SSL, SSL_R_CUSTOM_EXTENSION_ERROR);
172
- ERR_add_error_dataf("extension: %u", (unsigned)ext->value);
175
+ ERR_add_error_dataf("extension %u", (unsigned)ext->value);
173
176
  return 0;
174
177
  }
175
178
 
176
179
  return 1;
177
180
  }
178
181
 
179
- int custom_ext_add_serverhello(SSL *ssl, CBB *extensions) {
180
- return custom_ext_add_hello(ssl, extensions);
182
+ int custom_ext_add_serverhello(SSL_HANDSHAKE *hs, CBB *extensions) {
183
+ return custom_ext_add_hello(hs, extensions);
181
184
  }
182
185
 
183
186
  /* MAX_NUM_CUSTOM_EXTENSIONS is the maximum number of custom extensions that
184
187
  * can be set on an |SSL_CTX|. It's determined by the size of the bitset used
185
188
  * to track when an extension has been sent. */
186
189
  #define MAX_NUM_CUSTOM_EXTENSIONS \
187
- (sizeof(((struct ssl3_state_st *)NULL)->tmp.custom_extensions.sent) * 8)
190
+ (sizeof(((SSL_HANDSHAKE *)NULL)->custom_extensions.sent) * 8)
188
191
 
189
192
  static int custom_ext_append(STACK_OF(SSL_CUSTOM_EXTENSION) **stack,
190
193
  unsigned extension_value,
@@ -122,8 +122,10 @@
122
122
  #include <openssl/evp.h>
123
123
  #include <openssl/mem.h>
124
124
  #include <openssl/rand.h>
125
+ #include <openssl/type_check.h>
125
126
  #include <openssl/x509.h>
126
127
 
128
+ #include "../crypto/internal.h"
127
129
  #include "internal.h"
128
130
 
129
131
 
@@ -157,7 +159,7 @@ static hm_fragment *dtls1_hm_fragment_new(const struct hm_header_st *msg_hdr) {
157
159
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
158
160
  return NULL;
159
161
  }
160
- memset(frag, 0, sizeof(hm_fragment));
162
+ OPENSSL_memset(frag, 0, sizeof(hm_fragment));
161
163
  frag->type = msg_hdr->type;
162
164
  frag->seq = msg_hdr->seq;
163
165
  frag->msg_len = msg_hdr->msg_len;
@@ -195,7 +197,7 @@ static hm_fragment *dtls1_hm_fragment_new(const struct hm_header_st *msg_hdr) {
195
197
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
196
198
  goto err;
197
199
  }
198
- memset(frag->reassembly, 0, bitmask_len);
200
+ OPENSSL_memset(frag->reassembly, 0, bitmask_len);
199
201
  }
200
202
 
201
203
  return frag;
@@ -310,9 +312,9 @@ start:
310
312
  }
311
313
 
312
314
  /* Cross-epoch records are discarded, but we may receive out-of-order
313
- * application data between ChangeCipherSpec and Finished or a ChangeCipherSpec
314
- * before the appropriate point in the handshake. Those must be silently
315
- * discarded.
315
+ * application data between ChangeCipherSpec and Finished or a
316
+ * ChangeCipherSpec before the appropriate point in the handshake. Those must
317
+ * be silently discarded.
316
318
  *
317
319
  * However, only allow the out-of-order records in the correct epoch.
318
320
  * Application data must come in the encrypted epoch, and ChangeCipherSpec in
@@ -383,8 +385,8 @@ start:
383
385
  assert(msg_len > 0);
384
386
 
385
387
  /* Copy the body into the fragment. */
386
- memcpy(frag->data + DTLS1_HM_HEADER_LENGTH + frag_off, CBS_data(&body),
387
- CBS_len(&body));
388
+ OPENSSL_memcpy(frag->data + DTLS1_HM_HEADER_LENGTH + frag_off,
389
+ CBS_data(&body), CBS_len(&body));
388
390
  dtls1_hm_fragment_mark(frag, frag_off, frag_off + frag_len);
389
391
  }
390
392
 
@@ -393,17 +395,11 @@ start:
393
395
  return 1;
394
396
  }
395
397
 
396
- int dtls1_get_message(SSL *ssl, int msg_type,
397
- enum ssl_hash_message_t hash_message) {
398
+ int dtls1_get_message(SSL *ssl) {
398
399
  if (ssl->s3->tmp.reuse_message) {
399
- /* A ssl_dont_hash_message call cannot be combined with reuse_message; the
400
- * ssl_dont_hash_message would have to have been applied to the previous
401
- * call. */
402
- assert(hash_message == ssl_hash_message);
400
+ /* There must be a current message. */
403
401
  assert(ssl->init_msg != NULL);
404
-
405
402
  ssl->s3->tmp.reuse_message = 0;
406
- hash_message = ssl_dont_hash_message;
407
403
  } else {
408
404
  dtls1_release_current_message(ssl, 0 /* don't free buffer */);
409
405
  }
@@ -428,27 +424,17 @@ int dtls1_get_message(SSL *ssl, int msg_type,
428
424
  ssl->init_msg = frag->data + DTLS1_HM_HEADER_LENGTH;
429
425
  ssl->init_num = frag->msg_len;
430
426
 
431
- if (msg_type >= 0 && ssl->s3->tmp.message_type != msg_type) {
432
- ssl3_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
433
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_MESSAGE);
434
- return -1;
435
- }
436
- if (hash_message == ssl_hash_message && !dtls1_hash_current_message(ssl)) {
437
- return -1;
438
- }
439
-
440
427
  ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_HANDSHAKE, frag->data,
441
428
  ssl->init_num + DTLS1_HM_HEADER_LENGTH);
442
429
  return 1;
443
430
  }
444
431
 
445
- int dtls1_hash_current_message(SSL *ssl) {
432
+ void dtls1_get_current_message(const SSL *ssl, CBS *out) {
446
433
  assert(dtls1_is_current_message_complete(ssl));
447
434
 
448
435
  hm_fragment *frag = ssl->d1->incoming_messages[ssl->d1->handshake_read_seq %
449
436
  SSL_MAX_HANDSHAKE_FLIGHT];
450
- return ssl3_update_handshake_hash(ssl, frag->data,
451
- DTLS1_HM_HEADER_LENGTH + frag->msg_len);
437
+ CBS_init(out, frag->data, DTLS1_HM_HEADER_LENGTH + frag->msg_len);
452
438
  }
453
439
 
454
440
  void dtls1_release_current_message(SSL *ssl, int free_buffer) {
@@ -490,7 +476,7 @@ int dtls_has_incoming_messages(const SSL *ssl) {
490
476
 
491
477
  int dtls1_parse_fragment(CBS *cbs, struct hm_header_st *out_hdr,
492
478
  CBS *out_body) {
493
- memset(out_hdr, 0x00, sizeof(struct hm_header_st));
479
+ OPENSSL_memset(out_hdr, 0x00, sizeof(struct hm_header_st));
494
480
 
495
481
  if (!CBS_get_u8(cbs, &out_hdr->type) ||
496
482
  !CBS_get_u24(cbs, &out_hdr->msg_len) ||
@@ -507,279 +493,138 @@ int dtls1_parse_fragment(CBS *cbs, struct hm_header_st *out_hdr,
507
493
 
508
494
  /* Sending handshake messages. */
509
495
 
510
- static void dtls1_update_mtu(SSL *ssl) {
511
- /* TODO(davidben): What is this code doing and do we need it? */
512
- if (ssl->d1->mtu < dtls1_min_mtu() &&
513
- !(SSL_get_options(ssl) & SSL_OP_NO_QUERY_MTU)) {
514
- long mtu = BIO_ctrl(ssl->wbio, BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
515
- if (mtu >= 0 && mtu <= (1 << 30) && (unsigned)mtu >= dtls1_min_mtu()) {
516
- ssl->d1->mtu = (unsigned)mtu;
517
- } else {
518
- ssl->d1->mtu = kDefaultMTU;
519
- BIO_ctrl(ssl->wbio, BIO_CTRL_DGRAM_SET_MTU, ssl->d1->mtu, NULL);
520
- }
496
+ void dtls_clear_outgoing_messages(SSL *ssl) {
497
+ for (size_t i = 0; i < ssl->d1->outgoing_messages_len; i++) {
498
+ OPENSSL_free(ssl->d1->outgoing_messages[i].data);
499
+ ssl->d1->outgoing_messages[i].data = NULL;
521
500
  }
522
-
523
- /* The MTU should be above the minimum now. */
524
- assert(ssl->d1->mtu >= dtls1_min_mtu());
501
+ ssl->d1->outgoing_messages_len = 0;
502
+ ssl->d1->outgoing_written = 0;
503
+ ssl->d1->outgoing_offset = 0;
525
504
  }
526
505
 
527
- /* dtls1_max_record_size returns the maximum record body length that may be
528
- * written without exceeding the MTU. It accounts for any buffering installed on
529
- * the write BIO. If no record may be written, it returns zero. */
530
- static size_t dtls1_max_record_size(SSL *ssl) {
531
- size_t ret = ssl->d1->mtu;
532
-
533
- size_t overhead = ssl_max_seal_overhead(ssl);
534
- if (ret <= overhead) {
535
- return 0;
536
- }
537
- ret -= overhead;
538
-
539
- size_t pending = BIO_wpending(ssl->wbio);
540
- if (ret <= pending) {
506
+ int dtls1_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type) {
507
+ /* Pick a modest size hint to save most of the |realloc| calls. */
508
+ if (!CBB_init(cbb, 64) ||
509
+ !CBB_add_u8(cbb, type) ||
510
+ !CBB_add_u24(cbb, 0 /* length (filled in later) */) ||
511
+ !CBB_add_u16(cbb, ssl->d1->handshake_write_seq) ||
512
+ !CBB_add_u24(cbb, 0 /* offset */) ||
513
+ !CBB_add_u24_length_prefixed(cbb, body)) {
541
514
  return 0;
542
515
  }
543
- ret -= pending;
544
516
 
545
- return ret;
546
- }
547
-
548
- static int dtls1_write_change_cipher_spec(SSL *ssl,
549
- enum dtls1_use_epoch_t use_epoch) {
550
- dtls1_update_mtu(ssl);
551
-
552
- /* During the handshake, wbio is buffered to pack messages together. Flush the
553
- * buffer if the ChangeCipherSpec would not fit in a packet. */
554
- if (dtls1_max_record_size(ssl) == 0) {
555
- int ret = BIO_flush(ssl->wbio);
556
- if (ret <= 0) {
557
- ssl->rwstate = SSL_WRITING;
558
- return ret;
559
- }
560
- }
561
-
562
- static const uint8_t kChangeCipherSpec[1] = {SSL3_MT_CCS};
563
- int ret =
564
- dtls1_write_record(ssl, SSL3_RT_CHANGE_CIPHER_SPEC, kChangeCipherSpec,
565
- sizeof(kChangeCipherSpec), use_epoch);
566
- if (ret <= 0) {
567
- return ret;
568
- }
569
-
570
- ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_CHANGE_CIPHER_SPEC,
571
- kChangeCipherSpec, sizeof(kChangeCipherSpec));
572
517
  return 1;
573
518
  }
574
519
 
575
- /* dtls1_do_handshake_write writes handshake message |in| using the given epoch,
576
- * starting |offset| bytes into the message body. It returns one on success. On
577
- * error, it returns <= 0 and sets |*out_offset| to the number of bytes of body
578
- * that were successfully written. This may be used to retry the write
579
- * later. |in| must be a reassembled handshake message with the full DTLS
580
- * handshake header. */
581
- static int dtls1_do_handshake_write(SSL *ssl, size_t *out_offset,
582
- const uint8_t *in, size_t offset,
583
- size_t len,
584
- enum dtls1_use_epoch_t use_epoch) {
585
- dtls1_update_mtu(ssl);
586
-
587
- int ret = -1;
588
- CBB cbb;
589
- CBB_zero(&cbb);
590
- /* Allocate a temporary buffer to hold the message fragments to avoid
591
- * clobbering the message. */
592
- uint8_t *buf = OPENSSL_malloc(ssl->d1->mtu);
593
- if (buf == NULL) {
594
- goto err;
595
- }
596
-
597
- /* Although it may be sent as multiple fragments, a DTLS message must be sent
598
- * serialized as a single fragment for purposes of |ssl_do_msg_callback| and
599
- * the handshake hash. */
600
- CBS cbs, body;
601
- struct hm_header_st hdr;
602
- CBS_init(&cbs, in, len);
603
- if (!dtls1_parse_fragment(&cbs, &hdr, &body) ||
604
- hdr.frag_off != 0 ||
605
- hdr.frag_len != CBS_len(&body) ||
606
- hdr.msg_len != CBS_len(&body) ||
607
- !CBS_skip(&body, offset) ||
608
- CBS_len(&cbs) != 0) {
609
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
610
- goto err;
611
- }
612
-
613
- do {
614
- /* During the handshake, wbio is buffered to pack messages together. Flush
615
- * the buffer if there isn't enough room to make progress. */
616
- if (dtls1_max_record_size(ssl) < DTLS1_HM_HEADER_LENGTH + 1) {
617
- int flush_ret = BIO_flush(ssl->wbio);
618
- if (flush_ret <= 0) {
619
- ssl->rwstate = SSL_WRITING;
620
- ret = flush_ret;
621
- goto err;
622
- }
623
- assert(BIO_wpending(ssl->wbio) == 0);
624
- }
625
-
626
- size_t todo = dtls1_max_record_size(ssl);
627
- if (todo < DTLS1_HM_HEADER_LENGTH + 1) {
628
- /* To make forward progress, the MTU must, at minimum, fit the handshake
629
- * header and one byte of handshake body. */
630
- OPENSSL_PUT_ERROR(SSL, SSL_R_MTU_TOO_SMALL);
631
- goto err;
632
- }
633
- todo -= DTLS1_HM_HEADER_LENGTH;
634
-
635
- if (todo > CBS_len(&body)) {
636
- todo = CBS_len(&body);
637
- }
638
- if (todo >= (1u << 24)) {
639
- todo = (1u << 24) - 1;
640
- }
641
-
642
- size_t buf_len;
643
- if (!CBB_init_fixed(&cbb, buf, ssl->d1->mtu) ||
644
- !CBB_add_u8(&cbb, hdr.type) ||
645
- !CBB_add_u24(&cbb, hdr.msg_len) ||
646
- !CBB_add_u16(&cbb, hdr.seq) ||
647
- !CBB_add_u24(&cbb, offset) ||
648
- !CBB_add_u24(&cbb, todo) ||
649
- !CBB_add_bytes(&cbb, CBS_data(&body), todo) ||
650
- !CBB_finish(&cbb, NULL, &buf_len)) {
651
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
652
- goto err;
653
- }
654
-
655
- int write_ret =
656
- dtls1_write_record(ssl, SSL3_RT_HANDSHAKE, buf, buf_len, use_epoch);
657
- if (write_ret <= 0) {
658
- ret = write_ret;
659
- goto err;
660
- }
661
-
662
- if (!CBS_skip(&body, todo)) {
663
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
664
- goto err;
665
- }
666
- offset += todo;
667
- } while (CBS_len(&body) != 0);
668
-
669
- ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HANDSHAKE, in, len);
670
-
671
- ret = 1;
672
-
673
- err:
674
- *out_offset = offset;
675
- CBB_cleanup(&cbb);
676
- OPENSSL_free(buf);
677
- return ret;
678
- }
679
-
680
- void dtls_clear_outgoing_messages(SSL *ssl) {
681
- for (size_t i = 0; i < ssl->d1->outgoing_messages_len; i++) {
682
- OPENSSL_free(ssl->d1->outgoing_messages[i].data);
683
- ssl->d1->outgoing_messages[i].data = NULL;
684
- }
685
- ssl->d1->outgoing_messages_len = 0;
686
- }
687
-
688
- /* dtls1_add_change_cipher_spec adds a ChangeCipherSpec to the current
689
- * handshake flight. */
690
- static int dtls1_add_change_cipher_spec(SSL *ssl) {
691
- if (ssl->d1->outgoing_messages_len >= SSL_MAX_HANDSHAKE_FLIGHT) {
520
+ int dtls1_finish_message(SSL *ssl, CBB *cbb, uint8_t **out_msg,
521
+ size_t *out_len) {
522
+ *out_msg = NULL;
523
+ if (!CBB_finish(cbb, out_msg, out_len) ||
524
+ *out_len < DTLS1_HM_HEADER_LENGTH) {
692
525
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
526
+ OPENSSL_free(*out_msg);
693
527
  return 0;
694
528
  }
695
529
 
696
- DTLS_OUTGOING_MESSAGE *msg =
697
- &ssl->d1->outgoing_messages[ssl->d1->outgoing_messages_len];
698
- msg->data = NULL;
699
- msg->len = 0;
700
- msg->epoch = ssl->d1->w_epoch;
701
- msg->is_ccs = 1;
702
-
703
- ssl->d1->outgoing_messages_len++;
530
+ /* Fix up the header. Copy the fragment length into the total message
531
+ * length. */
532
+ OPENSSL_memcpy(*out_msg + 1, *out_msg + DTLS1_HM_HEADER_LENGTH - 3, 3);
704
533
  return 1;
705
534
  }
706
535
 
707
- static int dtls1_add_message(SSL *ssl, uint8_t *data, size_t len) {
536
+ /* add_outgoing adds a new handshake message or ChangeCipherSpec to the current
537
+ * outgoing flight. It returns one on success and zero on error. In both cases,
538
+ * it takes ownership of |data| and releases it with |OPENSSL_free| when
539
+ * done. */
540
+ static int add_outgoing(SSL *ssl, int is_ccs, uint8_t *data, size_t len) {
541
+ OPENSSL_COMPILE_ASSERT(SSL_MAX_HANDSHAKE_FLIGHT <
542
+ (1 << 8 * sizeof(ssl->d1->outgoing_messages_len)),
543
+ outgoing_messages_len_is_too_small);
708
544
  if (ssl->d1->outgoing_messages_len >= SSL_MAX_HANDSHAKE_FLIGHT) {
545
+ assert(0);
709
546
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
710
547
  OPENSSL_free(data);
711
548
  return 0;
712
549
  }
713
550
 
551
+ if (!is_ccs) {
552
+ /* TODO(svaldez): Move this up a layer to fix abstraction for SSL_TRANSCRIPT
553
+ * on hs. */
554
+ if (ssl->s3->hs != NULL &&
555
+ !SSL_TRANSCRIPT_update(&ssl->s3->hs->transcript, data, len)) {
556
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
557
+ OPENSSL_free(data);
558
+ return 0;
559
+ }
560
+ ssl->d1->handshake_write_seq++;
561
+ }
562
+
714
563
  DTLS_OUTGOING_MESSAGE *msg =
715
564
  &ssl->d1->outgoing_messages[ssl->d1->outgoing_messages_len];
716
565
  msg->data = data;
717
566
  msg->len = len;
718
567
  msg->epoch = ssl->d1->w_epoch;
719
- msg->is_ccs = 0;
568
+ msg->is_ccs = is_ccs;
720
569
 
721
570
  ssl->d1->outgoing_messages_len++;
722
571
  return 1;
723
572
  }
724
573
 
725
- int dtls1_init_message(SSL *ssl, CBB *cbb, CBB *body, uint8_t type) {
726
- /* Pick a modest size hint to save most of the |realloc| calls. */
727
- if (!CBB_init(cbb, 64) ||
728
- !CBB_add_u8(cbb, type) ||
729
- !CBB_add_u24(cbb, 0 /* length (filled in later) */) ||
730
- !CBB_add_u16(cbb, ssl->d1->handshake_write_seq) ||
731
- !CBB_add_u24(cbb, 0 /* offset */) ||
732
- !CBB_add_u24_length_prefixed(cbb, body)) {
733
- return 0;
734
- }
735
-
736
- return 1;
574
+ int dtls1_add_message(SSL *ssl, uint8_t *data, size_t len) {
575
+ return add_outgoing(ssl, 0 /* handshake */, data, len);
737
576
  }
738
577
 
739
- int dtls1_finish_message(SSL *ssl, CBB *cbb) {
740
- uint8_t *msg = NULL;
741
- size_t len;
742
- if (!CBB_finish(cbb, &msg, &len) ||
743
- len > 0xffffffffu ||
744
- len < DTLS1_HM_HEADER_LENGTH) {
745
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
746
- OPENSSL_free(msg);
747
- return 0;
748
- }
749
-
750
- /* Fix up the header. Copy the fragment length into the total message
751
- * length. */
752
- memcpy(msg + 1, msg + DTLS1_HM_HEADER_LENGTH - 3, 3);
753
-
754
- ssl3_update_handshake_hash(ssl, msg, len);
755
-
756
- ssl->d1->handshake_write_seq++;
757
- ssl->init_off = 0;
758
- return dtls1_add_message(ssl, msg, len);
578
+ int dtls1_add_change_cipher_spec(SSL *ssl) {
579
+ return add_outgoing(ssl, 1 /* ChangeCipherSpec */, NULL, 0);
759
580
  }
760
581
 
761
- int dtls1_write_message(SSL *ssl) {
762
- if (ssl->d1->outgoing_messages_len == 0) {
763
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
764
- return -1;
765
- }
582
+ int dtls1_add_alert(SSL *ssl, uint8_t level, uint8_t desc) {
583
+ /* The |add_alert| path is only used for warning alerts for now, which DTLS
584
+ * never sends. This will be implemented later once closure alerts are
585
+ * converted. */
586
+ assert(0);
587
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
588
+ return 0;
589
+ }
766
590
 
767
- const DTLS_OUTGOING_MESSAGE *msg =
768
- &ssl->d1->outgoing_messages[ssl->d1->outgoing_messages_len - 1];
769
- if (msg->is_ccs) {
770
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
771
- return -1;
591
+ /* dtls1_update_mtu updates the current MTU from the BIO, ensuring it is above
592
+ * the minimum. */
593
+ static void dtls1_update_mtu(SSL *ssl) {
594
+ /* TODO(davidben): No consumer implements |BIO_CTRL_DGRAM_SET_MTU| and the
595
+ * only |BIO_CTRL_DGRAM_QUERY_MTU| implementation could use
596
+ * |SSL_set_mtu|. Does this need to be so complex? */
597
+ if (ssl->d1->mtu < dtls1_min_mtu() &&
598
+ !(SSL_get_options(ssl) & SSL_OP_NO_QUERY_MTU)) {
599
+ long mtu = BIO_ctrl(ssl->wbio, BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL);
600
+ if (mtu >= 0 && mtu <= (1 << 30) && (unsigned)mtu >= dtls1_min_mtu()) {
601
+ ssl->d1->mtu = (unsigned)mtu;
602
+ } else {
603
+ ssl->d1->mtu = kDefaultMTU;
604
+ BIO_ctrl(ssl->wbio, BIO_CTRL_DGRAM_SET_MTU, ssl->d1->mtu, NULL);
605
+ }
772
606
  }
773
607
 
774
- size_t offset = ssl->init_off;
775
- int ret = dtls1_do_handshake_write(ssl, &offset, msg->data, offset, msg->len,
776
- dtls1_use_current_epoch);
777
- ssl->init_off = offset;
778
- return ret;
608
+ /* The MTU should be above the minimum now. */
609
+ assert(ssl->d1->mtu >= dtls1_min_mtu());
779
610
  }
780
611
 
781
- static int dtls1_retransmit_message(SSL *ssl,
782
- const DTLS_OUTGOING_MESSAGE *msg) {
612
+ enum seal_result_t {
613
+ seal_error,
614
+ seal_no_progress,
615
+ seal_partial,
616
+ seal_success,
617
+ };
618
+
619
+ /* seal_next_message seals |msg|, which must be the next message, to |out|. If
620
+ * progress was made, it returns |seal_partial| or |seal_success| and sets
621
+ * |*out_len| to the number of bytes written. */
622
+ static enum seal_result_t seal_next_message(SSL *ssl, uint8_t *out,
623
+ size_t *out_len, size_t max_out,
624
+ const DTLS_OUTGOING_MESSAGE *msg) {
625
+ assert(ssl->d1->outgoing_written < ssl->d1->outgoing_messages_len);
626
+ assert(msg == &ssl->d1->outgoing_messages[ssl->d1->outgoing_written]);
627
+
783
628
  /* DTLS renegotiation is unsupported, so only epochs 0 (NULL cipher) and 1
784
629
  * (negotiated cipher) exist. */
785
630
  assert(ssl->d1->w_epoch == 0 || ssl->d1->w_epoch == 1);
@@ -788,56 +633,181 @@ static int dtls1_retransmit_message(SSL *ssl,
788
633
  if (ssl->d1->w_epoch == 1 && msg->epoch == 0) {
789
634
  use_epoch = dtls1_use_previous_epoch;
790
635
  }
636
+ size_t overhead = dtls_max_seal_overhead(ssl, use_epoch);
637
+ size_t prefix = dtls_seal_prefix_len(ssl, use_epoch);
791
638
 
792
- /* TODO(davidben): This cannot handle non-blocking writes. */
793
- int ret;
794
639
  if (msg->is_ccs) {
795
- ret = dtls1_write_change_cipher_spec(ssl, use_epoch);
796
- } else {
797
- size_t offset = 0;
798
- ret = dtls1_do_handshake_write(ssl, &offset, msg->data, offset, msg->len,
799
- use_epoch);
640
+ /* Check there is room for the ChangeCipherSpec. */
641
+ static const uint8_t kChangeCipherSpec[1] = {SSL3_MT_CCS};
642
+ if (max_out < sizeof(kChangeCipherSpec) + overhead) {
643
+ return seal_no_progress;
644
+ }
645
+
646
+ if (!dtls_seal_record(ssl, out, out_len, max_out,
647
+ SSL3_RT_CHANGE_CIPHER_SPEC, kChangeCipherSpec,
648
+ sizeof(kChangeCipherSpec), use_epoch)) {
649
+ return seal_error;
650
+ }
651
+
652
+ ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_CHANGE_CIPHER_SPEC,
653
+ kChangeCipherSpec, sizeof(kChangeCipherSpec));
654
+ return seal_success;
800
655
  }
801
656
 
802
- return ret;
657
+ /* DTLS messages are serialized as a single fragment in |msg|. */
658
+ CBS cbs, body;
659
+ struct hm_header_st hdr;
660
+ CBS_init(&cbs, msg->data, msg->len);
661
+ if (!dtls1_parse_fragment(&cbs, &hdr, &body) ||
662
+ hdr.frag_off != 0 ||
663
+ hdr.frag_len != CBS_len(&body) ||
664
+ hdr.msg_len != CBS_len(&body) ||
665
+ !CBS_skip(&body, ssl->d1->outgoing_offset) ||
666
+ CBS_len(&cbs) != 0) {
667
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
668
+ return seal_error;
669
+ }
670
+
671
+ /* Determine how much progress can be made. */
672
+ if (max_out < DTLS1_HM_HEADER_LENGTH + 1 + overhead || max_out < prefix) {
673
+ return seal_no_progress;
674
+ }
675
+ size_t todo = CBS_len(&body);
676
+ if (todo > max_out - DTLS1_HM_HEADER_LENGTH - overhead) {
677
+ todo = max_out - DTLS1_HM_HEADER_LENGTH - overhead;
678
+ }
679
+
680
+ /* Assemble a fragment, to be sealed in-place. */
681
+ CBB cbb;
682
+ uint8_t *frag = out + prefix;
683
+ size_t max_frag = max_out - prefix, frag_len;
684
+ if (!CBB_init_fixed(&cbb, frag, max_frag) ||
685
+ !CBB_add_u8(&cbb, hdr.type) ||
686
+ !CBB_add_u24(&cbb, hdr.msg_len) ||
687
+ !CBB_add_u16(&cbb, hdr.seq) ||
688
+ !CBB_add_u24(&cbb, ssl->d1->outgoing_offset) ||
689
+ !CBB_add_u24(&cbb, todo) ||
690
+ !CBB_add_bytes(&cbb, CBS_data(&body), todo) ||
691
+ !CBB_finish(&cbb, NULL, &frag_len)) {
692
+ CBB_cleanup(&cbb);
693
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
694
+ return seal_error;
695
+ }
696
+
697
+ ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HANDSHAKE, frag, frag_len);
698
+
699
+ if (!dtls_seal_record(ssl, out, out_len, max_out, SSL3_RT_HANDSHAKE,
700
+ out + prefix, frag_len, use_epoch)) {
701
+ return seal_error;
702
+ }
703
+
704
+ if (todo == CBS_len(&body)) {
705
+ /* The next message is complete. */
706
+ ssl->d1->outgoing_offset = 0;
707
+ return seal_success;
708
+ }
709
+
710
+ ssl->d1->outgoing_offset += todo;
711
+ return seal_partial;
803
712
  }
804
713
 
805
- int dtls1_retransmit_outgoing_messages(SSL *ssl) {
806
- /* Ensure we are packing handshake messages. */
807
- const int was_buffered = ssl_is_wbio_buffered(ssl);
808
- assert(was_buffered == SSL_in_init(ssl));
809
- if (!was_buffered && !ssl_init_wbio_buffer(ssl)) {
810
- return -1;
714
+ /* seal_next_packet writes as much of the next flight as possible to |out| and
715
+ * advances |ssl->d1->outgoing_written| and |ssl->d1->outgoing_offset| as
716
+ * appropriate. */
717
+ static int seal_next_packet(SSL *ssl, uint8_t *out, size_t *out_len,
718
+ size_t max_out) {
719
+ int made_progress = 0;
720
+ size_t total = 0;
721
+ assert(ssl->d1->outgoing_written < ssl->d1->outgoing_messages_len);
722
+ for (; ssl->d1->outgoing_written < ssl->d1->outgoing_messages_len;
723
+ ssl->d1->outgoing_written++) {
724
+ const DTLS_OUTGOING_MESSAGE *msg =
725
+ &ssl->d1->outgoing_messages[ssl->d1->outgoing_written];
726
+ size_t len;
727
+ enum seal_result_t ret = seal_next_message(ssl, out, &len, max_out, msg);
728
+ switch (ret) {
729
+ case seal_error:
730
+ return 0;
731
+
732
+ case seal_no_progress:
733
+ goto packet_full;
734
+
735
+ case seal_partial:
736
+ case seal_success:
737
+ out += len;
738
+ max_out -= len;
739
+ total += len;
740
+ made_progress = 1;
741
+
742
+ if (ret == seal_partial) {
743
+ goto packet_full;
744
+ }
745
+ break;
746
+ }
811
747
  }
812
- assert(ssl_is_wbio_buffered(ssl));
748
+
749
+ packet_full:
750
+ /* The MTU was too small to make any progress. */
751
+ if (!made_progress) {
752
+ OPENSSL_PUT_ERROR(SSL, SSL_R_MTU_TOO_SMALL);
753
+ return 0;
754
+ }
755
+
756
+ *out_len = total;
757
+ return 1;
758
+ }
759
+
760
+ int dtls1_flush_flight(SSL *ssl) {
761
+ dtls1_update_mtu(ssl);
813
762
 
814
763
  int ret = -1;
815
- for (size_t i = 0; i < ssl->d1->outgoing_messages_len; i++) {
816
- if (dtls1_retransmit_message(ssl, &ssl->d1->outgoing_messages[i]) <= 0) {
764
+ uint8_t *packet = OPENSSL_malloc(ssl->d1->mtu);
765
+ if (packet == NULL) {
766
+ OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
767
+ goto err;
768
+ }
769
+
770
+ while (ssl->d1->outgoing_written < ssl->d1->outgoing_messages_len) {
771
+ uint8_t old_written = ssl->d1->outgoing_written;
772
+ uint32_t old_offset = ssl->d1->outgoing_offset;
773
+
774
+ size_t packet_len;
775
+ if (!seal_next_packet(ssl, packet, &packet_len, ssl->d1->mtu)) {
776
+ goto err;
777
+ }
778
+
779
+ int bio_ret = BIO_write(ssl->wbio, packet, packet_len);
780
+ if (bio_ret <= 0) {
781
+ /* Retry this packet the next time around. */
782
+ ssl->d1->outgoing_written = old_written;
783
+ ssl->d1->outgoing_offset = old_offset;
784
+ ssl->rwstate = SSL_WRITING;
785
+ ret = bio_ret;
817
786
  goto err;
818
787
  }
819
788
  }
820
789
 
821
- ret = BIO_flush(ssl->wbio);
822
- if (ret <= 0) {
790
+ if (BIO_flush(ssl->wbio) <= 0) {
823
791
  ssl->rwstate = SSL_WRITING;
824
792
  goto err;
825
793
  }
826
794
 
795
+ ret = 1;
796
+
827
797
  err:
828
- if (!was_buffered) {
829
- ssl_free_wbio_buffer(ssl);
830
- }
798
+ OPENSSL_free(packet);
831
799
  return ret;
832
800
  }
833
801
 
834
- int dtls1_send_change_cipher_spec(SSL *ssl) {
835
- int ret = dtls1_write_change_cipher_spec(ssl, dtls1_use_current_epoch);
836
- if (ret <= 0) {
837
- return ret;
838
- }
839
- dtls1_add_change_cipher_spec(ssl);
840
- return 1;
802
+ int dtls1_retransmit_outgoing_messages(SSL *ssl) {
803
+ /* Rewind to the start of the flight and write it again.
804
+ *
805
+ * TODO(davidben): This does not allow retransmits to be resumed on
806
+ * non-blocking write. */
807
+ ssl->d1->outgoing_written = 0;
808
+ ssl->d1->outgoing_offset = 0;
809
+
810
+ return dtls1_flush_flight(ssl);
841
811
  }
842
812
 
843
813
  unsigned int dtls1_min_mtu(void) {