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
@@ -4,8 +4,6 @@ framework module grpc {
4
4
  header "byte_buffer_reader.h"
5
5
  header "grpc_security.h"
6
6
  header "grpc_security_constants.h"
7
- header "impl/codegen/alloc.h"
8
- header "impl/codegen/byte_buffer_reader.h"
9
7
  header "support/alloc.h"
10
8
  header "support/port_platform.h"
11
9
  header "support/string_util.h"
@@ -0,0 +1,132 @@
1
+ /*
2
+ *
3
+ * Copyright 2015, 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_SLICE_H
35
+ #define GRPC_SLICE_H
36
+
37
+ #include <grpc/impl/codegen/slice.h>
38
+ #include <grpc/support/sync.h>
39
+
40
+ #ifdef __cplusplus
41
+ extern "C" {
42
+ #endif
43
+
44
+ /* Increment the refcount of s. Requires slice is initialized.
45
+ Returns s. */
46
+ GPRAPI grpc_slice grpc_slice_ref(grpc_slice s);
47
+
48
+ /* Decrement the ref count of s. If the ref count of s reaches zero, all
49
+ slices sharing the ref count are destroyed, and considered no longer
50
+ initialized. If s is ultimately derived from a call to grpc_slice_new(start,
51
+ len, dest) where dest!=NULL , then (*dest)(start) is called, else if s is
52
+ ultimately derived from a call to grpc_slice_new_with_len(start, len, dest)
53
+ where dest!=NULL , then (*dest)(start, len). Requires s initialized. */
54
+ GPRAPI void grpc_slice_unref(grpc_slice s);
55
+
56
+ /* Create a slice pointing at some data. Calls malloc to allocate a refcount
57
+ for the object, and arranges that destroy will be called with the pointer
58
+ passed in at destruction. */
59
+ GPRAPI grpc_slice grpc_slice_new(void *p, size_t len, void (*destroy)(void *));
60
+
61
+ /* Equivalent to grpc_slice_new, but with a separate pointer that is
62
+ passed to the destroy function. This function can be useful when
63
+ the data is part of a larger structure that must be destroyed when
64
+ the data is no longer needed. */
65
+ GPRAPI grpc_slice grpc_slice_new_with_user_data(void *p, size_t len,
66
+ void (*destroy)(void *),
67
+ void *user_data);
68
+
69
+ /* Equivalent to grpc_slice_new, but with a two argument destroy function that
70
+ also takes the slice length. */
71
+ GPRAPI grpc_slice grpc_slice_new_with_len(void *p, size_t len,
72
+ void (*destroy)(void *, size_t));
73
+
74
+ /* Equivalent to grpc_slice_new(malloc(len), len, free), but saves one malloc()
75
+ call.
76
+ Aborts if malloc() fails. */
77
+ GPRAPI grpc_slice grpc_slice_malloc(size_t length);
78
+
79
+ /* Create a slice by copying a string.
80
+ Does not preserve null terminators.
81
+ Equivalent to:
82
+ size_t len = strlen(source);
83
+ grpc_slice slice = grpc_slice_malloc(len);
84
+ memcpy(slice->data, source, len); */
85
+ GPRAPI grpc_slice grpc_slice_from_copied_string(const char *source);
86
+
87
+ /* Create a slice by copying a buffer.
88
+ Equivalent to:
89
+ grpc_slice slice = grpc_slice_malloc(len);
90
+ memcpy(slice->data, source, len); */
91
+ GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t len);
92
+
93
+ /* Create a slice pointing to constant memory */
94
+ GPRAPI grpc_slice grpc_slice_from_static_string(const char *source);
95
+
96
+ /* Return a result slice derived from s, which shares a ref count with s, where
97
+ result.data==s.data+begin, and result.length==end-begin.
98
+ The ref count of s is increased by one.
99
+ Requires s initialized, begin <= end, begin <= s.length, and
100
+ end <= source->length. */
101
+ GPRAPI grpc_slice grpc_slice_sub(grpc_slice s, size_t begin, size_t end);
102
+
103
+ /* The same as grpc_slice_sub, but without altering the ref count */
104
+ GPRAPI grpc_slice grpc_slice_sub_no_ref(grpc_slice s, size_t begin, size_t end);
105
+
106
+ /* Splits s into two: modifies s to be s[0:split], and returns a new slice,
107
+ sharing a refcount with s, that contains s[split:s.length].
108
+ Requires s intialized, split <= s.length */
109
+ GPRAPI grpc_slice grpc_slice_split_tail(grpc_slice *s, size_t split);
110
+
111
+ /* Splits s into two: modifies s to be s[split:s.length], and returns a new
112
+ slice, sharing a refcount with s, that contains s[0:split].
113
+ Requires s intialized, split <= s.length */
114
+ GPRAPI grpc_slice grpc_slice_split_head(grpc_slice *s, size_t split);
115
+
116
+ GPRAPI grpc_slice gpr_empty_slice(void);
117
+
118
+ /* Returns <0 if a < b, ==0 if a == b, >0 if a > b
119
+ The order is arbitrary, and is not guaranteed to be stable across different
120
+ versions of the API. */
121
+ GPRAPI int grpc_slice_cmp(grpc_slice a, grpc_slice b);
122
+ GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char *b);
123
+
124
+ /* Do two slices point at the same memory, with the same length
125
+ If a or b is inlined, actually compares data */
126
+ GPRAPI int grpc_slice_is_equivalent(grpc_slice a, grpc_slice b);
127
+
128
+ #ifdef __cplusplus
129
+ }
130
+ #endif
131
+
132
+ #endif /* GRPC_SLICE_H */
@@ -31,40 +31,23 @@
31
31
  *
