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
@@ -0,0 +1,78 @@
1
+ /*
2
+ *
3
+ * Copyright 2016, Google Inc.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions are
8
+ * met:
9
+ *
10
+ * * Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ * * Redistributions in binary form must reproduce the above
13
+ * copyright notice, this list of conditions and the following disclaimer
14
+ * in the documentation and/or other materials provided with the
15
+ * distribution.
16
+ * * Neither the name of Google Inc. nor the names of its
17
+ * contributors may be used to endorse or promote products derived from
18
+ * this software without specific prior written permission.
19
+ *
20
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ */
33
+
34
+ #ifndef GRPC_CORE_LIB_SLICE_PERCENT_ENCODING_H
35
+ #define GRPC_CORE_LIB_SLICE_PERCENT_ENCODING_H
36
+
37
+ /* Percent encoding and decoding of slices.
38
+ Transforms arbitrary strings into safe-for-transmission strings by using
39
+ variants of percent encoding (RFC 3986).
40
+ Two major variants are supplied: one that strictly matches URL encoding,
41
+ and another which applies percent encoding only to non-http2 header
42
+ bytes (the 'compatible' variant) */
43
+
44
+ #include <stdbool.h>
45
+
46
+ #include <grpc/slice.h>
47
+
48
+ /* URL percent encoding spec bitfield (usabel as 'unreserved_bytes' in
49
+ grpc_percent_encode_slice, grpc_strict_percent_decode_slice).
50
+ Flags [A-Za-z0-9-_.~] as unreserved bytes for the percent encoding routines
51
+ */
52
+ extern const uint8_t grpc_url_percent_encoding_unreserved_bytes[256 / 8];
53
+ /* URL percent encoding spec bitfield (usabel as 'unreserved_bytes' in
54
+ grpc_percent_encode_slice, grpc_strict_percent_decode_slice).
55
+ Flags ascii7 non-control characters excluding '%' as unreserved bytes for the
56
+ percent encoding routines */
57
+ extern const uint8_t grpc_compatible_percent_encoding_unreserved_bytes[256 / 8];
58
+
59
+ /* Percent-encode a slice, returning the new slice (this cannot fail):
60
+ unreserved_bytes is a bitfield indicating which bytes are considered
61
+ unreserved and thus do not need percent encoding */
62
+ grpc_slice grpc_percent_encode_slice(grpc_slice slice,
63
+ const uint8_t *unreserved_bytes);
64
+ /* Percent-decode a slice, strictly.
65
+ If the input is legal (contains no unreserved bytes, and legal % encodings),
66
+ returns true and sets *slice_out to the decoded slice.
67
+ If the input is not legal, returns false and leaves *slice_out untouched.
68
+ unreserved_bytes is a bitfield indicating which bytes are considered
69
+ unreserved and thus do not need percent encoding */
70
+ bool grpc_strict_percent_decode_slice(grpc_slice slice_in,
71
+ const uint8_t *unreserved_bytes,
72
+ grpc_slice *slice_out);
73
+ /* Percent-decode a slice, permissively.
74
+ If a % triplet can not be decoded, pass it through verbatim.
75
+ This cannot fail. */
76
+ grpc_slice grpc_permissive_percent_decode_slice(grpc_slice slice_in);
77
+
78
+ #endif /* GRPC_CORE_LIB_SLICE_PERCENT_ENCODING_H */
@@ -31,51 +31,67 @@
31
31
  *
32
32
  */
33
33
 
34
+ #include "src/core/lib/slice/slice_internal.h"
35
+
36
+ #include <grpc/slice.h>
34
37
  #include <grpc/support/alloc.h>
35
38
  #include <grpc/support/log.h>
36
- #include <grpc/support/slice.h>
37
39
 
38
40
  #include <string.h>
39
41
 
