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
@@ -90,7 +90,6 @@
90
90
  #endif
91
91
  #define GPR_PLATFORM_STRING "windows"
92
92
  #define GPR_WINDOWS 1
93
- #define GPR_WINSOCK_SOCKET 1
94
93
  #define GPR_WINDOWS_SUBPROCESS 1
95
94
  #define GPR_WINDOWS_ENV
96
95
  #ifdef __MSYS__
@@ -124,24 +123,14 @@
124
123
  #define GPR_GCC_TLS 1
125
124
  #define GPR_LINUX 1
126
125
  #define GPR_LINUX_LOG 1
127
- #define GPR_POSIX_SOCKET 1
128
- #define GPR_POSIX_WAKEUP_FD 1
129
- #define GPR_POSIX_SOCKETADDR 1
130
- #define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
131
- #define GPR_POSIX_SOCKETUTILS 1
132
126
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
133
- #define GPR_HAVE_UNIX_SOCKET 1
134
- #define GPR_HAVE_IP_PKTINFO 1
135
- #define GPR_HAVE_IPV6_RECVPKTINFO 1
136
127
  #define GPR_LINUX_ENV 1
137
- #define GPR_POSIX_FILE 1
138
128
  #define GPR_POSIX_TMPFILE 1
139
129
  #define GPR_POSIX_STRING 1
140
130
  #define GPR_POSIX_SUBPROCESS 1
141
131
  #define GPR_POSIX_SYNC 1
142
132
  #define GPR_POSIX_TIME 1
143
133
  #define GPR_GETPID_IN_UNISTD_H 1
144
- #define GPR_HAVE_MSG_NOSIGNAL 1
145
134
  #ifdef _LP64
146
135
  #define GPR_ARCH_64 1
147
136
  #else /* _LP64 */
@@ -155,29 +144,18 @@
155
144
  #else /* _LP64 */
156
145
  #define GPR_ARCH_32 1
157
146
  #endif /* _LP64 */
158
- #define GPR_CPU_LINUX 1
147
+ #define GPR_CPU_POSIX 1
159
148
  #define GPR_GCC_SYNC 1
160
149
  #define GPR_GCC_TLS 1
161
- #define GPR_POSIX_MULTIPOLL_WITH_POLL 1
162
- #define GPR_POSIX_WAKEUP_FD 1
163
- #define GPR_LINUX_EVENTFD 1
164
- #define GPR_POSIX_SOCKET 1
165
- #define GPR_POSIX_SOCKETADDR 1
166
- #define GPR_POSIX_SOCKETUTILS 1
167
150
  #define GPR_POSIX_ENV 1
168
- #define GPR_POSIX_FILE 1
169
151
  #define GPR_POSIX_TMPFILE 1
170
- #define GPR_POSIX_LOG
152
+ #define GPR_ANDROID_LOG 1
171
153
  #define GPR_POSIX_STRING 1
172
154
  #define GPR_POSIX_SUBPROCESS 1
173
155
  #define GPR_POSIX_SYNC 1
174
156
  #define GPR_POSIX_TIME 1
175
157
  #define GPR_GETPID_IN_UNISTD_H 1
176
158
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
177
- #define GPR_HAVE_MSG_NOSIGNAL 1
178
- #define GPR_HAVE_UNIX_SOCKET 1
179
- #define GPR_HAVE_IP_PKTINFO 1
180
- #define GPR_HAVE_IPV6_RECVPKTINFO 1
181
159
  #elif defined(__linux__)
182
160
  #define GPR_POSIX_CRASH_HANDLER 1
183
161
  #define GPR_PLATFORM_STRING "linux"
@@ -196,49 +174,25 @@
196
174
  #define GPR_GCC_TLS 1
197
175
  #define GPR_LINUX 1
198
176
  #define GPR_LINUX_LOG
199
- #define GPR_LINUX_MULTIPOLL_WITH_EPOLL 1
200
- #define GPR_POSIX_WAKEUP_FD 1
201
- #define GPR_POSIX_SOCKET 1
202
- #define GPR_POSIX_SOCKETADDR 1
203
177
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
204
- #define GPR_HAVE_UNIX_SOCKET 1
205
- #define GPR_HAVE_IP_PKTINFO 1
206
- #define GPR_HAVE_IPV6_RECVPKTINFO 1
207
- #ifdef __GLIBC_PREREQ
208
- #if __GLIBC_PREREQ(2, 9)
209
- #define GPR_LINUX_EVENTFD 1
210
- #define GPR_LINUX_EPOLL 1
211
- #endif
212
- #if __GLIBC_PREREQ(2, 10)
213
- #define GPR_LINUX_SOCKETUTILS 1
214
- #endif
215
- #endif
216
178
  #define GPR_LINUX_ENV 1