32
32
  */
33
33
 
34
- #ifndef GRPC_IMPL_CODEGEN_SLICE_BUFFER_H
35
- #define GRPC_IMPL_CODEGEN_SLICE_BUFFER_H
34
+ #ifndef GRPC_SLICE_BUFFER_H
35
+ #define GRPC_SLICE_BUFFER_H
36
36
 
37
- #include <grpc/impl/codegen/slice.h>
37
+ #include <grpc/slice.h>
38
38
 
39
39
  #ifdef __cplusplus
40
40
  extern "C" {
41
41
  #endif
42
42
 
43
- #define GRPC_SLICE_BUFFER_INLINE_ELEMENTS 8
44
-
45
- /* Represents an expandable array of slices, to be interpreted as a
46
- single item. */
47
- typedef struct {
48
- /* slices in the array */
49
- gpr_slice *slices;
50
- /* the number of slices in the array */
51
- size_t count;
52
- /* the number of slices allocated in the array */
53
- size_t capacity;
54
- /* the combined length of all slices in the array */
55
- size_t length;
56
- /* inlined elements to avoid allocations */
57
- gpr_slice inlined[GRPC_SLICE_BUFFER_INLINE_ELEMENTS];
58
- } gpr_slice_buffer;
59
-
60
43
  /* initialize a slice buffer */
61
- GPRAPI void gpr_slice_buffer_init(gpr_slice_buffer *sb);
44
+ GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer *sb);
62
45
  /* destroy a slice buffer - unrefs any held elements */
63
- GPRAPI void gpr_slice_buffer_destroy(gpr_slice_buffer *sb);
46
+ GPRAPI void grpc_slice_buffer_destroy(grpc_slice_buffer *sb);
64
47
  /* Add an element to a slice buffer - takes ownership of the slice.
65
48
  This function is allowed to concatenate the passed in slice to the end of
66
49
  some other slice if desired by the slice buffer. */
