grpc 0.11.0 → 0.12.0

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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +29456 -0
  3. data/Rakefile +13 -8
  4. data/etc/roots.pem +5114 -0
  5. data/include/grpc/byte_buffer.h +120 -0
  6. data/include/grpc/byte_buffer_reader.h +58 -0
  7. data/include/grpc/census.h +488 -0
  8. data/include/grpc/compression.h +106 -0
  9. data/include/grpc/grpc.h +732 -0
  10. data/include/grpc/grpc_security.h +374 -0
  11. data/include/grpc/grpc_zookeeper.h +59 -0
  12. data/include/grpc/status.h +163 -0
  13. data/include/grpc/support/alloc.h +72 -0
  14. data/include/grpc/support/atm.h +92 -0
  15. data/include/grpc/support/atm_gcc_atomic.h +72 -0
  16. data/include/grpc/support/atm_gcc_sync.h +87 -0
  17. data/include/grpc/support/atm_win32.h +125 -0
  18. data/include/grpc/support/avl.h +91 -0
  19. data/include/grpc/support/cmdline.h +101 -0
  20. data/include/grpc/support/cpu.h +57 -0
  21. data/include/grpc/support/histogram.h +76 -0
  22. data/include/grpc/support/host_port.h +64 -0
  23. data/include/grpc/support/log.h +108 -0
  24. data/include/grpc/support/log_win32.h +51 -0
  25. data/include/grpc/support/port_platform.h +356 -0
  26. data/include/grpc/support/slice.h +182 -0
  27. data/include/grpc/support/slice_buffer.h +102 -0
  28. data/include/grpc/support/string_util.h +61 -0
  29. data/include/grpc/support/subprocess.h +57 -0
  30. data/include/grpc/support/sync.h +315 -0
  31. data/include/grpc/support/sync_generic.h +55 -0
  32. data/include/grpc/support/sync_posix.h +47 -0
  33. data/include/grpc/support/sync_win32.h +49 -0
  34. data/include/grpc/support/thd.h +91 -0
  35. data/include/grpc/support/time.h +128 -0
  36. data/include/grpc/support/tls.h +77 -0
  37. data/include/grpc/support/tls_gcc.h +56 -0
  38. data/include/grpc/support/tls_msvc.h +56 -0
  39. data/include/grpc/support/tls_pthread.h +60 -0
  40. data/include/grpc/support/useful.h +75 -0
  41. data/src/core/census/aggregation.h +66 -0
  42. data/src/core/census/context.c +46 -0
  43. data/src/core/census/context.h +47 -0
  44. data/src/core/census/grpc_context.c +53 -0
  45. data/src/core/census/grpc_filter.c +184 -0
  46. data/src/core/census/grpc_filter.h +44 -0
  47. data/src/core/census/initialize.c +57 -0
  48. data/src/core/census/operation.c +63 -0
  49. data/src/core/census/rpc_metric_id.h +51 -0
  50. data/src/core/census/tracing.c +45 -0
  51. data/src/core/channel/channel_args.c +209 -0
  52. data/src/core/channel/channel_args.h +88 -0
  53. data/src/core/channel/channel_stack.c +262 -0
  54. data/src/core/channel/channel_stack.h +260 -0
  55. data/src/core/channel/client_channel.c +524 -0
  56. data/src/core/channel/client_channel.h +63 -0
  57. data/src/core/channel/client_uchannel.c +243 -0
  58. data/src/core/channel/client_uchannel.h +60 -0
  59. data/src/core/channel/compress_filter.c +297 -0
  60. data/src/core/channel/compress_filter.h +65 -0
  61. data/src/core/channel/connected_channel.c +167 -0
  62. data/src/core/channel/connected_channel.h +51 -0
  63. data/src/core/channel/context.h +49 -0
  64. data/src/core/channel/http_client_filter.c +248 -0
  65. data/src/core/channel/http_client_filter.h +44 -0
  66. data/src/core/channel/http_server_filter.c +233 -0
  67. data/src/core/channel/http_server_filter.h +42 -0
  68. data/src/core/channel/subchannel_call_holder.c +259 -0
  69. data/src/core/channel/subchannel_call_holder.h +98 -0
  70. data/src/core/client_config/client_config.c +72 -0
  71. data/src/core/client_config/client_config.h +53 -0
  72. data/src/core/client_config/connector.c +54 -0
  73. data/src/core/client_config/connector.h +95 -0
  74. data/src/core/client_config/default_initial_connect_string.c +39 -0
  75. data/src/core/client_config/initial_connect_string.c +53 -0
  76. data/src/core/client_config/initial_connect_string.h +50 -0
  77. data/src/core/client_config/lb_policies/pick_first.c +398 -0
  78. data/src/core/client_config/lb_policies/pick_first.h +43 -0
  79. data/src/core/client_config/lb_policies/round_robin.c +537 -0
  80. data/src/core/client_config/lb_policies/round_robin.h +46 -0
  81. data/src/core/client_config/lb_policy.c +134 -0
  82. data/src/core/client_config/lb_policy.h +143 -0
  83. data/src/core/client_config/lb_policy_factory.c +48 -0
  84. data/src/core/client_config/lb_policy_factory.h +73 -0
  85. data/src/core/client_config/lb_policy_registry.c +88 -0
  86. data/src/core/client_config/lb_policy_registry.h +54 -0
  87. data/src/core/client_config/resolver.c +82 -0
  88. data/src/core/client_config/resolver.h +94 -0
  89. data/src/core/client_config/resolver_factory.c +55 -0
  90. data/src/core/client_config/resolver_factory.h +82 -0
  91. data/src/core/client_config/resolver_registry.c +137 -0
  92. data/src/core/client_config/resolver_registry.h +65 -0
  93. data/src/core/client_config/resolvers/dns_resolver.c +257 -0
  94. data/src/core/client_config/resolvers/dns_resolver.h +42 -0
  95. data/src/core/client_config/resolvers/sockaddr_resolver.c +391 -0
  96. data/src/core/client_config/resolvers/sockaddr_resolver.h +50 -0
  97. data/src/core/client_config/subchannel.c +697 -0
  98. data/src/core/client_config/subchannel.h +165 -0
  99. data/src/core/client_config/subchannel_factory.c +49 -0
  100. data/src/core/client_config/subchannel_factory.h +66 -0
  101. data/src/core/client_config/uri_parser.c +242 -0
  102. data/src/core/client_config/uri_parser.h +51 -0
  103. data/src/core/compression/algorithm.c +166 -0
  104. data/src/core/compression/algorithm_metadata.h +53 -0
  105. data/src/core/compression/message_compress.c +198 -0
  106. data/src/core/compression/message_compress.h +52 -0
  107. data/src/core/debug/trace.c +136 -0
  108. data/src/core/debug/trace.h +43 -0
  109. data/src/core/httpcli/format_request.c +120 -0
  110. data/src/core/httpcli/format_request.h +45 -0
  111. data/src/core/httpcli/httpcli.c +286 -0
  112. data/src/core/httpcli/httpcli.h +162 -0
  113. data/src/core/httpcli/httpcli_security_connector.c +189 -0
  114. data/src/core/httpcli/parser.c +211 -0
  115. data/src/core/httpcli/parser.h +64 -0
  116. data/src/core/iomgr/closure.c +98 -0
  117. data/src/core/iomgr/closure.h +97 -0
  118. data/src/core/iomgr/endpoint.c +67 -0
  119. data/src/core/iomgr/endpoint.h +102 -0
  120. data/src/core/iomgr/endpoint_pair.h +47 -0
  121. data/src/core/iomgr/endpoint_pair_posix.c +82 -0
  122. data/src/core/iomgr/endpoint_pair_windows.c +97 -0
  123. data/src/core/iomgr/exec_ctx.c +72 -0
  124. data/src/core/iomgr/exec_ctx.h +78 -0
  125. data/src/core/iomgr/executor.c +143 -0
  126. data/src/core/iomgr/executor.h +53 -0
  127. data/src/core/iomgr/fd_posix.c +438 -0
  128. data/src/core/iomgr/fd_posix.h +189 -0
  129. data/src/core/iomgr/iocp_windows.c +206 -0
  130. data/src/core/iomgr/iocp_windows.h +56 -0
  131. data/src/core/iomgr/iomgr.c +156 -0
  132. data/src/core/iomgr/iomgr.h +43 -0
  133. data/src/core/iomgr/iomgr_internal.h +58 -0
  134. data/src/core/iomgr/iomgr_posix.c +52 -0
  135. data/src/core/iomgr/iomgr_posix.h +39 -0
  136. data/src/core/iomgr/iomgr_windows.c +73 -0
  137. data/src/core/iomgr/pollset.h +95 -0
  138. data/src/core/iomgr/pollset_multipoller_with_epoll.c +258 -0
  139. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +227 -0
  140. data/src/core/iomgr/pollset_posix.c +638 -0
  141. data/src/core/iomgr/pollset_posix.h +147 -0
  142. data/src/core/iomgr/pollset_set.h +67 -0
  143. data/src/core/iomgr/pollset_set_posix.c +182 -0
  144. data/src/core/iomgr/pollset_set_posix.h +61 -0
  145. data/src/core/iomgr/pollset_set_windows.c +60 -0
  146. data/src/core/iomgr/pollset_set_windows.h +39 -0
  147. data/src/core/iomgr/pollset_windows.c +248 -0
  148. data/src/core/iomgr/pollset_windows.h +79 -0
  149. data/src/core/iomgr/resolve_address.h +72 -0
  150. data/src/core/iomgr/resolve_address_posix.c +183 -0
  151. data/src/core/iomgr/resolve_address_windows.c +166 -0
  152. data/src/core/iomgr/sockaddr.h +47 -0
  153. data/src/core/iomgr/sockaddr_posix.h +44 -0
  154. data/src/core/iomgr/sockaddr_utils.c +234 -0
  155. data/src/core/iomgr/sockaddr_utils.h +89 -0
  156. data/src/core/iomgr/sockaddr_win32.h +46 -0
  157. data/src/core/iomgr/socket_utils_common_posix.c +208 -0
  158. data/src/core/iomgr/socket_utils_linux.c +51 -0
  159. data/src/core/iomgr/socket_utils_posix.c +70 -0
  160. data/src/core/iomgr/socket_utils_posix.h +113 -0
  161. data/src/core/iomgr/socket_windows.c +98 -0
  162. data/src/core/iomgr/socket_windows.h +111 -0
  163. data/src/core/iomgr/tcp_client.h +53 -0
  164. data/src/core/iomgr/tcp_client_posix.c +304 -0
  165. data/src/core/iomgr/tcp_client_windows.c +221 -0
  166. data/src/core/iomgr/tcp_posix.c +485 -0
  167. data/src/core/iomgr/tcp_posix.h +65 -0
  168. data/src/core/iomgr/tcp_server.h +83 -0
  169. data/src/core/iomgr/tcp_server_posix.c +562 -0
  170. data/src/core/iomgr/tcp_server_windows.c +509 -0
  171. data/src/core/iomgr/tcp_windows.c +406 -0
  172. data/src/core/iomgr/tcp_windows.h +57 -0
  173. data/src/core/iomgr/time_averaged_stats.c +77 -0
  174. data/src/core/iomgr/time_averaged_stats.h +88 -0
  175. data/src/core/iomgr/timer.c +345 -0
  176. data/src/core/iomgr/timer.h +89 -0
  177. data/src/core/iomgr/timer_heap.c +148 -0
  178. data/src/core/iomgr/timer_heap.h +57 -0
  179. data/src/core/iomgr/timer_internal.h +61 -0
  180. data/src/core/iomgr/udp_server.c +439 -0
  181. data/src/core/iomgr/udp_server.h +83 -0
  182. data/src/core/iomgr/wakeup_fd_eventfd.c +85 -0
  183. data/src/core/iomgr/wakeup_fd_nospecial.c +51 -0
  184. data/src/core/iomgr/wakeup_fd_pipe.c +97 -0
  185. data/src/core/iomgr/wakeup_fd_pipe.h +41 -0
  186. data/src/core/iomgr/wakeup_fd_posix.c +72 -0
  187. data/src/core/iomgr/wakeup_fd_posix.h +101 -0
  188. data/src/core/iomgr/workqueue.h +85 -0
  189. data/src/core/iomgr/workqueue_posix.c +143 -0
  190. data/src/core/iomgr/workqueue_posix.h +51 -0
  191. data/src/core/iomgr/workqueue_windows.c +40 -0
  192. data/src/core/iomgr/workqueue_windows.h +37 -0
  193. data/src/core/json/json.c +64 -0
  194. data/src/core/json/json.h +88 -0
  195. data/src/core/json/json_common.h +49 -0
  196. data/src/core/json/json_reader.c +660 -0
  197. data/src/core/json/json_reader.h +160 -0
  198. data/src/core/json/json_string.c +379 -0
  199. data/src/core/json/json_writer.c +260 -0
  200. data/src/core/json/json_writer.h +97 -0
  201. data/src/core/profiling/basic_timers.c +274 -0
  202. data/src/core/profiling/stap_timers.c +65 -0
  203. data/src/core/profiling/timers.h +119 -0
  204. data/src/core/security/auth_filters.h +42 -0
  205. data/src/core/security/base64.c +233 -0
  206. data/src/core/security/base64.h +52 -0
  207. data/src/core/security/client_auth_filter.c +337 -0
  208. data/src/core/security/credentials.c +1273 -0
  209. data/src/core/security/credentials.h +376 -0
  210. data/src/core/security/credentials_metadata.c +101 -0
  211. data/src/core/security/credentials_posix.c +61 -0
  212. data/src/core/security/credentials_win32.c +61 -0
  213. data/src/core/security/google_default_credentials.c +260 -0
  214. data/src/core/security/handshake.c +327 -0
  215. data/src/core/security/handshake.h +50 -0
  216. data/src/core/security/json_token.c +405 -0
  217. data/src/core/security/json_token.h +118 -0
  218. data/src/core/security/jwt_verifier.c +842 -0
  219. data/src/core/security/jwt_verifier.h +136 -0
  220. data/src/core/security/secure_endpoint.c +383 -0
  221. data/src/core/security/secure_endpoint.h +49 -0
  222. data/src/core/security/security_connector.c +756 -0
  223. data/src/core/security/security_connector.h +246 -0
  224. data/src/core/security/security_context.c +342 -0
  225. data/src/core/security/security_context.h +114 -0
  226. data/src/core/security/server_auth_filter.c +264 -0
  227. data/src/core/security/server_secure_chttp2.c +268 -0
  228. data/src/core/statistics/census_interface.h +76 -0
  229. data/src/core/statistics/census_rpc_stats.h +101 -0
  230. data/src/core/support/alloc.c +90 -0
  231. data/src/core/support/avl.c +288 -0
  232. data/src/core/support/block_annotate.h +48 -0
  233. data/src/core/support/cmdline.c +347 -0
  234. data/src/core/support/cpu_iphone.c +49 -0
  235. data/src/core/support/cpu_linux.c +78 -0
  236. data/src/core/support/cpu_posix.c +77 -0
  237. data/src/core/support/cpu_windows.c +47 -0
  238. data/src/core/support/env.h +60 -0
  239. data/src/core/support/env_linux.c +62 -0
  240. data/src/core/support/env_posix.c +57 -0
  241. data/src/core/support/env_win32.c +65 -0
  242. data/src/core/support/file.c +91 -0
  243. data/src/core/support/file.h +63 -0
  244. data/src/core/support/file_posix.c +85 -0
  245. data/src/core/support/file_win32.c +84 -0
  246. data/src/core/support/histogram.c +244 -0
  247. data/src/core/support/host_port.c +110 -0
  248. data/src/core/support/log.c +66 -0
  249. data/src/core/support/log_android.c +87 -0
  250. data/src/core/support/log_linux.c +105 -0
  251. data/src/core/support/log_posix.c +102 -0
  252. data/src/core/support/log_win32.c +125 -0
  253. data/src/core/support/murmur_hash.c +96 -0
  254. data/src/core/support/murmur_hash.h +44 -0
  255. data/src/core/support/slice.c +343 -0
  256. data/src/core/support/slice_buffer.c +282 -0
  257. data/src/core/support/stack_lockfree.c +175 -0
  258. data/src/core/support/stack_lockfree.h +53 -0
  259. data/src/core/support/string.c +296 -0
  260. data/src/core/support/string.h +121 -0
  261. data/src/core/support/string_posix.c +86 -0
  262. data/src/core/support/string_win32.c +109 -0
  263. data/src/core/support/string_win32.h +47 -0
  264. data/src/core/support/subprocess_posix.c +112 -0
  265. data/src/core/support/sync.c +122 -0
  266. data/src/core/support/sync_posix.c +104 -0
  267. data/src/core/support/sync_win32.c +128 -0
  268. data/src/core/support/thd.c +64 -0
  269. data/src/core/support/thd_internal.h +39 -0
  270. data/src/core/support/thd_posix.c +94 -0
  271. data/src/core/support/thd_win32.c +117 -0
  272. data/src/core/support/time.c +304 -0
  273. data/src/core/support/time_posix.c +161 -0
  274. data/src/core/support/time_precise.c +89 -0
  275. data/src/core/support/time_precise.h +42 -0
  276. data/src/core/support/time_win32.c +101 -0
  277. data/src/core/support/tls_pthread.c +45 -0
  278. data/src/core/surface/api_trace.c +36 -0
  279. data/src/core/surface/api_trace.h +65 -0
  280. data/src/core/surface/byte_buffer.c +97 -0
  281. data/src/core/surface/byte_buffer_reader.c +123 -0
  282. data/src/core/surface/call.c +1424 -0
  283. data/src/core/surface/call.h +109 -0
  284. data/src/core/surface/call_details.c +50 -0
  285. data/src/core/surface/call_log_batch.c +118 -0
  286. data/src/core/surface/call_test_only.h +64 -0
  287. data/src/core/surface/channel.c +327 -0
  288. data/src/core/surface/channel.h +74 -0
  289. data/src/core/surface/channel_connectivity.c +220 -0
  290. data/src/core/surface/channel_create.c +235 -0
  291. data/src/core/surface/channel_ping.c +79 -0
  292. data/src/core/surface/completion_queue.c +481 -0
  293. data/src/core/surface/completion_queue.h +91 -0
  294. data/src/core/surface/event_string.c +81 -0
  295. data/src/core/surface/event_string.h +42 -0
  296. data/src/core/surface/init.c +168 -0
  297. data/src/core/surface/init.h +40 -0
  298. data/src/core/surface/init_secure.c +42 -0
  299. data/src/core/surface/lame_client.c +149 -0
  300. data/src/core/surface/metadata_array.c +49 -0
  301. data/src/core/surface/secure_channel_create.c +336 -0
  302. data/src/core/surface/server.c +1343 -0
  303. data/src/core/surface/server.h +67 -0
  304. data/src/core/surface/server_chttp2.c +149 -0
  305. data/src/core/surface/server_create.c +51 -0
  306. data/src/core/surface/surface_trace.h +48 -0
  307. data/src/core/surface/validate_metadata.c +73 -0
  308. data/src/core/surface/version.c +39 -0
  309. data/src/core/transport/byte_stream.c +76 -0
  310. data/src/core/transport/byte_stream.h +88 -0
  311. data/src/core/transport/chttp2/alpn.c +56 -0
  312. data/src/core/transport/chttp2/alpn.h +49 -0
  313. data/src/core/transport/chttp2/bin_encoder.c +285 -0
  314. data/src/core/transport/chttp2/bin_encoder.h +54 -0
  315. data/src/core/transport/chttp2/frame.h +69 -0
  316. data/src/core/transport/chttp2/frame_data.c +245 -0
  317. data/src/core/transport/chttp2/frame_data.h +101 -0
  318. data/src/core/transport/chttp2/frame_goaway.c +193 -0
  319. data/src/core/transport/chttp2/frame_goaway.h +77 -0
  320. data/src/core/transport/chttp2/frame_ping.c +97 -0
  321. data/src/core/transport/chttp2/frame_ping.h +56 -0
  322. data/src/core/transport/chttp2/frame_rst_stream.c +100 -0
  323. data/src/core/transport/chttp2/frame_rst_stream.h +55 -0
  324. data/src/core/transport/chttp2/frame_settings.c +259 -0
  325. data/src/core/transport/chttp2/frame_settings.h +103 -0
  326. data/src/core/transport/chttp2/frame_window_update.c +114 -0
  327. data/src/core/transport/chttp2/frame_window_update.h +58 -0
  328. data/src/core/transport/chttp2/hpack_encoder.c +572 -0
  329. data/src/core/transport/chttp2/hpack_encoder.h +95 -0
  330. data/src/core/transport/chttp2/hpack_parser.c +1449 -0
  331. data/src/core/transport/chttp2/hpack_parser.h +116 -0
  332. data/src/core/transport/chttp2/hpack_table.c +361 -0
  333. data/src/core/transport/chttp2/hpack_table.h +108 -0
  334. data/src/core/transport/chttp2/http2_errors.h +56 -0
  335. data/src/core/transport/chttp2/huffsyms.c +297 -0
  336. data/src/core/transport/chttp2/huffsyms.h +48 -0
  337. data/src/core/transport/chttp2/incoming_metadata.c +96 -0
  338. data/src/core/transport/chttp2/incoming_metadata.h +60 -0
  339. data/src/core/transport/chttp2/internal.h +757 -0
  340. data/src/core/transport/chttp2/parsing.c +866 -0
  341. data/src/core/transport/chttp2/status_conversion.c +109 -0
  342. data/src/core/transport/chttp2/status_conversion.h +50 -0
  343. data/src/core/transport/chttp2/stream_lists.c +401 -0
  344. data/src/core/transport/chttp2/stream_map.c +198 -0
  345. data/src/core/transport/chttp2/stream_map.h +85 -0
  346. data/src/core/transport/chttp2/timeout_encoding.c +185 -0
  347. data/src/core/transport/chttp2/timeout_encoding.h +47 -0
  348. data/src/core/transport/chttp2/varint.c +66 -0
  349. data/src/core/transport/chttp2/varint.h +76 -0
  350. data/src/core/transport/chttp2/writing.c +356 -0
  351. data/src/core/transport/chttp2_transport.c +1692 -0
  352. data/src/core/transport/chttp2_transport.h +51 -0
  353. data/src/core/transport/connectivity_state.c +164 -0
  354. data/src/core/transport/connectivity_state.h +85 -0
  355. data/src/core/transport/metadata.c +690 -0
  356. data/src/core/transport/metadata.h +156 -0
  357. data/src/core/transport/metadata_batch.c +194 -0
  358. data/src/core/transport/metadata_batch.h +125 -0
  359. data/src/core/transport/static_metadata.c +90 -0
  360. data/src/core/transport/static_metadata.h +408 -0
  361. data/src/core/transport/transport.c +183 -0
  362. data/src/core/transport/transport.h +222 -0
  363. data/src/core/transport/transport_impl.h +78 -0
  364. data/src/core/transport/transport_op_string.c +140 -0
  365. data/src/core/tsi/fake_transport_security.c +525 -0
  366. data/src/core/tsi/fake_transport_security.h +61 -0
  367. data/src/core/tsi/ssl_transport_security.c +1467 -0
  368. data/src/core/tsi/ssl_transport_security.h +173 -0
  369. data/src/core/tsi/transport_security.c +284 -0
  370. data/src/core/tsi/transport_security.h +111 -0
  371. data/src/core/tsi/transport_security_interface.h +344 -0
  372. data/{bin → src/ruby/bin}/apis/google/protobuf/empty.rb +0 -0
  373. data/{bin → src/ruby/bin}/apis/pubsub_demo.rb +7 -15
  374. data/{bin → src/ruby/bin}/apis/tech/pubsub/proto/pubsub.rb +0 -0
  375. data/{bin → src/ruby/bin}/apis/tech/pubsub/proto/pubsub_services.rb +0 -0
  376. data/{bin → src/ruby/bin}/grpc_ruby_interop_client +0 -0
  377. data/{bin → src/ruby/bin}/grpc_ruby_interop_server +0 -0
  378. data/{bin → src/ruby/bin}/interop/interop_client.rb +0 -0
  379. data/{bin → src/ruby/bin}/interop/interop_server.rb +0 -0
  380. data/src/ruby/bin/math.rb +32 -0
  381. data/{bin → src/ruby/bin}/math_client.rb +1 -1
  382. data/{bin → src/ruby/bin}/math_server.rb +1 -1
  383. data/src/ruby/bin/math_services.rb +27 -0
  384. data/{bin → src/ruby/bin}/noproto_client.rb +1 -1
  385. data/{bin → src/ruby/bin}/noproto_server.rb +1 -1
  386. data/{ext → src/ruby/ext}/grpc/extconf.rb +24 -40
  387. data/{ext → src/ruby/ext}/grpc/rb_byte_buffer.c +0 -0
  388. data/{ext → src/ruby/ext}/grpc/rb_byte_buffer.h +0 -0
  389. data/{ext → src/ruby/ext}/grpc/rb_call.c +80 -18
  390. data/{ext → src/ruby/ext}/grpc/rb_call.h +6 -0
  391. data/src/ruby/ext/grpc/rb_call_credentials.c +315 -0
  392. data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
  393. data/{ext → src/ruby/ext}/grpc/rb_channel.c +19 -7
  394. data/{ext → src/ruby/ext}/grpc/rb_channel.h +0 -0
  395. data/{ext → src/ruby/ext}/grpc/rb_channel_args.c +2 -0
  396. data/{ext → src/ruby/ext}/grpc/rb_channel_args.h +0 -0
  397. data/src/ruby/ext/grpc/rb_channel_credentials.c +266 -0
  398. data/{ext/grpc/rb_credentials.h → src/ruby/ext/grpc/rb_channel_credentials.h} +3 -3
  399. data/{ext → src/ruby/ext}/grpc/rb_completion_queue.c +3 -1
  400. data/{ext → src/ruby/ext}/grpc/rb_completion_queue.h +0 -0
  401. data/src/ruby/ext/grpc/rb_event_thread.c +153 -0
  402. data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
  403. data/{ext → src/ruby/ext}/grpc/rb_grpc.c +25 -5
  404. data/{ext → src/ruby/ext}/grpc/rb_grpc.h +0 -0
  405. data/{ext → src/ruby/ext}/grpc/rb_server.c +4 -1
  406. data/{ext → src/ruby/ext}/grpc/rb_server.h +0 -0
  407. data/{ext → src/ruby/ext}/grpc/rb_server_credentials.c +2 -0
  408. data/{ext → src/ruby/ext}/grpc/rb_server_credentials.h +0 -0
  409. data/{lib → src/ruby/lib}/grpc.rb +6 -1
  410. data/{lib → src/ruby/lib}/grpc/core/time_consts.rb +0 -0
  411. data/{lib → src/ruby/lib}/grpc/errors.rb +0 -0
  412. data/{lib → src/ruby/lib}/grpc/generic/active_call.rb +4 -6
  413. data/{lib → src/ruby/lib}/grpc/generic/bidi_call.rb +16 -4
  414. data/{lib → src/ruby/lib}/grpc/generic/client_stub.rb +42 -52
  415. data/{lib → src/ruby/lib}/grpc/generic/rpc_desc.rb +0 -0
  416. data/{lib → src/ruby/lib}/grpc/generic/rpc_server.rb +15 -8
  417. data/{lib → src/ruby/lib}/grpc/generic/service.rb +4 -2
  418. data/src/ruby/lib/grpc/grpc.so +0 -0
  419. data/{lib → src/ruby/lib}/grpc/logconfig.rb +0 -0
  420. data/{lib → src/ruby/lib}/grpc/notifier.rb +0 -0
  421. data/{lib → src/ruby/lib}/grpc/version.rb +2 -2
  422. data/src/ruby/pb/README.md +42 -0
  423. data/src/ruby/pb/generate_proto_ruby.sh +51 -0
  424. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  425. data/src/ruby/pb/grpc/health/v1alpha/health.rb +29 -0
  426. data/src/ruby/pb/grpc/health/v1alpha/health_services.rb +28 -0
  427. data/src/ruby/pb/test/client.rb +469 -0
  428. data/src/ruby/pb/test/proto/empty.rb +15 -0
  429. data/src/ruby/pb/test/proto/messages.rb +80 -0
  430. data/src/ruby/pb/test/proto/test.rb +14 -0
  431. data/src/ruby/pb/test/proto/test_services.rb +64 -0
  432. data/src/ruby/pb/test/server.rb +253 -0
  433. data/{bin/math_services.rb → src/ruby/spec/call_credentials_spec.rb} +19 -18
  434. data/{spec → src/ruby/spec}/call_spec.rb +10 -1
  435. data/{spec/credentials_spec.rb → src/ruby/spec/channel_credentials_spec.rb} +38 -12
  436. data/{spec → src/ruby/spec}/channel_spec.rb +14 -9
  437. data/{spec → src/ruby/spec}/client_server_spec.rb +31 -2
  438. data/{spec → src/ruby/spec}/completion_queue_spec.rb +0 -0
  439. data/{spec → src/ruby/spec}/generic/active_call_spec.rb +2 -1
  440. data/{spec → src/ruby/spec}/generic/client_stub_spec.rb +27 -67
  441. data/{spec → src/ruby/spec}/generic/rpc_desc_spec.rb +0 -0
  442. data/{spec → src/ruby/spec}/generic/rpc_server_pool_spec.rb +0 -0
  443. data/{spec → src/ruby/spec}/generic/rpc_server_spec.rb +12 -46
  444. data/{spec → src/ruby/spec}/generic/service_spec.rb +6 -3
  445. data/{spec → src/ruby/spec}/pb/health/checker_spec.rb +8 -8
  446. data/{spec → src/ruby/spec}/server_credentials_spec.rb +0 -0
  447. data/{spec → src/ruby/spec}/server_spec.rb +0 -0
  448. data/{spec → src/ruby/spec}/spec_helper.rb +0 -0
  449. data/{spec → src/ruby/spec}/testdata/README +0 -0
  450. data/{spec → src/ruby/spec}/testdata/ca.pem +0 -0
  451. data/{spec → src/ruby/spec}/testdata/server1.key +0 -0
  452. data/src/ruby/spec/testdata/server1.pem +16 -0
  453. data/{spec → src/ruby/spec}/time_consts_spec.rb +0 -0
  454. metadata +496 -97
  455. data/bin/math.proto +0 -80
  456. data/bin/math.rb +0 -61
  457. data/ext/grpc/rb_credentials.c +0 -294
  458. data/lib/grpc/grpc.so +0 -0
  459. data/spec/testdata/server1.pem +0 -16