217
- #ifndef GPR_LINUX_EVENTFD
218
- #define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
219
- #endif
220
- #ifndef GPR_LINUX_SOCKETUTILS
221
- #define GPR_POSIX_SOCKETUTILS
222
- #endif
223
- #define GPR_POSIX_FILE 1
224
179
  #define GPR_POSIX_TMPFILE 1
225
180
  #define GPR_POSIX_STRING 1
226
181
  #define GPR_POSIX_SUBPROCESS 1
227
182
  #define GPR_POSIX_SYNC 1
228
183
  #define GPR_POSIX_TIME 1
229
184
  #define GPR_GETPID_IN_UNISTD_H 1
230
- #define GPR_HAVE_MSG_NOSIGNAL 1
231
185
  #ifdef _LP64
232
186
  #define GPR_ARCH_64 1
233
187
  #else /* _LP64 */
234
188
  #define GPR_ARCH_32 1
235
189
  #endif /* _LP64 */
236
190
  #elif defined(__APPLE__)
191
+ #include <Availability.h>
237
192
  #include <TargetConditionals.h>
238
193
  #ifndef _BSD_SOURCE
239
194
  #define _BSD_SOURCE
240
195
  #endif
241
- #define GPR_MSG_IOVLEN_TYPE int
242
196
  #if TARGET_OS_IPHONE
243
197
  #define GPR_FORBID_UNREACHABLE_CODE 1
244
198
  #define GPR_PLATFORM_STRING "ios"
@@ -246,20 +200,24 @@
246
200
  #define GPR_PTHREAD_TLS 1
247
201
  #else /* TARGET_OS_IPHONE */
248
202
  #define GPR_PLATFORM_STRING "osx"
203
+ #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
204
+ #if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7
205
+ #define GPR_CPU_IPHONE 1
206
+ #define GPR_PTHREAD_TLS 1
207
+ #else /* __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7 */
249
208
  #define GPR_CPU_POSIX 1
250
209
  #define GPR_GCC_TLS 1
210
+ #endif
211
+ #else /* __MAC_OS_X_VERSION_MIN_REQUIRED */
212
+ #define GPR_CPU_POSIX 1
213
+ #define GPR_GCC_TLS 1
214
+ #endif
251
215
  #define GPR_POSIX_CRASH_HANDLER 1
252
216
  #endif
217
+ #define GPR_APPLE 1
253
218
  #define GPR_GCC_ATOMIC 1
254
219
  #define GPR_POSIX_LOG 1
255
- #define GPR_POSIX_MULTIPOLL_WITH_POLL 1
256
- #define GPR_POSIX_WAKEUP_FD 1
257
- #define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
258
- #define GPR_POSIX_SOCKET 1
259
- #define GPR_POSIX_SOCKETADDR 1
260
- #define GPR_POSIX_SOCKETUTILS 1
261
220
  #define GPR_POSIX_ENV 1
262
- #define GPR_POSIX_FILE 1
263
221
  #define GPR_POSIX_TMPFILE 1
264
222
  #define GPR_POSIX_STRING 1
265
223
  #define GPR_POSIX_SUBPROCESS 1
@@ -267,9 +225,6 @@
267
225
  #define GPR_POSIX_TIME 1
268
226
  #define GPR_GETPID_IN_UNISTD_H 1
269
227
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
270
- #define GPR_HAVE_SO_NOSIGPIPE 1
271
- #define GPR_HAVE_UNIX_SOCKET 1
272
- #define GPR_HAVE_IP_PKTINFO 1
273
228
  #ifdef _LP64
274
229
  #define GPR_ARCH_64 1
275
230
  #else /* _LP64 */
@@ -280,18 +235,12 @@
280
235
  #ifndef _BSD_SOURCE
281
236
  #define _BSD_SOURCE
282
237
  #endif
238
+ #define GPR_FREEBSD 1
283
239
  #define GPR_CPU_POSIX 1
284
240
  #define GPR_GCC_ATOMIC 1
285
241
  #define GPR_GCC_TLS 1
286
242
  #define GPR_POSIX_LOG 1
287
- #define GPR_POSIX_MULTIPOLL_WITH_POLL 1
288
- #define GPR_POSIX_WAKEUP_FD 1
289
- #define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
290
- #define GPR_POSIX_SOCKET 1
291
- #define GPR_POSIX_SOCKETADDR 1
292
- #define GPR_POSIX_SOCKETUTILS 1
293
243
  #define GPR_POSIX_ENV 1