67
- GPRAPI void gpr_slice_buffer_add(gpr_slice_buffer *sb, gpr_slice slice);
50
+ GPRAPI void grpc_slice_buffer_add(grpc_slice_buffer *sb, grpc_slice slice);
68
51
  /* add an element to a slice buffer - takes ownership of the slice and returns
69
52
  the index of the slice.
70
53
  Guarantees that the slice will not be concatenated at the end of another
@@ -72,33 +55,33 @@ GPRAPI void gpr_slice_buffer_add(gpr_slice_buffer *sb, gpr_slice slice);
72
55
  slice at the returned index in sb->slices)
73
56
  The implementation MAY decide to concatenate data at the end of a small
74
57
  slice added in this fashion. */
75
- GPRAPI size_t gpr_slice_buffer_add_indexed(gpr_slice_buffer *sb,
76
- gpr_slice slice);
77
- GPRAPI void gpr_slice_buffer_addn(gpr_slice_buffer *sb, gpr_slice *slices,
78
- size_t n);
58
+ GPRAPI size_t grpc_slice_buffer_add_indexed(grpc_slice_buffer *sb,
59
+ grpc_slice slice);
60
+ GPRAPI void grpc_slice_buffer_addn(grpc_slice_buffer *sb, grpc_slice *slices,
61
+ size_t n);
79
62
  /* add a very small (less than 8 bytes) amount of data to the end of a slice
80
63
  buffer: returns a pointer into which to add the data */
81
- GPRAPI uint8_t *gpr_slice_buffer_tiny_add(gpr_slice_buffer *sb, size_t len);
64
+ GPRAPI uint8_t *grpc_slice_buffer_tiny_add(grpc_slice_buffer *sb, size_t len);
82
65
  /* pop the last buffer, but don't unref it */
83
- GPRAPI void gpr_slice_buffer_pop(gpr_slice_buffer *sb);
66
+ GPRAPI void grpc_slice_buffer_pop(grpc_slice_buffer *sb);
84
67
  /* clear a slice buffer, unref all elements */
85
- GPRAPI void gpr_slice_buffer_reset_and_unref(gpr_slice_buffer *sb);
68
+ GPRAPI void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer *sb);
86
69
  /* swap the contents of two slice buffers */
87
- GPRAPI void gpr_slice_buffer_swap(gpr_slice_buffer *a, gpr_slice_buffer *b);
70
+ GPRAPI void grpc_slice_buffer_swap(grpc_slice_buffer *a, grpc_slice_buffer *b);
88
71
  /* move all of the elements of src into dst */
89
- GPRAPI void gpr_slice_buffer_move_into(gpr_slice_buffer *src,
90
- gpr_slice_buffer *dst);
72
+ GPRAPI void grpc_slice_buffer_move_into(grpc_slice_buffer *src,
73
+ grpc_slice_buffer *dst);
91
74
  /* remove n bytes from the end of a slice buffer */
92
- GPRAPI void gpr_slice_buffer_trim_end(gpr_slice_buffer *src, size_t n,
93
- gpr_slice_buffer *garbage);
75
+ GPRAPI void grpc_slice_buffer_trim_end(grpc_slice_buffer *src, size_t n,
76
+ grpc_slice_buffer *garbage);
94
77
  /* move the first n bytes of src into dst */
95
- GPRAPI void gpr_slice_buffer_move_first(gpr_slice_buffer *src, size_t n,
96
- gpr_slice_buffer *dst);
78
+ GPRAPI void grpc_slice_buffer_move_first(grpc_slice_buffer *src, size_t n,
79
+ grpc_slice_buffer *dst);
97
80
  /* take the first slice in the slice buffer */
98
- GPRAPI gpr_slice gpr_slice_buffer_take_first(gpr_slice_buffer *src);
81
+ GPRAPI grpc_slice grpc_slice_buffer_take_first(grpc_slice_buffer *src);
99
82
 
100
83
  #ifdef __cplusplus
101
84
  }
102
85
  #endif
103
86
 
104
- #endif /* GRPC_IMPL_CODEGEN_SLICE_BUFFER_H */
87
+ #endif /* GRPC_SLICE_BUFFER_H */
@@ -34,6 +34,45 @@
34
34
  #ifndef GRPC_SUPPORT_ALLOC_H