@@ -0,0 +1,304 @@
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
+ /* Generic implementation of time calls. */
35
+
36
+ #include <grpc/support/time.h>
37
+ #include <limits.h>
38
+ #include <stdio.h>
39
+ #include <string.h>
40
+ #include <grpc/support/log.h>
41
+
42
+ int gpr_time_cmp(gpr_timespec a, gpr_timespec b) {
43
+ int cmp = (a.tv_sec > b.tv_sec) - (a.tv_sec < b.tv_sec);
44
+ GPR_ASSERT(a.clock_type == b.clock_type);
45
+ if (cmp == 0) {
46
+ cmp = (a.tv_nsec > b.tv_nsec) - (a.tv_nsec < b.tv_nsec);
47
+ }
48
+ return cmp;
49
+ }
50
+
51
+ gpr_timespec gpr_time_min(gpr_timespec a, gpr_timespec b) {
52
+ return gpr_time_cmp(a, b) < 0 ? a : b;
53
+ }
54
+
55
+ gpr_timespec gpr_time_max(gpr_timespec a, gpr_timespec b) {
56
+ return gpr_time_cmp(a, b) > 0 ? a : b;
57
+ }
58
+
59
+ gpr_timespec gpr_time_0(gpr_clock_type type) {
60
+ gpr_timespec out;
61
+ out.tv_sec = 0;
62
+ out.tv_nsec = 0;
63
+ out.clock_type = type;
64
+ return out;
65
+ }
66
+
67
+ gpr_timespec gpr_inf_future(gpr_clock_type type) {
68
+ gpr_timespec out;
69
+ out.tv_sec = INT64_MAX;
70
+ out.tv_nsec = 0;
71
+ out.clock_type = type;
72
+ return out;
73
+ }
74
+
75
+ gpr_timespec gpr_inf_past(gpr_clock_type type) {
76
+ gpr_timespec out;
77
+ out.tv_sec = INT64_MIN;
78
+ out.tv_nsec = 0;
79
+ out.clock_type = type;
80
+ return out;
81
+ }
82
+
83
+ /* TODO(ctiller): consider merging _nanos, _micros, _millis into a single
84
+ function for maintainability. Similarly for _seconds, _minutes, and _hours */
85
+
86
+ gpr_timespec gpr_time_from_nanos(long ns, gpr_clock_type type) {
87
+ gpr_timespec result;
88
+ result.clock_type = type;
89
+ if (ns == LONG_MAX) {
90
+ result = gpr_inf_future(type);
91
+ } else if (ns == LONG_MIN) {
92
+ result = gpr_inf_past(type);
93
+ } else if (ns >= 0) {
94
+ result.tv_sec = ns / GPR_NS_PER_SEC;
95
+ result.tv_nsec = (gpr_int32)(ns - result.tv_sec * GPR_NS_PER_SEC);
96
+ } else {
97
+ /* Calculation carefully formulated to avoid any possible under/overflow. */
98
+ result.tv_sec = (-(999999999 - (ns + GPR_NS_PER_SEC)) / GPR_NS_PER_SEC) - 1;
99
+ result.tv_nsec = (gpr_int32)(ns - result.tv_sec * GPR_NS_PER_SEC);
100
+ }
101
+ return result;
102
+ }
103
+
104
+ gpr_timespec gpr_time_from_micros(long us, gpr_clock_type type) {
105
+ gpr_timespec result;
106
+ result.clock_type = type;
107
+ if (us == LONG_MAX) {
108
+ result = gpr_inf_future(type);
109
+ } else if (us == LONG_MIN) {
110
+ result = gpr_inf_past(type);
111
+ } else if (us >= 0) {
112
+ result.tv_sec = us / 1000000;
113
+ result.tv_nsec = (gpr_int32)((us - result.tv_sec * 1000000) * 1000);
114
+ } else {
115
+ /* Calculation carefully formulated to avoid any possible under/overflow. */
116
+ result.tv_sec = (-(999999 - (us + 1000000)) / 1000000) - 1;
117
+ result.tv_nsec = (gpr_int32)((us - result.tv_sec * 1000000) * 1000);
118
+ }
119
+ return result;
120
+ }
121
+
122
+ gpr_timespec gpr_time_from_millis(long ms, gpr_clock_type type) {
123
+ gpr_timespec result;
124
+ result.clock_type = type;
125
+ if (ms == LONG_MAX) {
126
+ result = gpr_inf_future(type);
127
+ } else if (ms == LONG_MIN) {
128
+ result = gpr_inf_past(type);
129
+ } else if (ms >= 0) {
130
+ result.tv_sec = ms / 1000;
131
+ result.tv_nsec = (gpr_int32)((ms - result.tv_sec * 1000) * 1000000);
132
+ } else {
133
+ /* Calculation carefully formulated to avoid any possible under/overflow. */
134
+ result.tv_sec = (-(999 - (ms + 1000)) / 1000) - 1;
135
+ result.tv_nsec = (gpr_int32)((ms - result.tv_sec * 1000) * 1000000);
136
+ }
137
+ return result;
138
+ }
139
+
140
+ gpr_timespec gpr_time_from_seconds(long s, gpr_clock_type type) {
141
+ gpr_timespec result;
142
+ result.clock_type = type;
143
+ if (s == LONG_MAX) {
144
+ result = gpr_inf_future(type);
145
+ } else if (s == LONG_MIN) {
146
+ result = gpr_inf_past(type);
147
+ } else {
148
+ result.tv_sec = s;
149
+ result.tv_nsec = 0;
150
+ }
151
+ return result;
152
+ }
153
+
154
+ gpr_timespec gpr_time_from_minutes(long m, gpr_clock_type type) {
155
+ gpr_timespec result;
156
+ result.clock_type = type;
157
+ if (m >= LONG_MAX / 60) {
158
+ result = gpr_inf_future(type);
159
+ } else if (m <= LONG_MIN / 60) {
160
+ result = gpr_inf_past(type);
161
+ } else {
162
+ result.tv_sec = m * 60;
163
+ result.tv_nsec = 0;
164
+ }
165
+ return result;
166
+ }
167
+
168
+ gpr_timespec gpr_time_from_hours(long h, gpr_clock_type type) {
169
+ gpr_timespec result;
170
+ result.clock_type = type;
171
+ if (h >= LONG_MAX / 3600) {
172
+ result = gpr_inf_future(type);
173
+ } else if (h <= LONG_MIN / 3600) {
174
+ result = gpr_inf_past(type);
175
+ } else {
176
+ result.tv_sec = h * 3600;
177
+ result.tv_nsec = 0;
178
+ }
179
+ return result;
180
+ }
181
+
182
+ gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b) {
183
+ gpr_timespec sum;
184
+ gpr_int64 inc = 0;
185
+ GPR_ASSERT(b.clock_type == GPR_TIMESPAN);
186
+ sum.clock_type = a.clock_type;
187
+ sum.tv_nsec = a.tv_nsec + b.tv_nsec;
188
+ if (sum.tv_nsec >= GPR_NS_PER_SEC) {
189
+ sum.tv_nsec -= GPR_NS_PER_SEC;
190
+ inc++;
191
+ }
192
+ if (a.tv_sec == INT64_MAX || a.tv_sec == INT64_MIN) {
193
+ sum = a;
194
+ } else if (b.tv_sec == INT64_MAX ||
195
+ (b.tv_sec >= 0 && a.tv_sec >= INT64_MAX - b.tv_sec)) {
196
+ sum = gpr_inf_future(sum.clock_type);
197
+ } else if (b.tv_sec == INT64_MIN ||
198
+ (b.tv_sec <= 0 && a.tv_sec <= INT64_MIN - b.tv_sec)) {
199
+ sum = gpr_inf_past(sum.clock_type);
200
+ } else {
201
+ sum.tv_sec = a.tv_sec + b.tv_sec;
202
+ if (inc != 0 && sum.tv_sec == INT64_MAX - 1) {
203
+ sum = gpr_inf_future(sum.clock_type);
204
+ } else {
205
+ sum.tv_sec += inc;
206
+ }
207
+ }
208
+ return sum;
209
+ }
210
+
211
+ gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b) {
212
+ gpr_timespec diff;
213
+ gpr_int64 dec = 0;
214
+ if (b.clock_type == GPR_TIMESPAN) {
215
+ diff.clock_type = a.clock_type;
216
+ } else {
217
+ GPR_ASSERT(a.clock_type == b.clock_type);
218
+ diff.clock_type = GPR_TIMESPAN;
219
+ }
220
+ diff.tv_nsec = a.tv_nsec - b.tv_nsec;
221
+ if (diff.tv_nsec < 0) {
222
+ diff.tv_nsec += GPR_NS_PER_SEC;
223
+ dec++;
224
+ }
225
+ if (a.tv_sec == INT64_MAX || a.tv_sec == INT64_MIN) {
226
+ diff = a;
227
+ } else if (b.tv_sec == INT64_MIN ||
228
+ (b.tv_sec <= 0 && a.tv_sec >= INT64_MAX + b.tv_sec)) {
229
+ diff = gpr_inf_future(GPR_CLOCK_REALTIME);
230
+ } else if (b.tv_sec == INT64_MAX ||
231
+ (b.tv_sec >= 0 && a.tv_sec <= INT64_MIN + b.tv_sec)) {
232
+ diff = gpr_inf_past(GPR_CLOCK_REALTIME);
233
+ } else {
234
+ diff.tv_sec = a.tv_sec - b.tv_sec;
235
+ if (dec != 0 && diff.tv_sec == INT64_MIN + 1) {
236
+ diff = gpr_inf_past(GPR_CLOCK_REALTIME);
237
+ } else {
238
+ diff.tv_sec -= dec;
239
+ }
240
+ }
241
+ return diff;
242
+ }
243
+
244
+ int gpr_time_similar(gpr_timespec a, gpr_timespec b, gpr_timespec threshold) {
245
+ int cmp_ab;
246
+
247
+ GPR_ASSERT(a.clock_type == b.clock_type);
248
+ GPR_ASSERT(threshold.clock_type == GPR_TIMESPAN);
249
+
250
+ cmp_ab = gpr_time_cmp(a, b);
251
+ if (cmp_ab == 0) return 1;
252
+ if (cmp_ab < 0) {
253
+ return gpr_time_cmp(gpr_time_sub(b, a), threshold) <= 0;
254
+ } else {
255
+ return gpr_time_cmp(gpr_time_sub(a, b), threshold) <= 0;
256
+ }
257
+ }
258
+
259
+ gpr_int32 gpr_time_to_millis(gpr_timespec t) {
260
+ if (t.tv_sec >= 2147483) {
261
+ if (t.tv_sec == 2147483 && t.tv_nsec < 648 * GPR_NS_PER_MS) {
262
+ return 2147483 * GPR_MS_PER_SEC + t.tv_nsec / GPR_NS_PER_MS;
263
+ }
264
+ return 2147483647;
265
+ } else if (t.tv_sec <= -2147483) {
266
+ /* TODO(ctiller): correct handling here (it's so far in the past do we
267
+ care?) */
268
+ return -2147483647;
269
+ } else {
270
+ return (gpr_int32)(t.tv_sec * GPR_MS_PER_SEC + t.tv_nsec / GPR_NS_PER_MS);
271
+ }
272
+ }
273
+
274
+ double gpr_timespec_to_micros(gpr_timespec t) {
275
+ return (double)t.tv_sec * GPR_US_PER_SEC + t.tv_nsec * 1e-3;
276
+ }
277
+
278
+ gpr_timespec gpr_convert_clock_type(gpr_timespec t, gpr_clock_type clock_type) {
279
+ if (t.clock_type == clock_type) {
280
+ return t;
281
+ }
282
+
283
+ if (t.tv_nsec == 0) {
284
+ if (t.tv_sec == INT64_MAX) {
285
+ t.clock_type = clock_type;
286
+ return t;
287
+ }
288
+ if (t.tv_sec == INT64_MIN) {
289
+ t.clock_type = clock_type;
290
+ return t;
291
+ }
292
+ }
293
+
294
+ if (clock_type == GPR_TIMESPAN) {
295
+ return gpr_time_sub(t, gpr_now(t.clock_type));
296
+ }
297
+
298
+ if (t.clock_type == GPR_TIMESPAN) {
299
+ return gpr_time_add(gpr_now(clock_type), t);
300
+ }
301
+
302
+ return gpr_time_add(gpr_now(clock_type),
303
+ gpr_time_sub(t, gpr_now(t.clock_type)));
304
+ }
@@ -0,0 +1,161 @@
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
+ #include <grpc/support/port_platform.h>
35
+ #include <src/core/support/time_precise.h>
36
+
37
+ #ifdef GPR_POSIX_TIME
38
+
39
+ #include <stdlib.h>
40
+ #include <time.h>
41
+ #include <unistd.h>
42
+ #include <grpc/support/log.h>
43
+ #include <grpc/support/time.h>
44
+ #include "src/core/support/block_annotate.h"
45
+
46
+ static struct timespec timespec_from_gpr(gpr_timespec gts) {
47
+ struct timespec rv;
48
+ if (sizeof(time_t) < sizeof(gpr_int64)) {
49
+ /* fine to assert, as this is only used in gpr_sleep_until */
50
+ GPR_ASSERT(gts.tv_sec <= INT32_MAX && gts.tv_sec >= INT32_MIN);
51
+ }
52
+ rv.tv_sec = (time_t)gts.tv_sec;
53
+ rv.tv_nsec = gts.tv_nsec;
54
+ return rv;
55
+ }
56
+
57
+ #if _POSIX_TIMERS > 0
58
+ static gpr_timespec gpr_from_timespec(struct timespec ts,
59
+ gpr_clock_type clock_type) {
60
+ /*
61
+ * timespec.tv_sec can have smaller size than gpr_timespec.tv_sec,
62
+ * but we are only using this function to implement gpr_now
63
+ * so there's no need to handle "infinity" values.
64
+ */
65
+ gpr_timespec rv;
66
+ rv.tv_sec = ts.tv_sec;
67
+ rv.tv_nsec = (gpr_int32)ts.tv_nsec;
68
+ rv.clock_type = clock_type;
69
+ return rv;
70
+ }
71
+
72
+ /** maps gpr_clock_type --> clockid_t for clock_gettime */
73
+ static clockid_t clockid_for_gpr_clock[] = {CLOCK_MONOTONIC, CLOCK_REALTIME};
74
+
75
+ void gpr_time_init(void) { gpr_precise_clock_init(); }
76
+
77
+ gpr_timespec gpr_now(gpr_clock_type clock_type) {
78
+ struct timespec now;
79
+ GPR_ASSERT(clock_type != GPR_TIMESPAN);
80
+ if (clock_type == GPR_CLOCK_PRECISE) {
81
+ gpr_timespec ret;
82
+ gpr_precise_clock_now(&ret);
83
+ return ret;
84
+ } else {
85
+ clock_gettime(clockid_for_gpr_clock[clock_type], &now);
86
+ return gpr_from_timespec(now, clock_type);
87
+ }
88
+ }
89
+ #else
90
+ /* For some reason Apple's OSes haven't implemented clock_gettime. */
91
+
92
+ #include <sys/time.h>
93
+ #include <mach/mach.h>
94
+ #include <mach/mach_time.h>
95
+
96
+ static double g_time_scale;
97
+ static uint64_t g_time_start;
98
+
99
+ void gpr_time_init(void) {
100
+ mach_timebase_info_data_t tb = {0, 1};
101
+ gpr_precise_clock_init();
102
+ mach_timebase_info(&tb);
103
+ g_time_scale = tb.numer;
104
+ g_time_scale /= tb.denom;
105
+ g_time_start = mach_absolute_time();
106
+ }
107
+
108
+ gpr_timespec gpr_now(gpr_clock_type clock) {
109
+ gpr_timespec now;
110
+ struct timeval now_tv;
111
+ double now_dbl;
112
+
113
+ now.clock_type = clock;
114
+ switch (clock) {
115
+ case GPR_CLOCK_REALTIME:
116
+ gettimeofday(&now_tv, NULL);
117
+ now.tv_sec = now_tv.tv_sec;
118
+ now.tv_nsec = now_tv.tv_usec * 1000;
119
+ break;
120
+ case GPR_CLOCK_MONOTONIC:
121
+ now_dbl = (mach_absolute_time() - g_time_start) * g_time_scale;
122
+ now.tv_sec = (gpr_int64)(now_dbl * 1e-9);
123
+ now.tv_nsec = (gpr_int32)(now_dbl - ((double)now.tv_sec) * 1e9);
124
+ break;
125
+ case GPR_CLOCK_PRECISE:
126
+ gpr_precise_clock_now(&now);
127
+ break;
128
+ case GPR_TIMESPAN:
129
+ abort();
130
+ }
131
+
132
+ return now;
133
+ }
134
+ #endif
135
+
136
+ void gpr_sleep_until(gpr_timespec until) {
137
+ gpr_timespec now;
138
+ gpr_timespec delta;
139
+ struct timespec delta_ts;
140
+ int ns_result;
141
+
142
+ for (;;) {
143
+ /* We could simplify by using clock_nanosleep instead, but it might be
144
+ * slightly less portable. */
145
+ now = gpr_now(until.clock_type);
146
+ if (gpr_time_cmp(until, now) <= 0) {
147
+ return;
148
+ }
149
+
150
+ delta = gpr_time_sub(until, now);
151
+ delta_ts = timespec_from_gpr(delta);
152
+ GRPC_SCHEDULING_START_BLOCKING_REGION;
153
+ ns_result = nanosleep(&delta_ts, NULL);
154
+ GRPC_SCHEDULING_END_BLOCKING_REGION;
155
+ if (ns_result == 0) {
156
+ break;
157
+ }
158
+ }
159
+ }
160
+
161
+ #endif /* GPR_POSIX_TIME */