294
- #define GPR_POSIX_FILE 1
295
244
  #define GPR_POSIX_TMPFILE 1
296
245
  #define GPR_POSIX_STRING 1
297
246
  #define GPR_POSIX_SUBPROCESS 1
@@ -299,10 +248,6 @@
299
248
  #define GPR_POSIX_TIME 1
300
249
  #define GPR_GETPID_IN_UNISTD_H 1
301
250
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
302
- #define GPR_HAVE_SO_NOSIGPIPE 1
303
- #define GPR_HAVE_UNIX_SOCKET 1
304
- #define GPR_HAVE_IP_PKTINFO 1
305
- #define GPR_HAVE_IPV6_RECVPKTINFO 1
306
251
  #ifdef _LP64
307
252
  #define GPR_ARCH_64 1
308
253
  #else /* _LP64 */
@@ -319,18 +264,12 @@
319
264
  #ifndef _GNU_SOURCE
320
265
  #define _GNU_SOURCE
321
266
  #endif
267
+ #define GPR_NACL 1
322
268
  #define GPR_CPU_POSIX 1
323
269
  #define GPR_GCC_ATOMIC 1
324
270
  #define GPR_GCC_TLS 1
325
271
  #define GPR_POSIX_LOG 1
326
- #define GPR_POSIX_MULTIPOLL_WITH_POLL 1
327
- #define GPR_POSIX_WAKEUP_FD 1
328
- #define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
329
- #define GPR_POSIX_SOCKET 1
330
- #define GPR_POSIX_SOCKETADDR 1
331
- #define GPR_POSIX_SOCKETUTILS 1
332
272
  #define GPR_POSIX_ENV 1
333
- #define GPR_POSIX_FILE 1
334
273
  #define GPR_POSIX_TMPFILE 1
335
274
  #define GPR_POSIX_STRING 1
336
275
  #define GPR_POSIX_SUBPROCESS 1
@@ -358,6 +297,10 @@
358
297
  #endif
359
298
 
360
299
  #ifdef _MSC_VER
300
+ #ifdef _PYTHON_MSVC
301
+ // The Python 3.5 Windows runtime is missing InetNtop
302
+ #define GPR_WIN_INET_NTOP
303
+ #endif // _PYTHON_MSVC
361
304
  #if _MSC_VER < 1700
362
305
  typedef __int8 int8_t;
363
306
  typedef __int16 int16_t;
@@ -411,16 +354,6 @@ typedef unsigned __int64 uint64_t;
411
354
  #error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM
412
355
  #endif
413
356
 
414
- #if defined(GPR_POSIX_MULTIPOLL_WITH_POLL) && !defined(GPR_POSIX_SOCKET)
415
- #error Must define GPR_POSIX_SOCKET to use GPR_POSIX_MULTIPOLL_WITH_POLL
416
- #endif
417
-
418
- #if defined(GPR_POSIX_SOCKET) + defined(GPR_WINSOCK_SOCKET) + \
419
- defined(GPR_CUSTOM_SOCKET) != \
420
- 1
421
- #error Must define exactly one of GPR_POSIX_SOCKET, GPR_WINSOCK_SOCKET, GPR_CUSTOM_SOCKET
422
- #endif
423
-
424
357
  #if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \
425
358
  defined(GPR_CUSTOM_TLS) != \
426
359
  1
@@ -432,21 +365,21 @@ typedef unsigned __int64 uint64_t;
432
365
  #define GPR_MAX_ALIGNMENT 16
433
366
 
434
367
  #ifndef GRPC_MUST_USE_RESULT
435
- #ifdef __GNUC__
368
+ #if defined(__GNUC__) && !defined(__MINGW32__)
436
369
  #define GRPC_MUST_USE_RESULT __attribute__((warn_unused_result))
437
370
  #else
438
371
  #define GRPC_MUST_USE_RESULT
439
372
  #endif
440
373
  #endif
441
374
 
442
- #ifndef GPRC_PRINT_FORMAT_CHECK
375
+ #ifndef GPR_PRINT_FORMAT_CHECK
443
376
  #ifdef __GNUC__
444
- #define GPRC_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \
377
+ #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \
445
378
  __attribute__((format(printf, FORMAT_STR, ARGS)))
446
379
  #else
447
- #define GPRC_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS)
380
+ #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS)
448
381
  #endif
449
- #endif /* GPRC_PRINT_FORMAT_CHECK */
382
+ #endif /* GPR_PRINT_FORMAT_CHECK */
450
383
 
451
384
  #if GPR_FORBID_UNREACHABLE_CODE