35
35
  #define GRPC_SUPPORT_ALLOC_H
36
36
 
37
- #include <grpc/impl/codegen/alloc.h>
37
+ #include <stddef.h>
38
+
39
+ #include <grpc/impl/codegen/port_platform.h>
40
+
41
+ #ifdef __cplusplus
42
+ extern "C" {
43
+ #endif
44
+
45
+ typedef struct gpr_allocation_functions {
46
+ void *(*malloc_fn)(size_t size);
47
+ void *(*realloc_fn)(void *ptr, size_t size);
48
+ void (*free_fn)(void *ptr);
49
+ } gpr_allocation_functions;
50
+
51
+ /* malloc.
52
+ * If size==0, always returns NULL. Otherwise this function never returns NULL.
53
+ * The pointer returned is suitably aligned for any kind of variable it could
54
+ * contain.
55
+ */
56
+ GPRAPI void *gpr_malloc(size_t size);
57
+ /* free */
58
+ GPRAPI void gpr_free(void *ptr);
59
+ /* realloc, never returns NULL */
60
+ GPRAPI void *gpr_realloc(void *p, size_t size);
61
+ /* aligned malloc, never returns NULL, will align to 1 << alignment_log */
62
+ GPRAPI void *gpr_malloc_aligned(size_t size, size_t alignment_log);
63
+ /* free memory allocated by gpr_malloc_aligned */
64
+ GPRAPI void gpr_free_aligned(void *ptr);
65
+
66
+ /** Request the family of allocation functions in \a functions be used. NOTE
67
+ * that this request will be honored in a *best effort* basis and that no
68
+ * guarantees are made about the default functions (eg, malloc) being called. */
69
+ GPRAPI void gpr_set_allocation_functions(gpr_allocation_functions functions);
70
+
71
+ /** Return the family of allocation functions currently in effect. */
72
+ GPRAPI gpr_allocation_functions gpr_get_allocation_functions();
73
+
74
+ #ifdef __cplusplus
75
+ }
76
+ #endif
38
77
 
39
78
  #endif /* GRPC_SUPPORT_ALLOC_H */
@@ -34,6 +34,85 @@
34
34
  #ifndef GRPC_SUPPORT_LOG_H
35
35
  #define GRPC_SUPPORT_LOG_H
36
36
 