40
- gpr_slice gpr_empty_slice(void) {
41
- gpr_slice out;
42
+ #include "src/core/lib/iomgr/exec_ctx.h"
43
+
44
+ grpc_slice gpr_empty_slice(void) {
45
+ grpc_slice out;
42
46
  out.refcount = 0;
43
47
  out.data.inlined.length = 0;
44
48
  return out;
45
49
  }
46
50
 
47
- gpr_slice gpr_slice_ref(gpr_slice slice) {
51
+ grpc_slice grpc_slice_ref_internal(grpc_slice slice) {
48
52
  if (slice.refcount) {
49
53
  slice.refcount->ref(slice.refcount);
50
54
  }
51
55
  return slice;
52
56
  }
53
57
 
54
- void gpr_slice_unref(gpr_slice slice) {
58
+ void grpc_slice_unref_internal(grpc_exec_ctx *exec_ctx, grpc_slice slice) {
55
59
  if (slice.refcount) {
56
- slice.refcount->unref(slice.refcount);
60
+ slice.refcount->unref(exec_ctx, slice.refcount);
57
61
  }
58
62
  }
59
63
 
60
- /* gpr_slice_from_static_string support structure - a refcount that does
64
+ /* Public API */
65
+ grpc_slice grpc_slice_ref(grpc_slice slice) {
66
+ return grpc_slice_ref_internal(slice);
67
+ }
68
+
69
+ /* Public API */
70
+ void grpc_slice_unref(grpc_slice slice) {
71
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
72
+ grpc_slice_unref_internal(&exec_ctx, slice);
73
+ grpc_exec_ctx_finish(&exec_ctx);
74
+ }
75
+
76
+ /* grpc_slice_from_static_string support structure - a refcount that does
61
77
  nothing */
62
- static void noop_ref_or_unref(void *unused) {}
78
+ static void noop_ref(void *unused) {}
79
+ static void noop_unref(grpc_exec_ctx *exec_ctx, void *unused) {}
63
80
 
64
- static gpr_slice_refcount noop_refcount = {noop_ref_or_unref,
65
- noop_ref_or_unref};
81
+ static grpc_slice_refcount noop_refcount = {noop_ref, noop_unref};
66
82
 
67
- gpr_slice gpr_slice_from_static_string(const char *s) {
68
- gpr_slice slice;
83
+ grpc_slice grpc_slice_from_static_string(const char *s) {
84
+ grpc_slice slice;
69
85
  slice.refcount = &noop_refcount;
70
86
  slice.data.refcounted.bytes = (uint8_t *)s;
71
87
  slice.data.refcounted.length = strlen(s);
72
88
  return slice;
73
89
  }
74
90
 
75
- /* gpr_slice_new support structures - we create a refcount object extended
91
+ /* grpc_slice_new support structures - we create a refcount object extended
76
92
  with the user provided data pointer & destroy function */
77
93
  typedef struct new_slice_refcount {
78
- gpr_slice_refcount rc;
94
+ grpc_slice_refcount rc;
79
95
  gpr_refcount refs;
80
96
  void (*user_destroy)(void *);
81
97
  void *user_data;
@@ -86,7 +102,7 @@ static void new_slice_ref(void *p) {
86
102
  gpr_ref(&r->refs);
87
103
  }
88
104
 
89
- static void new_slice_unref(void *p) {
105
+ static void new_slice_unref(grpc_exec_ctx *exec_ctx, void *p) {
90
106
  new_slice_refcount *r = p;
91
107
  if (gpr_unref(&r->refs)) {
92
108
  r->user_destroy(r->user_data);
@@ -94,14 +110,16 @@ static void new_slice_unref(void *p) {
94
110
  }
95
111
  }
96
112
 
97
- gpr_slice gpr_slice_new(void *p, size_t len, void (*destroy)(void *)) {
98
- gpr_slice slice;
113
+ grpc_slice grpc_slice_new_with_user_data(void *p, size_t len,
114
+ void (*destroy)(void *),
115
+ void *user_data) {
116
+ grpc_slice slice;
99
117
  new_slice_refcount *rc = gpr_malloc(sizeof(new_slice_refcount));
100
118
  gpr_ref_init(&rc->refs, 1);
101
119
  rc->rc.ref = new_slice_ref;
102
120
  rc->rc.unref = new_slice_unref;
103
121
  rc->user_destroy = destroy;
104
- rc->user_data = p;
122
+ rc->user_data = user_data;
105
123
 
106
124
  slice.refcount = &rc->rc;
107
125
  slice.data.refcounted.bytes = p;
@@ -109,10 +127,15 @@ gpr_slice gpr_slice_new(void *p, size_t len, void (*destroy)(void *)) {
109
127
  return slice;
110
128
  }
111
129
 
112
- /* gpr_slice_new_with_len support structures - we create a refcount object
130
+ grpc_slice grpc_slice_new(void *p, size_t len, void (*destroy)(void *)) {
131
+ /* Pass "p" to *destroy when the slice is no longer needed. */
132
+ return grpc_slice_new_with_user_data(p, len, destroy, p);
133
+ }
134
+
135
+ /* grpc_slice_new_with_len support structures - we create a refcount object
113
136
  extended with the user provided data pointer & destroy function */
114
137
  typedef struct new_with_len_slice_refcount {
115
- gpr_slice_refcount rc;
138
+ grpc_slice_refcount rc;
116
139
  gpr_refcount refs;
117
140
  void *user_data;
118
141
  size_t user_length;
@@ -124,7 +147,7 @@ static void new_with_len_ref(void *p) {
124
147
  gpr_ref(&r->refs);
125
148
  }
126
149
 
127
- static void new_with_len_unref(void *p) {
150
+ static void new_with_len_unref(grpc_exec_ctx *exec_ctx, void *p) {
128
151
  new_with_len_slice_refcount *r = p;
129
152
  if (gpr_unref(&r->refs)) {
130
153
  r->user_destroy(r->user_data, r->user_length);
@@ -132,9 +155,9 @@ static void new_with_len_unref(void *p) {
132
155
  }
133
156
  }
134
157
 
135
- gpr_slice gpr_slice_new_with_len(void *p, size_t len,
136
- void (*destroy)(void *, size_t)) {
137
- gpr_slice slice;
158
+ grpc_slice grpc_slice_new_with_len(void *p, size_t len,
159
+ void (*destroy)(void *, size_t)) {
160
+ grpc_slice slice;
138
161
  new_with_len_slice_refcount *rc =
139
162
  gpr_malloc(sizeof(new_with_len_slice_refcount));
140
163
  gpr_ref_init(&rc->refs, 1);
@@ -150,18 +173,18 @@ gpr_slice gpr_slice_new_with_len(void *p, size_t len,
150
173
  return slice;
151
174
  }
152
175
 
153
- gpr_slice gpr_slice_from_copied_buffer(const char *source, size_t length) {
154
- gpr_slice slice = gpr_slice_malloc(length);
155
- memcpy(GPR_SLICE_START_PTR(slice), source, length);
176
+ grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t length) {
177
+ grpc_slice slice = grpc_slice_malloc(length);
178
+ memcpy(GRPC_SLICE_START_PTR(slice), source, length);
156
179
  return slice;
157
180
  }
158
181
 
159
- gpr_slice gpr_slice_from_copied_string(const char *source) {
160
- return gpr_slice_from_copied_buffer(source, strlen(source));
182
+ grpc_slice grpc_slice_from_copied_string(const char *source) {
183
+ return grpc_slice_from_copied_buffer(source, strlen(source));
161
184
  }
162
185
 
163
186
  typedef struct {
164
- gpr_slice_refcount base;
187
+ grpc_slice_refcount base;
165
188
  gpr_refcount refs;
166
189
  } malloc_refcount;
167
190
 
@@ -170,15 +193,15 @@ static void malloc_ref(void *p) {
170
193
  gpr_ref(&r->refs);
171
194
  }
172
195
 
173
- static void malloc_unref(void *p) {
196
+ static void malloc_unref(grpc_exec_ctx *exec_ctx, void *p) {
174
197
  malloc_refcount *r = p;
175
198
  if (gpr_unref(&r->refs)) {
176
199
  gpr_free(r);
177
200
  }
178
201
  }
179
202
 
180
- gpr_slice gpr_slice_malloc(size_t length) {
181
- gpr_slice slice;
203
+ grpc_slice grpc_slice_malloc(size_t length) {
204
+ grpc_slice slice;
182
205
 
183
206
  if (length > sizeof(slice.data.inlined.bytes)) {
184
207
  /* Memory layout used by the slice created here:
@@ -214,8 +237,8 @@ gpr_slice gpr_slice_malloc(size_t length) {
214
237
  return slice;
215
238
  }
216
239
 
217
- gpr_slice gpr_slice_sub_no_ref(gpr_slice source, size_t begin, size_t end) {
218
- gpr_slice subset;
240
+ grpc_slice grpc_slice_sub_no_ref(grpc_slice source, size_t begin, size_t end) {
241
+ grpc_slice subset;
219
242
 
220
243
  GPR_ASSERT(end >= begin);
221
244
 
@@ -239,24 +262,24 @@ gpr_slice gpr_slice_sub_no_ref(gpr_slice source, size_t begin, size_t end) {
239
262
  return subset;
240
263
  }
241
264
 
242
- gpr_slice gpr_slice_sub(gpr_slice source, size_t begin, size_t end) {
243
- gpr_slice subset;
265
+ grpc_slice grpc_slice_sub(grpc_slice source, size_t begin, size_t end) {
266
+ grpc_slice subset;
244
267
 
245
268
  if (end - begin <= sizeof(subset.data.inlined.bytes)) {
246
269
  subset.refcount = NULL;
247
270
  subset.data.inlined.length = (uint8_t)(end - begin);
248
- memcpy(subset.data.inlined.bytes, GPR_SLICE_START_PTR(source) + begin,
271
+ memcpy(subset.data.inlined.bytes, GRPC_SLICE_START_PTR(source) + begin,
249
272
  end - begin);
250
273
  } else {
251
- subset = gpr_slice_sub_no_ref(source, begin, end);
274
+ subset = grpc_slice_sub_no_ref(source, begin, end);
252
275
  /* Bump the refcount */
253
276
  subset.refcount->ref(subset.refcount);
254
277
  }
255
278
  return subset;
256
279
  }
257
280
 
258
- gpr_slice gpr_slice_split_tail(gpr_slice *source, size_t split) {
259
- gpr_slice tail;
281
+ grpc_slice grpc_slice_split_tail(grpc_slice *source, size_t split) {
282
+ grpc_slice tail;
260
283
 
261
284
  if (source->refcount == NULL) {
262
285
  /* inlined data, copy it out */
@@ -290,8 +313,8 @@ gpr_slice gpr_slice_split_tail(gpr_slice *source, size_t split) {
290
313
  return tail;
291
314
  }
292
315
 
293
- gpr_slice gpr_slice_split_head(gpr_slice *source, size_t split) {
294
- gpr_slice head;
316
+ grpc_slice grpc_slice_split_head(grpc_slice *source, size_t split) {
317
+ grpc_slice head;
295
318
 
296
319
  if (source->refcount == NULL) {
297
320
  GPR_ASSERT(source->data.inlined.length >= split);
@@ -328,16 +351,24 @@ gpr_slice gpr_slice_split_head(gpr_slice *source, size_t split) {
328
351
  return head;
329
352
  }
330
353
 
331
- int gpr_slice_cmp(gpr_slice a, gpr_slice b) {
332
- int d = (int)(GPR_SLICE_LENGTH(a) - GPR_SLICE_LENGTH(b));
354
+ int grpc_slice_cmp(grpc_slice a, grpc_slice b) {
355
+ int d = (int)(GRPC_SLICE_LENGTH(a) - GRPC_SLICE_LENGTH(b));
333
356
  if (d != 0) return d;
334
- return memcmp(GPR_SLICE_START_PTR(a), GPR_SLICE_START_PTR(b),
335
- GPR_SLICE_LENGTH(a));
357
+ return memcmp(GRPC_SLICE_START_PTR(a), GRPC_SLICE_START_PTR(b),
358
+ GRPC_SLICE_LENGTH(a));
336
359
  }
337
360
 
338
- int gpr_slice_str_cmp(gpr_slice a, const char *b) {
361
+ int grpc_slice_str_cmp(grpc_slice a, const char *b) {
339
362
  size_t b_length = strlen(b);
340
- int d = (int)(GPR_SLICE_LENGTH(a) - b_length);
363
+ int d = (int)(GRPC_SLICE_LENGTH(a) - b_length);
341
364
  if (d != 0) return d;
342
- return memcmp(GPR_SLICE_START_PTR(a), b, b_length);
365
+ return memcmp(GRPC_SLICE_START_PTR(a), b, b_length);
366
+ }
367
+
368
+ int grpc_slice_is_equivalent(grpc_slice a, grpc_slice b) {
369
+ if (a.refcount == NULL || b.refcount == NULL) {
370
+ return grpc_slice_cmp(a, b) == 0;
371
+ }
372
+ return a.data.refcounted.length == b.data.refcounted.length &&
373
+ a.data.refcounted.bytes == b.data.refcounted.bytes;
343
374
  }
@@ -31,8 +31,8 @@
31
31
  *
32
32
  */
33
33
 
34
+ #include <grpc/slice_buffer.h>
34
35
  #include <grpc/support/port_platform.h>
35
- #include <grpc/support/slice_buffer.h>
36
36
 
37
37
  #include <string.h>
38
38
 
@@ -40,38 +40,47 @@
40
40
  #include <grpc/support/log.h>
41
41
  #include <grpc/support/useful.h>
42
42
 
43
+ #include "src/core/lib/slice/slice_internal.h"
44
+
43
45
  /* grow a buffer; requires GRPC_SLICE_BUFFER_INLINE_ELEMENTS > 1 */
44
46
  #define GROW(x) (3 * (x) / 2)
45
47
 
46
- static void maybe_embiggen(gpr_slice_buffer *sb) {
48
+ static void maybe_embiggen(grpc_slice_buffer *sb) {
47
49
  if (sb->count == sb->capacity) {
48
50
  sb->capacity = GROW(sb->capacity);
49
51
  GPR_ASSERT(sb->capacity > sb->count);
50
52
  if (sb->slices == sb->inlined) {
51
- sb->slices = gpr_malloc(sb->capacity * sizeof(gpr_slice));
52
- memcpy(sb->slices, sb->inlined, sb->count * sizeof(gpr_slice));
53
+ sb->slices = gpr_malloc(sb->capacity * sizeof(grpc_slice));
54
+ memcpy(sb->slices, sb->inlined, sb->count * sizeof(grpc_slice));
53
55
  } else {
54
- sb->slices = gpr_realloc(sb->slices, sb->capacity * sizeof(gpr_slice));
56
+ sb->slices = gpr_realloc(sb->slices, sb->capacity * sizeof(grpc_slice));
55
57
  }
56
58
  }
57
59
  }
58
60
 
59
- void gpr_slice_buffer_init(gpr_slice_buffer *sb) {
61
+ void grpc_slice_buffer_init(grpc_slice_buffer *sb) {
60
62
  sb->count = 0;
61
63
  sb->length = 0;
62
64
  sb->capacity = GRPC_SLICE_BUFFER_INLINE_ELEMENTS;
63
65
  sb->slices = sb->inlined;
64
66
  }
65
67
 
66
- void gpr_slice_buffer_destroy(gpr_slice_buffer *sb) {
67
- gpr_slice_buffer_reset_and_unref(sb);
68
+ void grpc_slice_buffer_destroy_internal(grpc_exec_ctx *exec_ctx,
69
+ grpc_slice_buffer *sb) {
70
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, sb);
68
71
  if (sb->slices != sb->inlined) {
69
72
  gpr_free(sb->slices);
70
73
  }
71
74
  }
72
75
 
73
- uint8_t *gpr_slice_buffer_tiny_add(gpr_slice_buffer *sb, size_t n) {
74
- gpr_slice *back;
76
+ void grpc_slice_buffer_destroy(grpc_slice_buffer *sb) {
77
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
78
+ grpc_slice_buffer_destroy_internal(&exec_ctx, sb);
79
+ grpc_exec_ctx_finish(&exec_ctx);
80
+ }
81
+
82
+ uint8_t *grpc_slice_buffer_tiny_add(grpc_slice_buffer *sb, size_t n) {
83
+ grpc_slice *back;
75
84
  uint8_t *out;
76
85
 
77
86
  sb->length += n;
@@ -94,16 +103,16 @@ add_new:
94
103
  return back->data.inlined.bytes;
95
104
  }
96
105
 
97
- size_t gpr_slice_buffer_add_indexed(gpr_slice_buffer *sb, gpr_slice s) {
106
+ size_t grpc_slice_buffer_add_indexed(grpc_slice_buffer *sb, grpc_slice s) {
98
107
  size_t out = sb->count;
99
108
  maybe_embiggen(sb);
100
109
  sb->slices[out] = s;
101
- sb->length += GPR_SLICE_LENGTH(s);
110
+ sb->length += GRPC_SLICE_LENGTH(s);
102
111
  sb->count = out + 1;
103
112
  return out;
104
113
  }
105
114
 
106
- void gpr_slice_buffer_add(gpr_slice_buffer *sb, gpr_slice s) {
115
+ void grpc_slice_buffer_add(grpc_slice_buffer *sb, grpc_slice s) {
107
116
  size_t n = sb->count;
108
117
  /* if both the last slice in the slice buffer and the slice being added
109
118
  are inlined (that is, that they carry their data inside the slice data
@@ -111,19 +120,20 @@ void gpr_slice_buffer_add(gpr_slice_buffer *sb, gpr_slice s) {
111
120
  into the back slice, preventing many small slices being passed into
112
121
  writes */
113
122
  if (!s.refcount && n) {
114
- gpr_slice *back = &sb->slices[n - 1];
115
- if (!back->refcount && back->data.inlined.length < GPR_SLICE_INLINED_SIZE) {
123
+ grpc_slice *back = &sb->slices[n - 1];
124
+ if (!back->refcount &&
125
+ back->data.inlined.length < GRPC_SLICE_INLINED_SIZE) {
116
126
  if (s.data.inlined.length + back->data.inlined.length <=
117
- GPR_SLICE_INLINED_SIZE) {
127
+ GRPC_SLICE_INLINED_SIZE) {
118
128
  memcpy(back->data.inlined.bytes + back->data.inlined.length,
119
129
  s.data.inlined.bytes, s.data.inlined.length);
120
130
  back->data.inlined.length =
121
131
  (uint8_t)(back->data.inlined.length + s.data.inlined.length);
122
132
  } else {
123
- size_t cp1 = GPR_SLICE_INLINED_SIZE - back->data.inlined.length;
133
+ size_t cp1 = GRPC_SLICE_INLINED_SIZE - back->data.inlined.length;
124
134
  memcpy(back->data.inlined.bytes + back->data.inlined.length,
125
135
  s.data.inlined.bytes, cp1);
126
- back->data.inlined.length = GPR_SLICE_INLINED_SIZE;
136
+ back->data.inlined.length = GRPC_SLICE_INLINED_SIZE;
127
137
  maybe_embiggen(sb);
128
138
  back = &sb->slices[n];
129
139
  sb->count = n + 1;
@@ -136,35 +146,42 @@ void gpr_slice_buffer_add(gpr_slice_buffer *sb, gpr_slice s) {
136
146
  return; /* early out */
137
147
  }
138
148
  }
139
- gpr_slice_buffer_add_indexed(sb, s);
149
+ grpc_slice_buffer_add_indexed(sb, s);
140
150
  }
141
151
 
142
- void gpr_slice_buffer_addn(gpr_slice_buffer *sb, gpr_slice *s, size_t n) {
152
+ void grpc_slice_buffer_addn(grpc_slice_buffer *sb, grpc_slice *s, size_t n) {
143
153
  size_t i;
144
154
  for (i = 0; i < n; i++) {
145
- gpr_slice_buffer_add(sb, s[i]);
155
+ grpc_slice_buffer_add(sb, s[i]);
146
156
  }
147
157
  }
148
158
 
149
- void gpr_slice_buffer_pop(gpr_slice_buffer *sb) {
159
+ void grpc_slice_buffer_pop(grpc_slice_buffer *sb) {
150
160
  if (sb->count != 0) {
151
161
  size_t count = --sb->count;
152
- sb->length -= GPR_SLICE_LENGTH(sb->slices[count]);
162
+ sb->length -= GRPC_SLICE_LENGTH(sb->slices[count]);
153
163
  }
154
164
  }
155
165
 
156
- void gpr_slice_buffer_reset_and_unref(gpr_slice_buffer *sb) {
166
+ void grpc_slice_buffer_reset_and_unref_internal(grpc_exec_ctx *exec_ctx,
167
+ grpc_slice_buffer *sb) {
157
168
  size_t i;
158
169
 
159
170
  for (i = 0; i < sb->count; i++) {
160
- gpr_slice_unref(sb->slices[i]);
171
+ grpc_slice_unref_internal(exec_ctx, sb->slices[i]);
161
172
  }
162
173
 
163
174
  sb->count = 0;
164
175
  sb->length = 0;
165
176
  }
166
177
 
167
- void gpr_slice_buffer_swap(gpr_slice_buffer *a, gpr_slice_buffer *b) {
178
+ void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer *sb) {
179
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
180
+ grpc_slice_buffer_reset_and_unref_internal(&exec_ctx, sb);
181
+ grpc_exec_ctx_finish(&exec_ctx);
182
+ }
183
+
184
+ void grpc_slice_buffer_swap(grpc_slice_buffer *a, grpc_slice_buffer *b) {
168
185
  GPR_SWAP(size_t, a->count, b->count);
169
186
  GPR_SWAP(size_t, a->capacity, b->capacity);
170
187
  GPR_SWAP(size_t, a->length, b->length);
@@ -172,111 +189,112 @@ void gpr_slice_buffer_swap(gpr_slice_buffer *a, gpr_slice_buffer *b) {
172
189
  if (a->slices == a->inlined) {
173
190
  if (b->slices == b->inlined) {
174
191
  /* swap contents of inlined buffer */
175
- gpr_slice temp[GRPC_SLICE_BUFFER_INLINE_ELEMENTS];
176
- memcpy(temp, a->slices, b->count * sizeof(gpr_slice));
177
- memcpy(a->slices, b->slices, a->count * sizeof(gpr_slice));
178
- memcpy(b->slices, temp, b->count * sizeof(gpr_slice));
192
+ grpc_slice temp[GRPC_SLICE_BUFFER_INLINE_ELEMENTS];
193
+ memcpy(temp, a->slices, b->count * sizeof(grpc_slice));
194
+ memcpy(a->slices, b->slices, a->count * sizeof(grpc_slice));
195
+ memcpy(b->slices, temp, b->count * sizeof(grpc_slice));
179
196
  } else {
180
197
  /* a is inlined, b is not - copy a inlined into b, fix pointers */
181
198
  a->slices = b->slices;
182
199
  b->slices = b->inlined;
183
- memcpy(b->slices, a->inlined, b->count * sizeof(gpr_slice));
200
+ memcpy(b->slices, a->inlined, b->count * sizeof(grpc_slice));
184
201
  }
185
202
  } else if (b->slices == b->inlined) {
186
203
  /* b is inlined, a is not - copy b inlined int a, fix pointers */
187
204
  b->slices = a->slices;
188
205
  a->slices = a->inlined;
189
- memcpy(a->slices, b->inlined, a->count * sizeof(gpr_slice));
206
+ memcpy(a->slices, b->inlined, a->count * sizeof(grpc_slice));
190
207
  } else {
191
208
  /* no inlining: easy swap */
192
- GPR_SWAP(gpr_slice *, a->slices, b->slices);
209
+ GPR_SWAP(grpc_slice *, a->slices, b->slices);
193
210
  }
194
211
  }
195
212
 
196
- void gpr_slice_buffer_move_into(gpr_slice_buffer *src, gpr_slice_buffer *dst) {
213
+ void grpc_slice_buffer_move_into(grpc_slice_buffer *src,
214
+ grpc_slice_buffer *dst) {
197
215
  /* anything to move? */
198
216
  if (src->count == 0) {
199
217
  return;
200
218
  }
201
219
  /* anything in dst? */
202
220
  if (dst->count == 0) {
203
- gpr_slice_buffer_swap(src, dst);
221
+ grpc_slice_buffer_swap(src, dst);
204
222
  return;
205
223
  }
206
224
  /* both buffers have data - copy, and reset src */
207
- gpr_slice_buffer_addn(dst, src->slices, src->count);
225
+ grpc_slice_buffer_addn(dst, src->slices, src->count);
208
226
  src->count = 0;
209
227
  src->length = 0;
210
228
  }
211
229
 
212
- void gpr_slice_buffer_move_first(gpr_slice_buffer *src, size_t n,
213
- gpr_slice_buffer *dst) {
230
+ void grpc_slice_buffer_move_first(grpc_slice_buffer *src, size_t n,
231
+ grpc_slice_buffer *dst) {
214
232
  size_t src_idx;
215
233
  size_t output_len = dst->length + n;
216
234
  size_t new_input_len = src->length - n;
217
235
  GPR_ASSERT(src->length >= n);
218
236
  if (src->length == n) {
219
- gpr_slice_buffer_move_into(src, dst);
237
+ grpc_slice_buffer_move_into(src, dst);
220
238
  return;
221
239
  }
222
240
  src_idx = 0;
223
241
  while (src_idx < src->capacity) {
224
- gpr_slice slice = src->slices[src_idx];
225
- size_t slice_len = GPR_SLICE_LENGTH(slice);
242
+ grpc_slice slice = src->slices[src_idx];
243
+ size_t slice_len = GRPC_SLICE_LENGTH(slice);
226
244
  if (n > slice_len) {
227
- gpr_slice_buffer_add(dst, slice);
245
+ grpc_slice_buffer_add(dst, slice);
228
246
  n -= slice_len;
229
247
  src_idx++;
230
248
  } else if (n == slice_len) {
231
- gpr_slice_buffer_add(dst, slice);
249
+ grpc_slice_buffer_add(dst, slice);
232
250
  src_idx++;
233
251
  break;
234
252
  } else { /* n < slice_len */
235
- src->slices[src_idx] = gpr_slice_split_tail(&slice, n);
236
- GPR_ASSERT(GPR_SLICE_LENGTH(slice) == n);
237
- GPR_ASSERT(GPR_SLICE_LENGTH(src->slices[src_idx]) == slice_len - n);
238
- gpr_slice_buffer_add(dst, slice);
253
+ src->slices[src_idx] = grpc_slice_split_tail(&slice, n);
254
+ GPR_ASSERT(GRPC_SLICE_LENGTH(slice) == n);
255
+ GPR_ASSERT(GRPC_SLICE_LENGTH(src->slices[src_idx]) == slice_len - n);
256
+ grpc_slice_buffer_add(dst, slice);
239
257
  break;
240
258
  }
241
259
  }
242
260
  GPR_ASSERT(dst->length == output_len);
243
261
  memmove(src->slices, src->slices + src_idx,
244
- sizeof(gpr_slice) * (src->count - src_idx));
262
+ sizeof(grpc_slice) * (src->count - src_idx));
245
263
  src->count -= src_idx;
246
264
  src->length = new_input_len;
247
265
  GPR_ASSERT(src->count > 0);
248
266
  }
249
267
 
250
- void gpr_slice_buffer_trim_end(gpr_slice_buffer *sb, size_t n,
251
- gpr_slice_buffer *garbage) {
268
+ void grpc_slice_buffer_trim_end(grpc_slice_buffer *sb, size_t n,
269
+ grpc_slice_buffer *garbage) {
252
270
  GPR_ASSERT(n <= sb->length);
253
271
  sb->length -= n;
254
272
  for (;;) {
255
273
  size_t idx = sb->count - 1;
256
- gpr_slice slice = sb->slices[idx];
257
- size_t slice_len = GPR_SLICE_LENGTH(slice);
274
+ grpc_slice slice = sb->slices[idx];
275
+ size_t slice_len = GRPC_SLICE_LENGTH(slice);
258
276
  if (slice_len > n) {
259
- sb->slices[idx] = gpr_slice_split_head(&slice, slice_len - n);
260
- gpr_slice_buffer_add_indexed(garbage, slice);
277
+ sb->slices[idx] = grpc_slice_split_head(&slice, slice_len - n);
278
+ grpc_slice_buffer_add_indexed(garbage, slice);
261
279
  return;
262
280
  } else if (slice_len == n) {
263
- gpr_slice_buffer_add_indexed(garbage, slice);
281
+ grpc_slice_buffer_add_indexed(garbage, slice);
264
282
  sb->count = idx;
265
283
  return;
266
284
  } else {
267
- gpr_slice_buffer_add_indexed(garbage, slice);
285
+ grpc_slice_buffer_add_indexed(garbage, slice);
268
286
  n -= slice_len;
269
287
  sb->count = idx;
270
288
  }
271
289
  }
272
290
  }
273
291
 
274
- gpr_slice gpr_slice_buffer_take_first(gpr_slice_buffer *sb) {
275
- gpr_slice slice;
292
+ grpc_slice grpc_slice_buffer_take_first(grpc_slice_buffer *sb) {
293
+ grpc_slice slice;
276
294
  GPR_ASSERT(sb->count > 0);
277
295
  slice = sb->slices[0];
278
- memmove(&sb->slices[0], &sb->slices[1], (sb->count - 1) * sizeof(gpr_slice));
296
+ memmove(&sb->slices[0], &sb->slices[1], (sb->count - 1) * sizeof(grpc_slice));
279
297
  sb->count--;
280
- sb->length -= GPR_SLICE_LENGTH(slice);
298
+ sb->length -= GRPC_SLICE_LENGTH(slice);
281
299
  return slice;
282
300
  }