452
385
  #define GPR_UNREACHABLE_CODE(STATEMENT)
@@ -34,13 +34,11 @@
34
34
  #ifndef GRPC_IMPL_CODEGEN_SLICE_H
35
35
  #define GRPC_IMPL_CODEGEN_SLICE_H
36
36
 
37
- #include <grpc/impl/codegen/sync.h>
38
-
39
37
  #include <stddef.h>
38
+ #include <stdint.h>
40
39
 
41
- #ifdef __cplusplus
42
- extern "C" {
43
- #endif
40
+ #include <grpc/impl/codegen/exec_ctx_fwd.h>
41
+ #include <grpc/impl/codegen/gpr_slice.h>
44
42
 
45
43
  /* Slice API
46
44
 
@@ -55,29 +53,29 @@ extern "C" {
55
53
  reference ownership semantics (who should call unref?) and mutability
56
54
  constraints (is the callee allowed to modify the slice?) */
57
55
 
58
- /* Reference count container for gpr_slice. Contains function pointers to
56
+ /* Reference count container for grpc_slice. Contains function pointers to
59
57
  increment and decrement reference counts. Implementations should cleanup
60
58
  when the reference count drops to zero.
61
- Typically client code should not touch this, and use gpr_slice_malloc,
62
- gpr_slice_new, or gpr_slice_new_with_len instead. */
63
- typedef struct gpr_slice_refcount {
59
+ Typically client code should not touch this, and use grpc_slice_malloc,
60
+ grpc_slice_new, or grpc_slice_new_with_len instead. */
61
+ typedef struct grpc_slice_refcount {
64
62
  void (*ref)(void *);
65
- void (*unref)(void *);
66
- } gpr_slice_refcount;
63
+ void (*unref)(grpc_exec_ctx *exec_ctx, void *);
64
+ } grpc_slice_refcount;
67
65
 
68
- #define GPR_SLICE_INLINED_SIZE (sizeof(size_t) + sizeof(uint8_t *) - 1)
66
+ #define GRPC_SLICE_INLINED_SIZE (sizeof(size_t) + sizeof(uint8_t *) - 1)
69
67
 
70
- /* A gpr_slice s, if initialized, represents the byte range
68
+ /* A grpc_slice s, if initialized, represents the byte range
71
69
  s.bytes[0..s.length-1].
72
70
 
73
71
  It can have an associated ref count which has a destruction routine to be run
74
- when the ref count reaches zero (see gpr_slice_new() and grp_slice_unref()).
75
- Multiple gpr_slice values may share a ref count.
72
+ when the ref count reaches zero (see grpc_slice_new() and grp_slice_unref()).
73
+ Multiple grpc_slice values may share a ref count.
76
74
 
77
75
  If the slice does not have a refcount, it represents an inlined small piece
78
76
  of data that is copied by value. */
79
- typedef struct gpr_slice {
80
- struct gpr_slice_refcount *refcount;
77
+ typedef struct grpc_slice {
78
+ struct grpc_slice_refcount *refcount;
81
79
  union {
82
80
  struct {
83
81
  uint8_t *bytes;
@@ -85,11 +83,44 @@ typedef struct gpr_slice {
85
83
  } refcounted;
86
84
  struct {
87
85
  uint8_t length;
88
- uint8_t bytes[GPR_SLICE_INLINED_SIZE];
86
+ uint8_t bytes[GRPC_SLICE_INLINED_SIZE];
89
87
  } inlined;
90
88
  } data;
91
- } gpr_slice;
89
+ } grpc_slice;
90
+
91
+ #define GRPC_SLICE_BUFFER_INLINE_ELEMENTS 8
92
+
93
+ /* Represents an expandable array of slices, to be interpreted as a
94
+ single item. */
95
+ typedef struct {
96
+ /* slices in the array */
97
+ grpc_slice *slices;
98
+ /* the number of slices in the array */
99
+ size_t count;
100
+ /* the number of slices allocated in the array */
101
+ size_t capacity;
102
+ /* the combined length of all slices in the array */
103
+ size_t length;
104
+ /* inlined elements to avoid allocations */
105
+ grpc_slice inlined[GRPC_SLICE_BUFFER_INLINE_ELEMENTS];
106
+ } grpc_slice_buffer;
107
+
108
+ #define GRPC_SLICE_START_PTR(slice) \
109
+ ((slice).refcount ? (slice).data.refcounted.bytes \
110
+ : (slice).data.inlined.bytes)
111
+ #define GRPC_SLICE_LENGTH(slice) \
112
+ ((slice).refcount ? (slice).data.refcounted.length \
113
+ : (slice).data.inlined.length)
114
+ #define GRPC_SLICE_SET_LENGTH(slice, newlen) \
115
+ ((slice).refcount ? ((slice).data.refcounted.length = (size_t)(newlen)) \
116
+ : ((slice).data.inlined.length = (uint8_t)(newlen)))
117
+ #define GRPC_SLICE_END_PTR(slice) \
118
+ GRPC_SLICE_START_PTR(slice) + GRPC_SLICE_LENGTH(slice)
119
+ #define GRPC_SLICE_IS_EMPTY(slice) (GRPC_SLICE_LENGTH(slice) == 0)
92
120
 
121
+ #ifdef GRPC_ALLOW_GPR_SLICE_FUNCTIONS
122
+
123
+ /* Duplicate GPR_* definitions */
93
124
  #define GPR_SLICE_START_PTR(slice) \
94
125
  ((slice).refcount ? (slice).data.refcounted.bytes \
95
126
  : (slice).data.inlined.bytes)
@@ -100,83 +131,9 @@ typedef struct gpr_slice {
100
131
  ((slice).refcount ? ((slice).data.refcounted.length = (size_t)(newlen)) \
101
132
  : ((slice).data.inlined.length = (uint8_t)(newlen)))
102
133
  #define GPR_SLICE_END_PTR(slice) \
103
- GPR_SLICE_START_PTR(slice) + GPR_SLICE_LENGTH(slice)
104
- #define GPR_SLICE_IS_EMPTY(slice) (GPR_SLICE_LENGTH(slice) == 0)
105
-
106
- /* Increment the refcount of s. Requires slice is initialized.
107
- Returns s. */
108
- GPRAPI gpr_slice gpr_slice_ref(gpr_slice s);
109
-
110
- /* Decrement the ref count of s. If the ref count of s reaches zero, all
111
- slices sharing the ref count are destroyed, and considered no longer
112
- initialized. If s is ultimately derived from a call to gpr_slice_new(start,
113
- len, dest) where dest!=NULL , then (*dest)(start) is called, else if s is
114
- ultimately derived from a call to gpr_slice_new_with_len(start, len, dest)
115
- where dest!=NULL , then (*dest)(start, len). Requires s initialized. */
116
- GPRAPI void gpr_slice_unref(gpr_slice s);
117
-
118
- /* Create a slice pointing at some data. Calls malloc to allocate a refcount
119
- for the object, and arranges that destroy will be called with the pointer
120
- passed in at destruction. */
121
- GPRAPI gpr_slice gpr_slice_new(void *p, size_t len, void (*destroy)(void *));
122
-
123
- /* Equivalent to gpr_slice_new, but with a two argument destroy function that
124
- also takes the slice length. */
125
- GPRAPI gpr_slice gpr_slice_new_with_len(void *p, size_t len,
126
- void (*destroy)(void *, size_t));
127
-
128
- /* Equivalent to gpr_slice_new(malloc(len), len, free), but saves one malloc()
129
- call.
130
- Aborts if malloc() fails. */
131
- GPRAPI gpr_slice gpr_slice_malloc(size_t length);
132
-
133
- /* Create a slice by copying a string.
134
- Does not preserve null terminators.
135
- Equivalent to:
136
- size_t len = strlen(source);
137
- gpr_slice slice = gpr_slice_malloc(len);
138
- memcpy(slice->data, source, len); */
139
- GPRAPI gpr_slice gpr_slice_from_copied_string(const char *source);
140
-
141
- /* Create a slice by copying a buffer.
142
- Equivalent to:
143
- gpr_slice slice = gpr_slice_malloc(len);
144
- memcpy(slice->data, source, len); */
145
- GPRAPI gpr_slice gpr_slice_from_copied_buffer(const char *source, size_t len);
146
-
147
- /* Create a slice pointing to constant memory */
148
- GPRAPI gpr_slice gpr_slice_from_static_string(const char *source);
149
-
150
- /* Return a result slice derived from s, which shares a ref count with s, where
151
- result.data==s.data+begin, and result.length==end-begin.
152
- The ref count of s is increased by one.
153
- Requires s initialized, begin <= end, begin <= s.length, and
154
- end <= source->length. */
155
- GPRAPI gpr_slice gpr_slice_sub(gpr_slice s, size_t begin, size_t end);
156
-
157
- /* The same as gpr_slice_sub, but without altering the ref count */
158
- GPRAPI gpr_slice gpr_slice_sub_no_ref(gpr_slice s, size_t begin, size_t end);
159
-
160
- /* Splits s into two: modifies s to be s[0:split], and returns a new slice,
161
- sharing a refcount with s, that contains s[split:s.length].
162
- Requires s intialized, split <= s.length */
163
- GPRAPI gpr_slice gpr_slice_split_tail(gpr_slice *s, size_t split);
164
-
165
- /* Splits s into two: modifies s to be s[split:s.length], and returns a new
166
- slice, sharing a refcount with s, that contains s[0:split].
167
- Requires s intialized, split <= s.length */
168
- GPRAPI gpr_slice gpr_slice_split_head(gpr_slice *s, size_t split);
169
-
170
- GPRAPI gpr_slice gpr_empty_slice(void);
171
-
172
- /* Returns <0 if a < b, ==0 if a == b, >0 if a > b
173
- The order is arbitrary, and is not guaranteed to be stable across different
174
- versions of the API. */
175
- GPRAPI int gpr_slice_cmp(gpr_slice a, gpr_slice b);
176
- GPRAPI int gpr_slice_str_cmp(gpr_slice a, const char *b);
177
-
178
- #ifdef __cplusplus
179
- }
180
- #endif
134
+ GRPC_SLICE_START_PTR(slice) + GRPC_SLICE_LENGTH(slice)
135
+ #define GPR_SLICE_IS_EMPTY(slice) (GRPC_SLICE_LENGTH(slice) == 0)
136
+
137
+ #endif /* GRPC_ALLOW_GPR_SLICE_FUNCTIONS */
181
138
 
182
139
  #endif /* GRPC_IMPL_CODEGEN_SLICE_H */
@@ -64,257 +64,4 @@
64
64
  #error Unable to determine platform for sync
65
65
  #endif
66
66
 
67
- #include <grpc/impl/codegen/time.h> /* for gpr_timespec */
68
-
69
- #ifdef __cplusplus
70
- extern "C" {
71
- #endif
72
-
73
- /* --- Mutex interface ---
74
-
75
- At most one thread may hold an exclusive lock on a mutex at any given time.
76
- Actions taken by a thread that holds a mutex exclusively happen after
77
- actions taken by all previous holders of the mutex. Variables of type
78
- gpr_mu are uninitialized when first declared. */
79
-
80
- /* Initialize *mu. Requires: *mu uninitialized. */
81
- GPRAPI void gpr_mu_init(gpr_mu *mu);
82
-
83
- /* Cause *mu no longer to be initialized, freeing any memory in use. Requires:
84
- *mu initialized; no other concurrent operation on *mu. */
85
- GPRAPI void gpr_mu_destroy(gpr_mu *mu);
86
-
87
- /* Wait until no thread has a lock on *mu, cause the calling thread to own an
88
- exclusive lock on *mu, then return. May block indefinitely or crash if the
89
- calling thread has a lock on *mu. Requires: *mu initialized. */
90
- GPRAPI void gpr_mu_lock(gpr_mu *mu);
91
-
92
- /* Release an exclusive lock on *mu held by the calling thread. Requires: *mu
93
- initialized; the calling thread holds an exclusive lock on *mu. */
94
- GPRAPI void gpr_mu_unlock(gpr_mu *mu);
95
-
96
- /* Without blocking, attempt to acquire an exclusive lock on *mu for the
97
- calling thread, then return non-zero iff success. Fail, if any thread holds
98
- the lock; succeeds with high probability if no thread holds the lock.
99
- Requires: *mu initialized. */
100
- GPRAPI int gpr_mu_trylock(gpr_mu *mu);
101
-
102
- /* --- Condition variable interface ---
103
-
104
- A while-loop should be used with gpr_cv_wait() when waiting for conditions
105
- to become true. See the example below. Variables of type gpr_cv are
106
- uninitialized when first declared. */
107
-
108
- /* Initialize *cv. Requires: *cv uninitialized. */
109
- GPRAPI void gpr_cv_init(gpr_cv *cv);
110
-
111
- /* Cause *cv no longer to be initialized, freeing any memory in use. Requires:
112
- *cv initialized; no other concurrent operation on *cv.*/
113
- GPRAPI void gpr_cv_destroy(gpr_cv *cv);
114
-
115
- /* Atomically release *mu and wait on *cv. When the calling thread is woken
116
- from *cv or the deadline abs_deadline is exceeded, execute gpr_mu_lock(mu)
117
- and return whether the deadline was exceeded. Use
118
- abs_deadline==gpr_inf_future for no deadline. abs_deadline can be either
119
- an absolute deadline, or a GPR_TIMESPAN. May return even when not
120
- woken explicitly. Requires: *mu and *cv initialized; the calling thread
121
- holds an exclusive lock on *mu. */
122
- GPRAPI int gpr_cv_wait(gpr_cv *cv, gpr_mu *mu, gpr_timespec abs_deadline);
123
-
124
- /* If any threads are waiting on *cv, wake at least one.
125
- Clients may treat this as an optimization of gpr_cv_broadcast()
126
- for use in the case where waking more than one waiter is not useful.
127
- Requires: *cv initialized. */
128
- GPRAPI void gpr_cv_signal(gpr_cv *cv);
129
-
130
- /* Wake all threads waiting on *cv. Requires: *cv initialized. */
131
- GPRAPI void gpr_cv_broadcast(gpr_cv *cv);
132
-
133
- /* --- One-time initialization ---
134
-
135
- gpr_once must be declared with static storage class, and initialized with
136
- GPR_ONCE_INIT. e.g.,
137
- static gpr_once once_var = GPR_ONCE_INIT; */
138
-
139
- /* Ensure that (*init_routine)() has been called exactly once (for the
140
- specified gpr_once instance) and then return.
141
- If multiple threads call gpr_once() on the same gpr_once instance, one of
142
- them will call (*init_routine)(), and the others will block until that call
143
- finishes.*/
144
- GPRAPI void gpr_once_init(gpr_once *once, void (*init_routine)(void));
145
-
146
- /* --- One-time event notification ---
147
-
148
- These operations act on a gpr_event, which should be initialized with
149
- gpr_ev_init(), or with GPR_EVENT_INIT if static, e.g.,
150
- static gpr_event event_var = GPR_EVENT_INIT;
151
- It requires no destruction. */
152
-
153
- /* Initialize *ev. */
154
- GPRAPI void gpr_event_init(gpr_event *ev);
155
-
156
- /* Set *ev so that gpr_event_get() and gpr_event_wait() will return value.
157
- Requires: *ev initialized; value != NULL; no prior or concurrent calls to
158
- gpr_event_set(ev, ...) since initialization. */
159
- GPRAPI void gpr_event_set(gpr_event *ev, void *value);
160
-
161
- /* Return the value set by gpr_event_set(ev, ...), or NULL if no such call has
162
- completed. If the result is non-NULL, all operations that occurred prior to
163
- the gpr_event_set(ev, ...) set will be visible after this call returns.
164
- Requires: *ev initialized. This operation is faster than acquiring a mutex
165
- on most platforms. */
166
- GPRAPI void *gpr_event_get(gpr_event *ev);
167
-
168
- /* Wait until *ev is set by gpr_event_set(ev, ...), or abs_deadline is
169
- exceeded, then return gpr_event_get(ev). Requires: *ev initialized. Use
170
- abs_deadline==gpr_inf_future for no deadline. When the event has been
171
- signalled before the call, this operation is faster than acquiring a mutex
172
- on most platforms. */
173
- GPRAPI void *gpr_event_wait(gpr_event *ev, gpr_timespec abs_deadline);
174
-
175
- /* --- Reference counting ---
176
-
177
- These calls act on the type gpr_refcount. It requires no destruction. */
178
-
179
- /* Initialize *r to value n. */
180
- GPRAPI void gpr_ref_init(gpr_refcount *r, int n);
181
-
182
- /* Increment the reference count *r. Requires *r initialized. */
183
- GPRAPI void gpr_ref(gpr_refcount *r);
184
-
185
- /* Increment the reference count *r. Requires *r initialized.
186
- Crashes if refcount is zero */
187
- GPRAPI void gpr_ref_non_zero(gpr_refcount *r);
188
-
189
- /* Increment the reference count *r by n. Requires *r initialized, n > 0. */
190
- GPRAPI void gpr_refn(gpr_refcount *r, int n);
191
-
192
- /* Decrement the reference count *r and return non-zero iff it has reached
193
- zero. . Requires *r initialized. */
194
- GPRAPI int gpr_unref(gpr_refcount *r);
195
-
196
- /* --- Stats counters ---
197
-
198
- These calls act on the integral type gpr_stats_counter. It requires no
199
- destruction. Static instances may be initialized with
200
- gpr_stats_counter c = GPR_STATS_INIT;
201
- Beware: These operations do not imply memory barriers. Do not use them to
202
- synchronize other events. */
203
-
204
- /* Initialize *c to the value n. */
205
- GPRAPI void gpr_stats_init(gpr_stats_counter *c, intptr_t n);
206
-
207
- /* *c += inc. Requires: *c initialized. */
208
- GPRAPI void gpr_stats_inc(gpr_stats_counter *c, intptr_t inc);
209
-
210
- /* Return *c. Requires: *c initialized. */
211
- GPRAPI intptr_t gpr_stats_read(const gpr_stats_counter *c);
212
-
213
- /* ==================Example use of interface===================
214
- A producer-consumer queue of up to N integers,
215
- illustrating the use of the calls in this interface. */
216
- #if 0
217
-
218
- #define N 4
219
-
220
- typedef struct queue {
221
- gpr_cv non_empty; /* Signalled when length becomes non-zero. */
222
- gpr_cv non_full; /* Signalled when length becomes non-N. */
223
- gpr_mu mu; /* Protects all fields below.
224
- (That is, except during initialization or
225
- destruction, the fields below should be accessed
226
- only by a thread that holds mu.) */
227
- int head; /* Index of head of queue 0..N-1. */
228
- int length; /* Number of valid elements in queue 0..N. */
229
- int elem[N]; /* elem[head .. head+length-1] are queue elements. */
230
- } queue;
231
-
232
- /* Initialize *q. */
233
- void queue_init(queue *q) {
234
- gpr_mu_init(&q->mu);
235
- gpr_cv_init(&q->non_empty);
236
- gpr_cv_init(&q->non_full);
237
- q->head = 0;
238
- q->length = 0;
239
- }
240
-
241
- /* Free storage associated with *q. */
242
- void queue_destroy(queue *q) {
243
- gpr_mu_destroy(&q->mu);
244
- gpr_cv_destroy(&q->non_empty);
245
- gpr_cv_destroy(&q->non_full);
246
- }
247
-
248
- /* Wait until there is room in *q, then append x to *q. */
249
- void queue_append(queue *q, int x) {
250
- gpr_mu_lock(&q->mu);
251
- /* To wait for a predicate without a deadline, loop on the negation of the
252
- predicate, and use gpr_cv_wait(..., gpr_inf_future) inside the loop
253
- to release the lock, wait, and reacquire on each iteration. Code that
254
- makes the condition true should use gpr_cv_broadcast() on the
255
- corresponding condition variable. The predicate must be on state
256
- protected by the lock. */
257
- while (q->length == N) {
258
- gpr_cv_wait(&q->non_full, &q->mu, gpr_inf_future);
259
- }
260
- if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
261
- /* It's normal to use gpr_cv_broadcast() or gpr_signal() while
262
- holding the lock. */
263
- gpr_cv_broadcast(&q->non_empty);
264
- }
265
- q->elem[(q->head + q->length) % N] = x;
266
- q->length++;
267
- gpr_mu_unlock(&q->mu);
268
- }
269
-
270
- /* If it can be done without blocking, append x to *q and return non-zero.
271
- Otherwise return 0. */
272
- int queue_try_append(queue *q, int x) {
273
- int result = 0;
274
- if (gpr_mu_trylock(&q->mu)) {
275
- if (q->length != N) {
276
- if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
277
- gpr_cv_broadcast(&q->non_empty);
278
- }
279
- q->elem[(q->head + q->length) % N] = x;
280
- q->length++;
281
- result = 1;
282
- }
283
- gpr_mu_unlock(&q->mu);
284
- }
285
- return result;
286
- }
287
-
288
- /* Wait until the *q is non-empty or deadline abs_deadline passes. If the
289
- queue is non-empty, remove its head entry, place it in *head, and return
290
- non-zero. Otherwise return 0. */
291
- int queue_remove(queue *q, int *head, gpr_timespec abs_deadline) {
292
- int result = 0;
293
- gpr_mu_lock(&q->mu);
294
- /* To wait for a predicate with a deadline, loop on the negation of the
295
- predicate or until gpr_cv_wait() returns true. Code that makes
296
- the condition true should use gpr_cv_broadcast() on the corresponding
297
- condition variable. The predicate must be on state protected by the
298
- lock. */
299
- while (q->length == 0 &&
300
- !gpr_cv_wait(&q->non_empty, &q->mu, abs_deadline)) {
301
- }
302
- if (q->length != 0) { /* Queue is non-empty. */
303
- result = 1;
304
- if (q->length == N) { /* Wake threads blocked in queue_append(). */
305
- gpr_cv_broadcast(&q->non_full);
306
- }
307
- *head = q->elem[q->head];
308
- q->head = (q->head + 1) % N;
309
- q->length--;
310
- } /* else deadline exceeded */
311
- gpr_mu_unlock(&q->mu);
312
- return result;
313
- }
314
- #endif /* 0 */
315
-
316
- #ifdef __cplusplus
317
- }
318
- #endif
319
-
320
67
  #endif /* GRPC_IMPL_CODEGEN_SYNC_H */