grpc 1.0.1 → 1.1.2

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

Potentially problematic release.


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

Files changed (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -37,14 +37,13 @@
37
37
  #include "src/core/lib/iomgr/pollset.h"
38
38
  #include "src/core/lib/json/json.h"
39
39
 
40
- #include <grpc/support/slice.h>
40
+ #include <grpc/slice.h>
41
41
  #include <grpc/support/time.h>
42
42
 
43
43
  /* --- Constants. --- */
44
44
 
45
45
  #define GRPC_OPENID_CONFIG_URL_SUFFIX "/.well-known/openid-configuration"
46
- #define GRPC_GOOGLE_SERVICE_ACCOUNTS_EMAIL_DOMAIN \
47
- "developer.gserviceaccount.com"
46
+ #define GRPC_GOOGLE_SERVICE_ACCOUNTS_EMAIL_DOMAIN "gserviceaccount.com"
48
47
  #define GRPC_GOOGLE_SERVICE_ACCOUNTS_KEY_URL_PREFIX \
49
48
  "www.googleapis.com/robot/v1/metadata/x509"
50
49
 
@@ -57,6 +56,7 @@ typedef enum {
57
56
  GRPC_JWT_VERIFIER_BAD_AUDIENCE,
58
57
  GRPC_JWT_VERIFIER_KEY_RETRIEVAL_ERROR,
59
58
  GRPC_JWT_VERIFIER_TIME_CONSTRAINT_FAILURE,
59
+ GRPC_JWT_VERIFIER_BAD_SUBJECT,
60
60
  GRPC_JWT_VERIFIER_GENERIC_ERROR
61
61
  } grpc_jwt_verifier_status;
62
62
 
@@ -66,7 +66,7 @@ const char *grpc_jwt_verifier_status_to_string(grpc_jwt_verifier_status status);
66
66
 
67
67
  typedef struct grpc_jwt_claims grpc_jwt_claims;
68
68
 
69
- void grpc_jwt_claims_destroy(grpc_jwt_claims *claims);
69
+ void grpc_jwt_claims_destroy(grpc_exec_ctx *exec_ctx, grpc_jwt_claims *claims);
70
70
 
71
71
  /* Returns the whole JSON tree of the claims. */
72
72
  const grpc_json *grpc_jwt_claims_json(const grpc_jwt_claims *claims);
@@ -115,7 +115,8 @@ void grpc_jwt_verifier_destroy(grpc_jwt_verifier *verifier);
115
115
  is done (maybe in another thread).
116
116
  It is the responsibility of the callee to call grpc_jwt_claims_destroy on
117
117
  the claims. */
118
- typedef void (*grpc_jwt_verification_done_cb)(void *user_data,
118
+ typedef void (*grpc_jwt_verification_done_cb)(grpc_exec_ctx *exec_ctx,
119
+ void *user_data,
119
120
  grpc_jwt_verifier_status status,
120
121
  grpc_jwt_claims *claims);
121
122
 
@@ -129,8 +130,10 @@ void grpc_jwt_verifier_verify(grpc_exec_ctx *exec_ctx,
129
130
 
130
131
  /* --- TESTING ONLY exposed functions. --- */
131
132
 
132
- grpc_jwt_claims *grpc_jwt_claims_from_json(grpc_json *json, gpr_slice buffer);
133
+ grpc_jwt_claims *grpc_jwt_claims_from_json(grpc_exec_ctx *exec_ctx,
134
+ grpc_json *json, grpc_slice buffer);
133
135
  grpc_jwt_verifier_status grpc_jwt_claims_check(const grpc_jwt_claims *claims,
134
136
  const char *audience);
137
+ const char *grpc_jwt_issuer_email_domain(const char *issuer);
135
138
 
136
139
  #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_JWT_JWT_VERIFIER_H */
@@ -118,18 +118,19 @@ void grpc_auth_refresh_token_destruct(grpc_auth_refresh_token *refresh_token) {
118
118
  // Oauth2 Token Fetcher credentials.
119
119
  //
120
120
 
121
- static void oauth2_token_fetcher_destruct(grpc_call_credentials *creds) {
121
+ static void oauth2_token_fetcher_destruct(grpc_exec_ctx *exec_ctx,
122
+ grpc_call_credentials *creds) {
122
123
  grpc_oauth2_token_fetcher_credentials *c =
123
124
  (grpc_oauth2_token_fetcher_credentials *)creds;
124
- grpc_credentials_md_store_unref(c->access_token_md);
125
+ grpc_credentials_md_store_unref(exec_ctx, c->access_token_md);
125
126
  gpr_mu_destroy(&c->mu);
126
127
  grpc_httpcli_context_destroy(&c->httpcli_context);
127
128
  }
128
129
 
129
130
  grpc_credentials_status
130
131
  grpc_oauth2_token_fetcher_credentials_parse_server_response(
131
- const grpc_http_response *response, grpc_credentials_md_store **token_md,
132
- gpr_timespec *token_lifetime) {
132
+ grpc_exec_ctx *exec_ctx, const grpc_http_response *response,
133
+ grpc_credentials_md_store **token_md, gpr_timespec *token_lifetime) {
133
134
  char *null_terminated_body = NULL;
134
135
  char *new_access_token = NULL;
135
136
  grpc_credentials_status status = GRPC_CREDENTIALS_OK;
@@ -198,7 +199,7 @@ grpc_oauth2_token_fetcher_credentials_parse_server_response(
198
199
  token_lifetime->tv_sec = strtol(expires_in->value, NULL, 10);
199
200
  token_lifetime->tv_nsec = 0;
200
201
  token_lifetime->clock_type = GPR_TIMESPAN;
201
- if (*token_md != NULL) grpc_credentials_md_store_unref(*token_md);
202
+ if (*token_md != NULL) grpc_credentials_md_store_unref(exec_ctx, *token_md);
202
203
  *token_md = grpc_credentials_md_store_create(1);
203
204
  grpc_credentials_md_store_add_cstrings(
204
205
  *token_md, GRPC_AUTHORIZATION_METADATA_KEY, new_access_token);
@@ -207,7 +208,7 @@ grpc_oauth2_token_fetcher_credentials_parse_server_response(
207
208
 
208
209
  end:
209
210
  if (status != GRPC_CREDENTIALS_OK && (*token_md != NULL)) {
210
- grpc_credentials_md_store_unref(*token_md);
211
+ grpc_credentials_md_store_unref(exec_ctx, *token_md);
211
212
  *token_md = NULL;
212
213
  }
213
214
  if (null_terminated_body != NULL) gpr_free(null_terminated_body);
@@ -230,7 +231,7 @@ static void on_oauth2_token_fetcher_http_response(grpc_exec_ctx *exec_ctx,
230
231
 
231
232
  gpr_mu_lock(&c->mu);
232
233
  status = grpc_oauth2_token_fetcher_credentials_parse_server_response(
233
- &r->response, &c->access_token_md, &token_lifetime);
234
+ exec_ctx, &r->response, &c->access_token_md, &token_lifetime);
234
235
  if (status == GRPC_CREDENTIALS_OK) {
235
236
  c->token_expiration =
236
237
  gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), token_lifetime);
@@ -242,7 +243,7 @@ static void on_oauth2_token_fetcher_http_response(grpc_exec_ctx *exec_ctx,
242
243
  "Error occured when fetching oauth2 token.");
243
244
  }
244
245
  gpr_mu_unlock(&c->mu);
245
- grpc_credentials_metadata_request_destroy(r);
246
+ grpc_credentials_metadata_request_destroy(exec_ctx, r);
246
247
  }
247
248
 
248
249
  static void oauth2_token_fetcher_get_request_metadata(
@@ -268,7 +269,7 @@ static void oauth2_token_fetcher_get_request_metadata(
268
269
  if (cached_access_token_md != NULL) {
269
270
  cb(exec_ctx, user_data, cached_access_token_md->entries,
270
271
  cached_access_token_md->num_entries, GRPC_CREDENTIALS_OK, NULL);
271
- grpc_credentials_md_store_unref(cached_access_token_md);
272
+ grpc_credentials_md_store_unref(exec_ctx, cached_access_token_md);
272
273
  } else {
273
274
  c->fetch_func(
274
275
  exec_ctx,
@@ -307,9 +308,17 @@ static void compute_engine_fetch_oauth2(
307
308
  request.http.path = GRPC_COMPUTE_ENGINE_METADATA_TOKEN_PATH;
308
309
  request.http.hdr_count = 1;
309
310
  request.http.hdrs = &header;
310
- grpc_httpcli_get(exec_ctx, httpcli_context, pollent, &request, deadline,
311
- grpc_closure_create(response_cb, metadata_req),
312
- &metadata_req->response);
311
+ /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host
312
+ channel. This would allow us to cancel an authentication query when under
313
+ extreme memory pressure. */
314
+ grpc_resource_quota *resource_quota =
315
+ grpc_resource_quota_create("oauth2_credentials");
316
+ grpc_httpcli_get(
317
+ exec_ctx, httpcli_context, pollent, resource_quota, &request, deadline,
318
+ grpc_closure_create(response_cb, metadata_req, grpc_schedule_on_exec_ctx),
319
+
320
+ &metadata_req->response);
321
+ grpc_resource_quota_unref_internal(exec_ctx, resource_quota);
313
322
  }
314
323
 
315
324
  grpc_call_credentials *grpc_google_compute_engine_credentials_create(
@@ -328,11 +337,12 @@ grpc_call_credentials *grpc_google_compute_engine_credentials_create(
328
337
  // Google Refresh Token credentials.
329
338
  //
330
339
 
331
- static void refresh_token_destruct(grpc_call_credentials *creds) {
340
+ static void refresh_token_destruct(grpc_exec_ctx *exec_ctx,
341
+ grpc_call_credentials *creds) {
332
342
  grpc_google_refresh_token_credentials *c =
333
343
  (grpc_google_refresh_token_credentials *)creds;
334
344
  grpc_auth_refresh_token_destruct(&c->refresh_token);
335
- oauth2_token_fetcher_destruct(&c->base.base);
345
+ oauth2_token_fetcher_destruct(exec_ctx, &c->base.base);
336
346
  }
337
347
 
338
348
  static grpc_call_credentials_vtable refresh_token_vtable = {
@@ -357,10 +367,17 @@ static void refresh_token_fetch_oauth2(
357
367
  request.http.hdr_count = 1;
358
368
  request.http.hdrs = &header;
359
369
  request.handshaker = &grpc_httpcli_ssl;
360
- grpc_httpcli_post(exec_ctx, httpcli_context, pollent, &request, body,
361
- strlen(body), deadline,
362
- grpc_closure_create(response_cb, metadata_req),
363
- &metadata_req->response);
370
+ /* TODO(ctiller): Carry the resource_quota in ctx and share it with the host
371
+ channel. This would allow us to cancel an authentication query when under
372
+ extreme memory pressure. */
373
+ grpc_resource_quota *resource_quota =
374
+ grpc_resource_quota_create("oauth2_credentials_refresh");
375
+ grpc_httpcli_post(
376
+ exec_ctx, httpcli_context, pollent, resource_quota, &request, body,
377
+ strlen(body), deadline,
378
+ grpc_closure_create(response_cb, metadata_req, grpc_schedule_on_exec_ctx),
379
+ &metadata_req->response);
380
+ grpc_resource_quota_unref_internal(exec_ctx, resource_quota);
364
381
  gpr_free(body);
365
382
  }
366
383
 
@@ -380,24 +397,42 @@ grpc_refresh_token_credentials_create_from_auth_refresh_token(
380
397
  return &c->base.base;
381
398
  }
382
399
 
400
+ static char *create_loggable_refresh_token(grpc_auth_refresh_token *token) {
401
+ if (strcmp(token->type, GRPC_AUTH_JSON_TYPE_INVALID) == 0) {
402
+ return gpr_strdup("<Invalid json token>");
403
+ }
404
+ char *loggable_token = NULL;
405
+ gpr_asprintf(&loggable_token,
406
+ "{\n type: %s\n client_id: %s\n client_secret: "
407
+ "<redacted>\n refresh_token: <redacted>\n}",
408
+ token->type, token->client_id);
409
+ return loggable_token;
410
+ }
411
+
383
412
  grpc_call_credentials *grpc_google_refresh_token_credentials_create(
384
413
  const char *json_refresh_token, void *reserved) {
385
- GRPC_API_TRACE(
386
- "grpc_refresh_token_credentials_create(json_refresh_token=%s, "
387
- "reserved=%p)",
388
- 2, (json_refresh_token, reserved));
414
+ grpc_auth_refresh_token token =
415
+ grpc_auth_refresh_token_create_from_string(json_refresh_token);
416
+ if (grpc_api_trace) {
417
+ char *loggable_token = create_loggable_refresh_token(&token);
418
+ gpr_log(GPR_INFO,
419
+ "grpc_refresh_token_credentials_create(json_refresh_token=%s, "
420
+ "reserved=%p)",
421
+ loggable_token, reserved);
422
+ gpr_free(loggable_token);
423
+ }
389
424
  GPR_ASSERT(reserved == NULL);
390
- return grpc_refresh_token_credentials_create_from_auth_refresh_token(
391
- grpc_auth_refresh_token_create_from_string(json_refresh_token));
425
+ return grpc_refresh_token_credentials_create_from_auth_refresh_token(token);
392
426
  }
393
427
 
394
428
  //
395
429
  // Oauth2 Access Token credentials.
396
430
  //
397
431
 
398
- static void access_token_destruct(grpc_call_credentials *creds) {
432
+ static void access_token_destruct(grpc_exec_ctx *exec_ctx,
433
+ grpc_call_credentials *creds) {
399
434
  grpc_access_token_credentials *c = (grpc_access_token_credentials *)creds;
400
- grpc_credentials_md_store_unref(c->access_token_md);
435
+ grpc_credentials_md_store_unref(exec_ctx, c->access_token_md);
401
436
  }
402
437
 
403
438
  static void access_token_get_request_metadata(
@@ -418,9 +453,9 @@ grpc_call_credentials *grpc_access_token_credentials_create(
418
453
  gpr_malloc(sizeof(grpc_access_token_credentials));
419
454
  char *token_md_value;
420
455
  GRPC_API_TRACE(
421
- "grpc_access_token_credentials_create(access_token=%s, "
456
+ "grpc_access_token_credentials_create(access_token=<redacted>, "
422
457
  "reserved=%p)",
423
- 2, (access_token, reserved));
458
+ 1, (reserved));
424
459
  GPR_ASSERT(reserved == NULL);
425
460
  memset(c, 0, sizeof(grpc_access_token_credentials));
426
461
  c->base.type = GRPC_CALL_CREDENTIALS_TYPE_OAUTH2;
@@ -103,7 +103,7 @@ grpc_refresh_token_credentials_create_from_auth_refresh_token(
103
103
  // Exposed for testing only.
104
104
  grpc_credentials_status
105
105
  grpc_oauth2_token_fetcher_credentials_parse_server_response(
106
- const struct grpc_http_response *response,
106
+ grpc_exec_ctx *exec_ctx, const struct grpc_http_response *response,
107
107
  grpc_credentials_md_store **token_md, gpr_timespec *token_lifetime);
108
108
 
109
109
  #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_OAUTH2_OAUTH2_CREDENTIALS_H */
@@ -35,19 +35,22 @@
35
35
 
36
36
  #include <string.h>
37
37
 
38
- #include "src/core/lib/surface/api_trace.h"
39
-
38
+ #include <grpc/grpc.h>
40
39
  #include <grpc/support/alloc.h>
41
40
  #include <grpc/support/log.h>
42
41
  #include <grpc/support/string_util.h>
43
42
  #include <grpc/support/sync.h>
44
43
 
44
+ #include "src/core/lib/slice/slice_internal.h"
45
+ #include "src/core/lib/surface/api_trace.h"
46
+
45
47
  typedef struct {
46
48
  void *user_data;
47
49
  grpc_credentials_metadata_cb cb;
48
50
  } grpc_metadata_plugin_request;
49
51
 
50
- static void plugin_destruct(grpc_call_credentials *creds) {
52
+ static void plugin_destruct(grpc_exec_ctx *exec_ctx,
53
+ grpc_call_credentials *creds) {
51
54
  grpc_plugin_credentials *c = (grpc_plugin_credentials *)creds;
52
55
  if (c->plugin.state != NULL && c->plugin.destroy != NULL) {
53
56
  c->plugin.destroy(c->plugin.state);
@@ -71,22 +74,40 @@ static void plugin_md_request_metadata_ready(void *request,
71
74
  error_details);
72
75
  } else {
73
76
  size_t i;
77
+ bool seen_illegal_header = false;
74
78
  grpc_credentials_md *md_array = NULL;
75
- if (num_md > 0) {
79
+ for (i = 0; i < num_md; i++) {
80
+ if (!grpc_header_key_is_legal(md[i].key, strlen(md[i].key))) {
81
+ gpr_log(GPR_ERROR, "Plugin added invalid metadata key: %s", md[i].key);
82
+ seen_illegal_header = true;
83
+ break;
84
+ } else if (!grpc_is_binary_header(md[i].key, strlen(md[i].key)) &&
85
+ !grpc_header_nonbin_value_is_legal(md[i].value,
86
+ md[i].value_length)) {
87
+ gpr_log(GPR_ERROR, "Plugin added invalid metadata value.");
88
+ seen_illegal_header = true;
89
+ break;
90
+ }
91
+ }
92
+ if (seen_illegal_header) {
93
+ r->cb(&exec_ctx, r->user_data, NULL, 0, GRPC_CREDENTIALS_ERROR,
94
+ "Illegal metadata");
95
+ } else if (num_md > 0) {
76
96
  md_array = gpr_malloc(num_md * sizeof(grpc_credentials_md));
77
97
  for (i = 0; i < num_md; i++) {
78
- md_array[i].key = gpr_slice_from_copied_string(md[i].key);
98
+ md_array[i].key = grpc_slice_from_copied_string(md[i].key);
79
99
  md_array[i].value =
80
- gpr_slice_from_copied_buffer(md[i].value, md[i].value_length);
100
+ grpc_slice_from_copied_buffer(md[i].value, md[i].value_length);
81
101
  }
82
- }
83
- r->cb(&exec_ctx, r->user_data, md_array, num_md, GRPC_CREDENTIALS_OK, NULL);
84
- if (md_array != NULL) {
102
+ r->cb(&exec_ctx, r->user_data, md_array, num_md, GRPC_CREDENTIALS_OK,
103
+ NULL);
85
104
  for (i = 0; i < num_md; i++) {
86
- gpr_slice_unref(md_array[i].key);
87
- gpr_slice_unref(md_array[i].value);
105
+ grpc_slice_unref_internal(&exec_ctx, md_array[i].key);
106
+ grpc_slice_unref_internal(&exec_ctx, md_array[i].value);
88
107
  }
89
108
  gpr_free(md_array);
109
+ } else if (num_md == 0) {
110
+ r->cb(&exec_ctx, r->user_data, NULL, 0, GRPC_CREDENTIALS_OK, NULL);
90
111
  }
91
112
  }
92
113
  gpr_free(r);
@@ -57,7 +57,8 @@ static void ssl_copy_key_material(const char *input, unsigned char **output,
57
57
  // SSL Channel Credentials.
58
58
  //
59
59
 
60
- static void ssl_destruct(grpc_channel_credentials *creds) {
60
+ static void ssl_destruct(grpc_exec_ctx *exec_ctx,
61
+ grpc_channel_credentials *creds) {
61
62
  grpc_ssl_credentials *c = (grpc_ssl_credentials *)creds;
62
63
  if (c->config.pem_root_certs != NULL) gpr_free(c->config.pem_root_certs);
63
64
  if (c->config.pem_private_key != NULL) gpr_free(c->config.pem_private_key);
@@ -65,9 +66,10 @@ static void ssl_destruct(grpc_channel_credentials *creds) {
65
66
  }
66
67
 
67
68
  static grpc_security_status ssl_create_security_connector(
68
- grpc_channel_credentials *creds, grpc_call_credentials *call_creds,
69
- const char *target, const grpc_channel_args *args,
70
- grpc_channel_security_connector **sc, grpc_channel_args **new_args) {
69
+ grpc_exec_ctx *exec_ctx, grpc_channel_credentials *creds,
70
+ grpc_call_credentials *call_creds, const char *target,
71
+ const grpc_channel_args *args, grpc_channel_security_connector **sc,
72
+ grpc_channel_args **new_args) {
71
73
  grpc_ssl_credentials *c = (grpc_ssl_credentials *)creds;
72
74
  grpc_security_status status = GRPC_SECURITY_OK;
73
75
  size_t i = 0;
@@ -83,7 +85,7 @@ static grpc_security_status ssl_create_security_connector(
83
85
  }
84
86
  }
85
87
  status = grpc_ssl_channel_security_connector_create(
86
- call_creds, &c->config, target, overridden_target_name, sc);
88
+ exec_ctx, call_creds, &c->config, target, overridden_target_name, sc);
87
89
  if (status != GRPC_SECURITY_OK) {
88
90
  return status;
89
91
  }
@@ -95,7 +97,7 @@ static grpc_security_status ssl_create_security_connector(
95
97
  }
96
98
 
97
99
  static grpc_channel_credentials_vtable ssl_vtable = {
98
- ssl_destruct, ssl_create_security_connector};
100
+ ssl_destruct, ssl_create_security_connector, NULL};
99
101
 
100
102
  static void ssl_build_config(const char *pem_root_certs,
101
103
  grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
@@ -138,7 +140,8 @@ grpc_channel_credentials *grpc_ssl_credentials_create(
138
140
  // SSL Server Credentials.
139
141
  //
140
142
 
141
- static void ssl_server_destruct(grpc_server_credentials *creds) {
143
+ static void ssl_server_destruct(grpc_exec_ctx *exec_ctx,
144
+ grpc_server_credentials *creds) {
142
145
  grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds;
143
146
  size_t i;
144
147
  for (i = 0; i < c->config.num_key_cert_pairs; i++) {
@@ -161,9 +164,10 @@ static void ssl_server_destruct(grpc_server_credentials *creds) {
161
164
  }
162
165
 
163
166
  static grpc_security_status ssl_server_create_security_connector(
164
- grpc_server_credentials *creds, grpc_server_security_connector **sc) {
167
+ grpc_exec_ctx *exec_ctx, grpc_server_credentials *creds,
168
+ grpc_server_security_connector **sc) {
165
169
  grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds;
166
- return grpc_ssl_server_security_connector_create(&c->config, sc);
170
+ return grpc_ssl_server_security_connector_create(exec_ctx, &c->config, sc);
167
171
  }
168
172
 
169
173
  static grpc_server_credentials_vtable ssl_server_vtable = {
@@ -40,9 +40,11 @@
40
40
  #include <grpc/support/string_util.h>
41
41
 
42
42
  #include "src/core/lib/channel/channel_stack.h"
43
+ #include "src/core/lib/profiling/timers.h"
43
44
  #include "src/core/lib/security/context/security_context.h"
44
45
  #include "src/core/lib/security/credentials/credentials.h"
45
46
  #include "src/core/lib/security/transport/security_connector.h"
47
+ #include "src/core/lib/slice/slice_internal.h"
46
48
  #include "src/core/lib/support/string.h"
47
49
  #include "src/core/lib/surface/call.h"
48
50
  #include "src/core/lib/transport/static_metadata.h"
@@ -91,8 +93,9 @@ static void bubble_up_error(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
91
93
  grpc_status_code status, const char *error_msg) {
92
94
  call_data *calld = elem->call_data;
93
95
  gpr_log(GPR_ERROR, "Client side authentication failure: %s", error_msg);
94
- gpr_slice error_slice = gpr_slice_from_copied_string(error_msg);
95
- grpc_transport_stream_op_add_close(&calld->op, status, &error_slice);
96
+ grpc_slice error_slice = grpc_slice_from_copied_string(error_msg);
97
+ grpc_transport_stream_op_add_close(exec_ctx, &calld->op, status,
98
+ &error_slice);
96
99
  grpc_call_next_op(exec_ctx, elem, &calld->op);
97
100
  }
98
101
 
@@ -120,8 +123,9 @@ static void on_credentials_metadata(grpc_exec_ctx *exec_ctx, void *user_data,
120
123
  for (i = 0; i < num_md; i++) {
121
124
  grpc_metadata_batch_add_tail(
122
125
  mdb, &calld->md_links[i],
123
- grpc_mdelem_from_slices(gpr_slice_ref(md_elems[i].key),
124
- gpr_slice_ref(md_elems[i].value)));
126
+ grpc_mdelem_from_slices(exec_ctx,
127
+ grpc_slice_ref_internal(md_elems[i].key),
128
+ grpc_slice_ref_internal(md_elems[i].value)));
125
129
  }
126
130
  grpc_call_next_op(exec_ctx, elem, op);
127
131
  }
@@ -218,6 +222,8 @@ static void on_host_checked(grpc_exec_ctx *exec_ctx, void *user_data,
218
222
  static void auth_start_transport_op(grpc_exec_ctx *exec_ctx,
219
223
  grpc_call_element *elem,
220
224
  grpc_transport_stream_op *op) {
225
+ GPR_TIMER_BEGIN("auth_start_transport_op", 0);
226
+
221
227
  /* grab pointers to our data from the call element */
222
228
  call_data *calld = elem->call_data;
223
229
  channel_data *chand = elem->channel_data;
@@ -245,10 +251,10 @@ static void auth_start_transport_op(grpc_exec_ctx *exec_ctx,
245
251
  /* Pointer comparison is OK for md_elems created from the same context.
246
252
  */
247
253
  if (md->key == GRPC_MDSTR_AUTHORITY) {
248
- if (calld->host != NULL) GRPC_MDSTR_UNREF(calld->host);
254
+ if (calld->host != NULL) GRPC_MDSTR_UNREF(exec_ctx, calld->host);
249
255
  calld->host = GRPC_MDSTR_REF(md->value);
250
256
  } else if (md->key == GRPC_MDSTR_PATH) {
251
- if (calld->method != NULL) GRPC_MDSTR_UNREF(calld->method);
257
+ if (calld->method != NULL) GRPC_MDSTR_UNREF(exec_ctx, calld->method);
252
258
  calld->method = GRPC_MDSTR_REF(md->value);
253
259
  }
254
260
  }
@@ -258,19 +264,23 @@ static void auth_start_transport_op(grpc_exec_ctx *exec_ctx,
258
264
  grpc_channel_security_connector_check_call_host(
259
265
  exec_ctx, chand->security_connector, call_host, chand->auth_context,
260
266
  on_host_checked, elem);
267
+ GPR_TIMER_END("auth_start_transport_op", 0);
261
268
  return; /* early exit */
262
269
  }
263
270
  }
264
271
 
265
272
  /* pass control down the stack */
266
273
  grpc_call_next_op(exec_ctx, elem, op);
274
+ GPR_TIMER_END("auth_start_transport_op", 0);
267
275
  }
268
276
 
269
277
  /* Constructor for call_data */
270
- static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
271
- grpc_call_element_args *args) {
278
+ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
279
+ grpc_call_element *elem,
280
+ grpc_call_element_args *args) {
272
281
  call_data *calld = elem->call_data;
273
282
  memset(calld, 0, sizeof(*calld));
283
+ return GRPC_ERROR_NONE;
274
284
  }
275
285
 
276
286
  static void set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
@@ -282,22 +292,23 @@ static void set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
282
292
 
283
293
  /* Destructor for call_data */
284
294
  static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
285
- const grpc_call_stats *stats, void *ignored) {
295
+ const grpc_call_final_info *final_info,
296
+ void *ignored) {
286
297
  call_data *calld = elem->call_data;
287
- grpc_call_credentials_unref(calld->creds);
298
+ grpc_call_credentials_unref(exec_ctx, calld->creds);
288
299
  if (calld->host != NULL) {
289
- GRPC_MDSTR_UNREF(calld->host);
300
+ GRPC_MDSTR_UNREF(exec_ctx, calld->host);
290
301
  }
291
302
  if (calld->method != NULL) {
292
- GRPC_MDSTR_UNREF(calld->method);
303
+ GRPC_MDSTR_UNREF(exec_ctx, calld->method);
293
304
  }
294
305
  reset_auth_metadata_context(&calld->auth_md_context);
295
306
  }
296
307
 
297
308
  /* Constructor for channel_data */
298
- static void init_channel_elem(grpc_exec_ctx *exec_ctx,
299
- grpc_channel_element *elem,
300
- grpc_channel_element_args *args) {
309
+ static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
310
+ grpc_channel_element *elem,
311
+ grpc_channel_element_args *args) {
301
312
  grpc_security_connector *sc =
302
313
  grpc_find_security_connector_in_args(args->channel_args);
303
314
  grpc_auth_context *auth_context =
@@ -319,6 +330,7 @@ static void init_channel_elem(grpc_exec_ctx *exec_ctx,
319
330
  sc, "client_auth_filter");
320
331
  chand->auth_context =
321
332
  GRPC_AUTH_CONTEXT_REF(auth_context, "client_auth_filter");
333
+ return GRPC_ERROR_NONE;
322
334
  }
323
335
 
324
336
  /* Destructor for channel data */
@@ -328,19 +340,13 @@ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
328
340
  channel_data *chand = elem->channel_data;
329
341
  grpc_channel_security_connector *sc = chand->security_connector;
330
342
  if (sc != NULL) {
331
- GRPC_SECURITY_CONNECTOR_UNREF(&sc->base, "client_auth_filter");
343
+ GRPC_SECURITY_CONNECTOR_UNREF(exec_ctx, &sc->base, "client_auth_filter");
332
344
  }
333
345
  GRPC_AUTH_CONTEXT_UNREF(chand->auth_context, "client_auth_filter");
334
346
  }
335
347
 
336
- const grpc_channel_filter grpc_client_auth_filter = {auth_start_transport_op,
337
- grpc_channel_next_op,
338
- sizeof(call_data),
339
- init_call_elem,
340
- set_pollset_or_pollset_set,
341
- destroy_call_elem,
342
- sizeof(channel_data),
343
- init_channel_elem,
344
- destroy_channel_elem,
345
- grpc_call_next_get_peer,
346
- "client-auth"};
348
+ const grpc_channel_filter grpc_client_auth_filter = {
349
+ auth_start_transport_op, grpc_channel_next_op, sizeof(call_data),
350
+ init_call_elem, set_pollset_or_pollset_set, destroy_call_elem,
351
+ sizeof(channel_data), init_channel_elem, destroy_channel_elem,
352
+ grpc_call_next_get_peer, grpc_channel_next_get_info, "client-auth"};