37
- #include <grpc/impl/codegen/log.h>
37
+ #include <inttypes.h>
38
+ #include <stdarg.h>
39
+ #include <stdlib.h> /* for abort() */
40
+
41
+ #include <grpc/impl/codegen/port_platform.h>
42
+
43
+ #ifdef __cplusplus
44
+ extern "C" {
45
+ #endif
46
+
47
+ /* GPR log API.
48
+
49
+ Usage (within grpc):
50
+
51
+ int argument1 = 3;
52
+ char* argument2 = "hello";
53
+ gpr_log(GPR_DEBUG, "format string %d", argument1);
54
+ gpr_log(GPR_INFO, "hello world");
55
+ gpr_log(GPR_ERROR, "%d %s!!", argument1, argument2); */
56
+
57
+ /* The severity of a log message - use the #defines below when calling into
58
+ gpr_log to additionally supply file and line data */
59
+ typedef enum gpr_log_severity {
60
+ GPR_LOG_SEVERITY_DEBUG,
61
+ GPR_LOG_SEVERITY_INFO,
62
+ GPR_LOG_SEVERITY_ERROR
63
+ } gpr_log_severity;
64
+
65
+ #define GPR_LOG_VERBOSITY_UNSET -1
66
+
67
+ /* Returns a string representation of the log severity */
68
+ const char *gpr_log_severity_string(gpr_log_severity severity);
69
+
70
+ /* Macros to build log contexts at various severity levels */
71
+ #define GPR_DEBUG __FILE__, __LINE__, GPR_LOG_SEVERITY_DEBUG
72
+ #define GPR_INFO __FILE__, __LINE__, GPR_LOG_SEVERITY_INFO
73
+ #define GPR_ERROR __FILE__, __LINE__, GPR_LOG_SEVERITY_ERROR
74
+
75
+ /* Log a message. It's advised to use GPR_xxx above to generate the context
76
+ * for each message */
77
+ GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity,
78
+ const char *format, ...) GPR_PRINT_FORMAT_CHECK(4, 5);
79
+
80
+ GPRAPI void gpr_log_message(const char *file, int line,
81
+ gpr_log_severity severity, const char *message);
82
+
83
+ /* Set global log verbosity */
84
+ GPRAPI void gpr_set_log_verbosity(gpr_log_severity min_severity_to_print);
85
+
86
+ GPRAPI void gpr_log_verbosity_init();
87
+
88
+ /* Log overrides: applications can use this API to intercept logging calls
89
+ and use their own implementations */
90
+
91
+ typedef struct {
92
+ const char *file;
93
+ int line;
94
+ gpr_log_severity severity;
95
+ const char *message;
96
+ } gpr_log_func_args;
97
+
98
+ typedef void (*gpr_log_func)(gpr_log_func_args *args);
99
+ GPRAPI void gpr_set_log_function(gpr_log_func func);
100
+
101
+ /* abort() the process if x is zero, having written a line to the log.
102
+
103
+ Intended for internal invariants. If the error can be recovered from,
104
+ without the possibility of corruption, or might best be reflected via
105
+ an exception in a higher-level language, consider returning error code. */
106
+ #define GPR_ASSERT(x) \
107
+ do { \
108
+ if (!(x)) { \
109
+ gpr_log(GPR_ERROR, "assertion failed: %s", #x); \
110
+ abort(); \
111
+ } \
112
+ } while (0)
113
+
114
+ #ifdef __cplusplus
115
+ }
116
+ #endif
38
117
 
39
118
  #endif /* GRPC_SUPPORT_LOG_H */
@@ -34,6 +34,8 @@
34
34
  #ifndef GRPC_SUPPORT_LOG_WINDOWS_H
35
35
  #define GRPC_SUPPORT_LOG_WINDOWS_H
36
36
 
37
+ #include <grpc/impl/codegen/port_platform.h>
38
+
37
39
  #ifdef __cplusplus
38
40
  extern "C" {
39
41
  #endif
@@ -55,7 +55,7 @@ GPRAPI char *gpr_strdup(const char *src);
55
55
  On error, returns -1 and sets *strp to NULL. If the format string is bad,
56
56
  the result is undefined. */
57
57
  GPRAPI int gpr_asprintf(char **strp, const char *format, ...)
58
- GPRC_PRINT_FORMAT_CHECK(2, 3);
58
+ GPR_PRINT_FORMAT_CHECK(2, 3);
59
59
 
60
60
  #ifdef __cplusplus
61
61
  }
@@ -34,6 +34,258 @@
34
34
  #ifndef GRPC_SUPPORT_SYNC_H
35
35
  #define GRPC_SUPPORT_SYNC_H
36
36
 
37
+ #include <grpc/impl/codegen/gpr_types.h> /* for gpr_timespec */
37
38
  #include <grpc/impl/codegen/sync.h>
38
39
 
40
+ #ifdef __cplusplus
41
+ extern "C" {
42
+ #endif
43
+
44
+ /* --- Mutex interface ---
45
+
46
+ At most one thread may hold an exclusive lock on a mutex at any given time.
47
+ Actions taken by a thread that holds a mutex exclusively happen after
48
+ actions taken by all previous holders of the mutex. Variables of type
49
+ gpr_mu are uninitialized when first declared. */
50
+
51
+ /* Initialize *mu. Requires: *mu uninitialized. */
52
+ GPRAPI void gpr_mu_init(gpr_mu *mu);
53
+
54
+ /* Cause *mu no longer to be initialized, freeing any memory in use. Requires:
55
+ *mu initialized; no other concurrent operation on *mu. */
56
+ GPRAPI void gpr_mu_destroy(gpr_mu *mu);
57
+
58
+ /* Wait until no thread has a lock on *mu, cause the calling thread to own an
59
+ exclusive lock on *mu, then return. May block indefinitely or crash if the
60
+ calling thread has a lock on *mu. Requires: *mu initialized. */
61
+ GPRAPI void gpr_mu_lock(gpr_mu *mu);
62
+
63
+ /* Release an exclusive lock on *mu held by the calling thread. Requires: *mu
64
+ initialized; the calling thread holds an exclusive lock on *mu. */
65
+ GPRAPI void gpr_mu_unlock(gpr_mu *mu);
66
+
67
+ /* Without blocking, attempt to acquire an exclusive lock on *mu for the
68
+ calling thread, then return non-zero iff success. Fail, if any thread holds
69
+ the lock; succeeds with high probability if no thread holds the lock.
70
+ Requires: *mu initialized. */
71
+ GPRAPI int gpr_mu_trylock(gpr_mu *mu);
72
+
73
+ /* --- Condition variable interface ---
74
+
75
+ A while-loop should be used with gpr_cv_wait() when waiting for conditions
76
+ to become true. See the example below. Variables of type gpr_cv are
77
+ uninitialized when first declared. */
78
+
79
+ /* Initialize *cv. Requires: *cv uninitialized. */
80
+ GPRAPI void gpr_cv_init(gpr_cv *cv);
81
+
82
+ /* Cause *cv no longer to be initialized, freeing any memory in use. Requires:
83
+ *cv initialized; no other concurrent operation on *cv.*/
84
+ GPRAPI void gpr_cv_destroy(gpr_cv *cv);
85
+
86
+ /* Atomically release *mu and wait on *cv. When the calling thread is woken
87
+ from *cv or the deadline abs_deadline is exceeded, execute gpr_mu_lock(mu)
88
+ and return whether the deadline was exceeded. Use
89
+ abs_deadline==gpr_inf_future for no deadline. abs_deadline can be either
90
+ an absolute deadline, or a GPR_TIMESPAN. May return even when not
91
+ woken explicitly. Requires: *mu and *cv initialized; the calling thread
92
+ holds an exclusive lock on *mu. */
93
+ GPRAPI int gpr_cv_wait(gpr_cv *cv, gpr_mu *mu, gpr_timespec abs_deadline);
94
+
95
+ /* If any threads are waiting on *cv, wake at least one.
96
+ Clients may treat this as an optimization of gpr_cv_broadcast()
97
+ for use in the case where waking more than one waiter is not useful.
98
+ Requires: *cv initialized. */
99
+ GPRAPI void gpr_cv_signal(gpr_cv *cv);
100
+
101
+ /* Wake all threads waiting on *cv. Requires: *cv initialized. */
102
+ GPRAPI void gpr_cv_broadcast(gpr_cv *cv);
103
+
104
+ /* --- One-time initialization ---
105
+
106
+ gpr_once must be declared with static storage class, and initialized with
107
+ GPR_ONCE_INIT. e.g.,
108
+ static gpr_once once_var = GPR_ONCE_INIT; */
109
+
110
+ /* Ensure that (*init_routine)() has been called exactly once (for the
111
+ specified gpr_once instance) and then return.
112
+ If multiple threads call gpr_once() on the same gpr_once instance, one of
113
+ them will call (*init_routine)(), and the others will block until that call
114
+ finishes.*/
115
+ GPRAPI void gpr_once_init(gpr_once *once, void (*init_routine)(void));
116
+
117
+ /* --- One-time event notification ---
118
+
119
+ These operations act on a gpr_event, which should be initialized with
120
+ gpr_ev_init(), or with GPR_EVENT_INIT if static, e.g.,
121
+ static gpr_event event_var = GPR_EVENT_INIT;
122
+ It requires no destruction. */
123
+
124
+ /* Initialize *ev. */
125
+ GPRAPI void gpr_event_init(gpr_event *ev);
126
+
127
+ /* Set *ev so that gpr_event_get() and gpr_event_wait() will return value.
128
+ Requires: *ev initialized; value != NULL; no prior or concurrent calls to
129
+ gpr_event_set(ev, ...) since initialization. */
130
+ GPRAPI void gpr_event_set(gpr_event *ev, void *value);
131
+
132
+ /* Return the value set by gpr_event_set(ev, ...), or NULL if no such call has
133
+ completed. If the result is non-NULL, all operations that occurred prior to
134
+ the gpr_event_set(ev, ...) set will be visible after this call returns.
135
+ Requires: *ev initialized. This operation is faster than acquiring a mutex
136
+ on most platforms. */
137
+ GPRAPI void *gpr_event_get(gpr_event *ev);
138
+
139
+ /* Wait until *ev is set by gpr_event_set(ev, ...), or abs_deadline is
140
+ exceeded, then return gpr_event_get(ev). Requires: *ev initialized. Use
141
+ abs_deadline==gpr_inf_future for no deadline. When the event has been
142
+ signalled before the call, this operation is faster than acquiring a mutex
143
+ on most platforms. */
144
+ GPRAPI void *gpr_event_wait(gpr_event *ev, gpr_timespec abs_deadline);
145
+
146
+ /* --- Reference counting ---
147
+
148
+ These calls act on the type gpr_refcount. It requires no destruction. */
149
+
150
+ /* Initialize *r to value n. */
151
+ GPRAPI void gpr_ref_init(gpr_refcount *r, int n);
152
+
153
+ /* Increment the reference count *r. Requires *r initialized. */
154
+ GPRAPI void gpr_ref(gpr_refcount *r);
155
+
156
+ /* Increment the reference count *r. Requires *r initialized.
157
+ Crashes if refcount is zero */
158
+ GPRAPI void gpr_ref_non_zero(gpr_refcount *r);
159
+
160
+ /* Increment the reference count *r by n. Requires *r initialized, n > 0. */
161
+ GPRAPI void gpr_refn(gpr_refcount *r, int n);
162
+
163
+ /* Decrement the reference count *r and return non-zero iff it has reached
164
+ zero. . Requires *r initialized. */
165
+ GPRAPI int gpr_unref(gpr_refcount *r);
166
+
167
+ /* --- Stats counters ---
168
+
169
+ These calls act on the integral type gpr_stats_counter. It requires no
170
+ destruction. Static instances may be initialized with
171
+ gpr_stats_counter c = GPR_STATS_INIT;
172
+ Beware: These operations do not imply memory barriers. Do not use them to
173
+ synchronize other events. */
174
+
175
+ /* Initialize *c to the value n. */
176
+ GPRAPI void gpr_stats_init(gpr_stats_counter *c, intptr_t n);
177
+
178
+ /* *c += inc. Requires: *c initialized. */
179
+ GPRAPI void gpr_stats_inc(gpr_stats_counter *c, intptr_t inc);
180
+
181
+ /* Return *c. Requires: *c initialized. */
182
+ GPRAPI intptr_t gpr_stats_read(const gpr_stats_counter *c);
183
+
184
+ /* ==================Example use of interface===================
185
+ A producer-consumer queue of up to N integers,
186
+ illustrating the use of the calls in this interface. */
187
+ #if 0
188
+
189
+ #define N 4
190
+
191
+ typedef struct queue {
192
+ gpr_cv non_empty; /* Signalled when length becomes non-zero. */
193
+ gpr_cv non_full; /* Signalled when length becomes non-N. */
194
+ gpr_mu mu; /* Protects all fields below.
195
+ (That is, except during initialization or
196
+ destruction, the fields below should be accessed
197
+ only by a thread that holds mu.) */
198
+ int head; /* Index of head of queue 0..N-1. */
199
+ int length; /* Number of valid elements in queue 0..N. */
200
+ int elem[N]; /* elem[head .. head+length-1] are queue elements. */
201
+ } queue;
202
+
203
+ /* Initialize *q. */
204
+ void queue_init(queue *q) {
205
+ gpr_mu_init(&q->mu);
206
+ gpr_cv_init(&q->non_empty);
207
+ gpr_cv_init(&q->non_full);
208
+ q->head = 0;
209
+ q->length = 0;
210
+ }
211
+
212
+ /* Free storage associated with *q. */
213
+ void queue_destroy(queue *q) {
214
+ gpr_mu_destroy(&q->mu);
215
+ gpr_cv_destroy(&q->non_empty);
216
+ gpr_cv_destroy(&q->non_full);
217
+ }
218
+
219
+ /* Wait until there is room in *q, then append x to *q. */
220
+ void queue_append(queue *q, int x) {
221
+ gpr_mu_lock(&q->mu);
222
+ /* To wait for a predicate without a deadline, loop on the negation of the
223
+ predicate, and use gpr_cv_wait(..., gpr_inf_future) inside the loop
224
+ to release the lock, wait, and reacquire on each iteration. Code that
225
+ makes the condition true should use gpr_cv_broadcast() on the
226
+ corresponding condition variable. The predicate must be on state
227
+ protected by the lock. */
228
+ while (q->length == N) {
229
+ gpr_cv_wait(&q->non_full, &q->mu, gpr_inf_future);
230
+ }
231
+ if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
232
+ /* It's normal to use gpr_cv_broadcast() or gpr_signal() while
233
+ holding the lock. */
234
+ gpr_cv_broadcast(&q->non_empty);
235
+ }
236
+ q->elem[(q->head + q->length) % N] = x;
237
+ q->length++;
238
+ gpr_mu_unlock(&q->mu);
239
+ }
240
+
241
+ /* If it can be done without blocking, append x to *q and return non-zero.
242
+ Otherwise return 0. */
243
+ int queue_try_append(queue *q, int x) {
244
+ int result = 0;
245
+ if (gpr_mu_trylock(&q->mu)) {
246
+ if (q->length != N) {
247
+ if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
248
+ gpr_cv_broadcast(&q->non_empty);
249
+ }
250
+ q->elem[(q->head + q->length) % N] = x;
251
+ q->length++;
252
+ result = 1;
253
+ }
254
+ gpr_mu_unlock(&q->mu);
255
+ }
256
+ return result;
257
+ }
258
+
259
+ /* Wait until the *q is non-empty or deadline abs_deadline passes. If the
260
+ queue is non-empty, remove its head entry, place it in *head, and return
261
+ non-zero. Otherwise return 0. */
262
+ int queue_remove(queue *q, int *head, gpr_timespec abs_deadline) {
263
+ int result = 0;
264
+ gpr_mu_lock(&q->mu);
265
+ /* To wait for a predicate with a deadline, loop on the negation of the
266
+ predicate or until gpr_cv_wait() returns true. Code that makes
267
+ the condition true should use gpr_cv_broadcast() on the corresponding
268
+ condition variable. The predicate must be on state protected by the
269
+ lock. */
270
+ while (q->length == 0 &&
271
+ !gpr_cv_wait(&q->non_empty, &q->mu, abs_deadline)) {
272
+ }
273
+ if (q->length != 0) { /* Queue is non-empty. */
274
+ result = 1;
275
+ if (q->length == N) { /* Wake threads blocked in queue_append(). */
276
+ gpr_cv_broadcast(&q->non_full);
277
+ }
278
+ *head = q->elem[q->head];
279
+ q->head = (q->head + 1) % N;
280
+ q->length--;
281
+ } /* else deadline exceeded */
282
+ gpr_mu_unlock(&q->mu);
283
+ return result;
284
+ }
285
+ #endif /* 0 */
286
+
287
+ #ifdef __cplusplus
288
+ }
289
+ #endif
290
+
39
291
  #endif /* GRPC_SUPPORT_SYNC_H */