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,46 @@
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_RB_CALL_CREDENTIALS_H_
35
+ #define GRPC_RB_CALL_CREDENTIALS_H_
36
+
37
+ #include <ruby/ruby.h>
38
+
39
+ #include <grpc/grpc_security.h>
40
+
41
+ /* Initializes the ruby CallCredentials class. */
42
+ void Init_grpc_call_credentials();
43
+
44
+ grpc_call_credentials* grpc_rb_get_wrapped_call_credentials(VALUE v);
45
+
46
+ #endif /* GRPC_RB_CALL_CREDENTIALS_H_ */
@@ -41,8 +41,8 @@
41
41
  #include "rb_grpc.h"
42
42
  #include "rb_call.h"
43
43
  #include "rb_channel_args.h"
44
+ #include "rb_channel_credentials.h"
44
45
  #include "rb_completion_queue.h"
45
- #include "rb_credentials.h"
46
46
  #include "rb_server.h"
47
47
 
48
48
  /* id_channel is the name of the hidden ivar that preserves a reference to the
@@ -59,6 +59,9 @@ static ID id_target;
59
59
  * GCed before the channel */
60
60
  static ID id_cqueue;
61
61
 
62
+ /* id_insecure_channel is used to indicate that a channel is insecure */
63
+ static VALUE id_insecure_channel;
64
+
62
65
  /* grpc_rb_cChannel is the ruby class that proxies grpc_channel. */
63
66
  static VALUE grpc_rb_cChannel = Qnil;
64
67
 
@@ -111,7 +114,9 @@ static rb_data_type_t grpc_channel_data_type = {
111
114
  {grpc_rb_channel_mark, grpc_rb_channel_free, GRPC_RB_MEMSIZE_UNAVAILABLE,
112
115
  {NULL, NULL}},
113
116
  NULL, NULL,
117
+ #ifdef RUBY_TYPED_FREE_IMMEDIATELY
114
118
  RUBY_TYPED_FREE_IMMEDIATELY
119
+ #endif
115
120
  };
116
121
 
117
122
  /* Allocates grpc_rb_channel instances. */
@@ -124,7 +129,8 @@ static VALUE grpc_rb_channel_alloc(VALUE cls) {
124
129
 
125
130
  /*
126
131
  call-seq:
127
- insecure_channel = Channel:new("myhost:8080", {'arg1': 'value1'})
132
+ insecure_channel = Channel:new("myhost:8080", {'arg1': 'value1'},
133
+ :this_channel_is_insecure)
128
134
  creds = ...
129
135
  secure_channel = Channel:new("myhost:443", {'arg1': 'value1'}, creds)
130
136
 
@@ -134,22 +140,27 @@ static VALUE grpc_rb_channel_init(int argc, VALUE *argv, VALUE self) {
134
140
  VALUE credentials = Qnil;
135
141
  VALUE target = Qnil;
136
142
  grpc_rb_channel *wrapper = NULL;
137
- grpc_credentials *creds = NULL;
138
143
  grpc_channel *ch = NULL;
144
+ grpc_channel_credentials *creds = NULL;
139
145
  char *target_chars = NULL;
140
146
  grpc_channel_args args;
141
147
  MEMZERO(&args, grpc_channel_args, 1);
142
148
 
143
- /* "21" == 2 mandatory args, 1 (credentials) is optional */
144
- rb_scan_args(argc, argv, "21", &target, &channel_args, &credentials);
149
+ /* "3" == 3 mandatory args */
150
+ rb_scan_args(argc, argv, "3", &target, &channel_args, &credentials);
145
151
 
146
152
  TypedData_Get_Struct(self, grpc_rb_channel, &grpc_channel_data_type, wrapper);
147
153
  target_chars = StringValueCStr(target);
148
154
  grpc_rb_hash_convert_to_channel_args(channel_args, &args);
149
- if (credentials == Qnil) {
155
+ if (TYPE(credentials) == T_SYMBOL) {
156
+ if (id_insecure_channel != SYM2ID(credentials)) {
157
+ rb_raise(rb_eTypeError,
158
+ "bad creds symbol, want :this_channel_is_insecure");
159
+ return Qnil;
160
+ }
150
161
  ch = grpc_insecure_channel_create(target_chars, &args, NULL);
151
162
  } else {
152
- creds = grpc_rb_get_wrapped_credentials(credentials);
163
+ creds = grpc_rb_get_wrapped_channel_credentials(credentials);
153
164
  ch = grpc_secure_channel_create(creds, target_chars, &args, NULL);
154
165
  }
155
166
  if (args.args != NULL) {
@@ -406,6 +417,7 @@ void Init_grpc_channel() {
406
417
  ID2SYM(rb_intern(GRPC_ARG_MAX_CONCURRENT_STREAMS)));
407
418
  rb_define_const(grpc_rb_cChannel, "MAX_MESSAGE_LENGTH",
408
419
  ID2SYM(rb_intern(GRPC_ARG_MAX_MESSAGE_LENGTH)));
420
+ id_insecure_channel = rb_intern("this_channel_is_insecure");
409
421
  Init_grpc_propagate_masks();
410
422
  Init_grpc_connectivity_states();
411
423
  }
File without changes
@@ -44,7 +44,9 @@ static rb_data_type_t grpc_rb_channel_args_data_type = {
44
44
  {GRPC_RB_GC_NOT_MARKED, GRPC_RB_GC_DONT_FREE, GRPC_RB_MEMSIZE_UNAVAILABLE,
45
45
  {NULL, NULL}},
46
46
  NULL, NULL,
47
+ #ifdef RUBY_TYPED_FREE_IMMEDIATELY
47
48
  RUBY_TYPED_FREE_IMMEDIATELY
49
+ #endif
48
50
  };
49
51
 
50
52
  /* A callback the processes the hash key values in channel_args hash */
@@ -0,0 +1,266 @@
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 "rb_channel_credentials.h"
35
+
36
+ #include <ruby/ruby.h>
37
+
38
+ #include <grpc/grpc.h>
39
+ #include <grpc/grpc_security.h>
40
+ #include <grpc/support/log.h>
41
+
42
+ #include "rb_call_credentials.h"
43
+ #include "rb_grpc.h"
44
+
45
+ /* grpc_rb_cChannelCredentials is the ruby class that proxies
46
+ grpc_channel_credentials. */
47
+ static VALUE grpc_rb_cChannelCredentials = Qnil;
48
+
49
+ /* grpc_rb_channel_credentials wraps a grpc_channel_credentials. It provides a
50
+ * peer ruby object, 'mark' to minimize copying when a credential is
51
+ * created from ruby. */
52
+ typedef struct grpc_rb_channel_credentials {
53
+ /* Holder of ruby objects involved in constructing the credentials */
54
+ VALUE mark;
55
+
56
+ /* The actual credentials */
57
+ grpc_channel_credentials *wrapped;
58
+ } grpc_rb_channel_credentials;
59
+
60
+ /* Destroys the credentials instances. */
61
+ static void grpc_rb_channel_credentials_free(void *p) {
62
+ grpc_rb_channel_credentials *wrapper = NULL;
63
+ if (p == NULL) {
64
+ return;
65
+ };
66
+ wrapper = (grpc_rb_channel_credentials *)p;
67
+
68
+ /* Delete the wrapped object if the mark object is Qnil, which indicates that
69
+ * no other object is the actual owner. */
70
+ if (wrapper->wrapped != NULL && wrapper->mark == Qnil) {
71
+ grpc_channel_credentials_release(wrapper->wrapped);
72
+ wrapper->wrapped = NULL;
73
+ }
74
+
75
+ xfree(p);
76
+ }
77
+
78
+ /* Protects the mark object from GC */
79
+ static void grpc_rb_channel_credentials_mark(void *p) {
80
+ grpc_rb_channel_credentials *wrapper = NULL;
81
+ if (p == NULL) {
82
+ return;
83
+ }
84
+ wrapper = (grpc_rb_channel_credentials *)p;
85
+
86
+ /* If it's not already cleaned up, mark the mark object */
87
+ if (wrapper->mark != Qnil) {
88
+ rb_gc_mark(wrapper->mark);
89
+ }
90
+ }
91
+
92
+ static rb_data_type_t grpc_rb_channel_credentials_data_type = {
93
+ "grpc_channel_credentials",
94
+ {grpc_rb_channel_credentials_mark, grpc_rb_channel_credentials_free,
95
+ GRPC_RB_MEMSIZE_UNAVAILABLE, {NULL, NULL}},
96
+ NULL,
97
+ NULL,
98
+ #ifdef RUBY_TYPED_FREE_IMMEDIATELY
99
+ RUBY_TYPED_FREE_IMMEDIATELY
100
+ #endif
101
+ };
102
+
103
+ /* Allocates ChannelCredential instances.
104
+ Provides safe initial defaults for the instance fields. */
105
+ static VALUE grpc_rb_channel_credentials_alloc(VALUE cls) {
106
+ grpc_rb_channel_credentials *wrapper = ALLOC(grpc_rb_channel_credentials);
107
+ wrapper->wrapped = NULL;
108
+ wrapper->mark = Qnil;
109
+ return TypedData_Wrap_Struct(cls, &grpc_rb_channel_credentials_data_type, wrapper);
110
+ }
111
+
112
+ /* Creates a wrapping object for a given channel credentials. This should only
113
+ * be called with grpc_channel_credentials objects that are not already
114
+ * associated with any Ruby object. */
115
+ VALUE grpc_rb_wrap_channel_credentials(grpc_channel_credentials *c) {
116
+ VALUE rb_wrapper;
117
+ grpc_rb_channel_credentials *wrapper;
118
+ if (c == NULL) {
119
+ return Qnil;
120
+ }
121
+ rb_wrapper = grpc_rb_channel_credentials_alloc(grpc_rb_cChannelCredentials);
122
+ TypedData_Get_Struct(rb_wrapper, grpc_rb_channel_credentials,
123
+ &grpc_rb_channel_credentials_data_type, wrapper);
124
+ wrapper->wrapped = c;
125
+ return rb_wrapper;
126
+ }
127
+
128
+ /* Clones ChannelCredentials instances.
129
+ Gives ChannelCredentials a consistent implementation of Ruby's object copy/dup
130
+ protocol. */
131
+ static VALUE grpc_rb_channel_credentials_init_copy(VALUE copy, VALUE orig) {
132
+ grpc_rb_channel_credentials *orig_cred = NULL;
133
+ grpc_rb_channel_credentials *copy_cred = NULL;
134
+
135
+ if (copy == orig) {
136
+ return copy;
137
+ }
138
+
139
+ /* Raise an error if orig is not a credentials object or a subclass. */
140
+ if (TYPE(orig) != T_DATA ||
141
+ RDATA(orig)->dfree != (RUBY_DATA_FUNC)grpc_rb_channel_credentials_free) {
142
+ rb_raise(rb_eTypeError, "not a %s",
143
+ rb_obj_classname(grpc_rb_cChannelCredentials));
144
+ }
145
+
146
+ TypedData_Get_Struct(orig, grpc_rb_channel_credentials,
147
+ &grpc_rb_channel_credentials_data_type, orig_cred);
148
+ TypedData_Get_Struct(copy, grpc_rb_channel_credentials,
149
+ &grpc_rb_channel_credentials_data_type, copy_cred);
150
+
151
+ /* use ruby's MEMCPY to make a byte-for-byte copy of the credentials
152
+ * wrapper object. */
153
+ MEMCPY(copy_cred, orig_cred, grpc_rb_channel_credentials, 1);
154
+ return copy;
155
+ }
156
+
157
+
158
+ /* The attribute used on the mark object to hold the pem_root_certs. */
159
+ static ID id_pem_root_certs;
160
+
161
+ /* The attribute used on the mark object to hold the pem_private_key. */
162
+ static ID id_pem_private_key;
163
+
164
+ /* The attribute used on the mark object to hold the pem_private_key. */
165
+ static ID id_pem_cert_chain;
166
+
167
+ /*
168
+ call-seq:
169
+ creds1 = Credentials.new()
170
+ ...
171
+ creds2 = Credentials.new(pem_root_certs)
172
+ ...
173
+ creds3 = Credentials.new(pem_root_certs, pem_private_key,
174
+ pem_cert_chain)
175
+ pem_root_certs: (optional) PEM encoding of the server root certificate
176
+ pem_private_key: (optional) PEM encoding of the client's private key
177
+ pem_cert_chain: (optional) PEM encoding of the client's cert chain
178
+ Initializes Credential instances. */
179
+ static VALUE grpc_rb_channel_credentials_init(int argc, VALUE *argv, VALUE self) {
180
+ VALUE pem_root_certs = Qnil;
181
+ VALUE pem_private_key = Qnil;
182
+ VALUE pem_cert_chain = Qnil;
183
+ grpc_rb_channel_credentials *wrapper = NULL;
184
+ grpc_channel_credentials *creds = NULL;
185
+ grpc_ssl_pem_key_cert_pair key_cert_pair;
186
+ const char *pem_root_certs_cstr = NULL;
187
+ MEMZERO(&key_cert_pair, grpc_ssl_pem_key_cert_pair, 1);
188
+ /* "03" == no mandatory arg, 3 optional */
189
+ rb_scan_args(argc, argv, "03", &pem_root_certs, &pem_private_key,
190
+ &pem_cert_chain);
191
+
192
+ TypedData_Get_Struct(self, grpc_rb_channel_credentials,
193
+ &grpc_rb_channel_credentials_data_type, wrapper);
194
+ if (pem_root_certs != Qnil) {
195
+ pem_root_certs_cstr = RSTRING_PTR(pem_root_certs);
196
+ }
197
+ if (pem_private_key == Qnil && pem_cert_chain == Qnil) {
198
+ creds = grpc_ssl_credentials_create(pem_root_certs_cstr, NULL, NULL);
199
+ } else {
200
+ key_cert_pair.private_key = RSTRING_PTR(pem_private_key);
201
+ key_cert_pair.cert_chain = RSTRING_PTR(pem_cert_chain);
202
+ creds = grpc_ssl_credentials_create(pem_root_certs_cstr,
203
+ &key_cert_pair, NULL);
204
+ }
205
+ if (creds == NULL) {
206
+ rb_raise(rb_eRuntimeError, "could not create a credentials, not sure why");
207
+ return Qnil;
208
+ }
209
+ wrapper->wrapped = creds;
210
+
211
+ /* Add the input objects as hidden fields to preserve them. */
212
+ rb_ivar_set(self, id_pem_cert_chain, pem_cert_chain);
213
+ rb_ivar_set(self, id_pem_private_key, pem_private_key);
214
+ rb_ivar_set(self, id_pem_root_certs, pem_root_certs);
215
+
216
+ return self;
217
+ }
218
+
219
+ static VALUE grpc_rb_channel_credentials_compose(int argc, VALUE *argv,
220
+ VALUE self) {
221
+ grpc_channel_credentials *creds;
222
+ grpc_call_credentials *other;
223
+ if (argc == 0) {
224
+ return self;
225
+ }
226
+ creds = grpc_rb_get_wrapped_channel_credentials(self);
227
+ for (int i = 0; i < argc; i++) {
228
+ other = grpc_rb_get_wrapped_call_credentials(argv[i]);
229
+ creds = grpc_composite_channel_credentials_create(creds, other, NULL);
230
+ if (creds == NULL) {
231
+ rb_raise(rb_eRuntimeError,
232
+ "Failed to compose channel and call credentials");
233
+ }
234
+ }
235
+ return grpc_rb_wrap_channel_credentials(creds);
236
+ }
237
+
238
+ void Init_grpc_channel_credentials() {
239
+ grpc_rb_cChannelCredentials =
240
+ rb_define_class_under(grpc_rb_mGrpcCore, "ChannelCredentials", rb_cObject);
241
+
242
+ /* Allocates an object managed by the ruby runtime */
243
+ rb_define_alloc_func(grpc_rb_cChannelCredentials,
244
+ grpc_rb_channel_credentials_alloc);
245
+
246
+ /* Provides a ruby constructor and support for dup/clone. */
247
+ rb_define_method(grpc_rb_cChannelCredentials, "initialize",
248
+ grpc_rb_channel_credentials_init, -1);
249
+ rb_define_method(grpc_rb_cChannelCredentials, "initialize_copy",
250
+ grpc_rb_channel_credentials_init_copy, 1);
251
+ rb_define_method(grpc_rb_cChannelCredentials, "compose",
252
+ grpc_rb_channel_credentials_compose, -1);
253
+
254
+ id_pem_cert_chain = rb_intern("__pem_cert_chain");
255
+ id_pem_private_key = rb_intern("__pem_private_key");
256
+ id_pem_root_certs = rb_intern("__pem_root_certs");
257
+ }
258
+
259
+ /* Gets the wrapped grpc_channel_credentials from the ruby wrapper */
260
+ grpc_channel_credentials *grpc_rb_get_wrapped_channel_credentials(VALUE v) {
261
+ grpc_rb_channel_credentials *wrapper = NULL;
262
+ TypedData_Get_Struct(v, grpc_rb_channel_credentials,
263
+ &grpc_rb_channel_credentials_data_type,
264
+ wrapper);
265
+ return wrapper->wrapped;
266
+ }
@@ -38,10 +38,10 @@
38
38
 
39
39
  #include <grpc/grpc_security.h>
40
40
 
41
- /* Initializes the ruby Credentials class. */
42
- void Init_grpc_credentials();
41
+ /* Initializes the ruby ChannelCredentials class. */
42
+ void Init_grpc_channel_credentials();
43
43
 
44
44
  /* Gets the wrapped credentials from the ruby wrapper */
45
- grpc_credentials* grpc_rb_get_wrapped_credentials(VALUE v);
45
+ grpc_channel_credentials* grpc_rb_get_wrapped_channel_credentials(VALUE v);
46
46
 
47
47
  #endif /* GRPC_RB_CREDENTIALS_H_ */
@@ -121,9 +121,11 @@ static rb_data_type_t grpc_rb_completion_queue_data_type = {
121
121
  {GRPC_RB_GC_NOT_MARKED, grpc_rb_completion_queue_destroy,
122
122
  GRPC_RB_MEMSIZE_UNAVAILABLE, {NULL, NULL}},
123
123
  NULL, NULL,
124
+ #ifdef RUBY_TYPED_FREE_IMMEDIATELY
124
125
  /* cannot immediately free because grpc_rb_completion_queue_shutdown_drain
125
126
  * calls rb_thread_call_without_gvl. */
126
- 0
127
+ 0,
128
+ #endif
127
129
  };
128
130
 
129
131
  /* Allocates a completion queue. */
@@ -0,0 +1,153 @@
1
+ /*
2
+ *
3
+ * Copyright 2016, Google Inc.
4
+ * All rights reserved.
5
+ *
6
+ * Redistribution and use in source and binary forms, with or without
7
+ * modification, are permitted provided that the following conditions are
8
+ * met:
9
+ *
10
+ * * Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ * * Redistributions in binary form must reproduce the above
13
+ * copyright notice, this list of conditions and the following disclaimer
14
+ * in the documentation and/or other materials provided with the
15
+ * distribution.
16
+ * * Neither the name of Google Inc. nor the names of its
17
+ * contributors may be used to endorse or promote products derived from
18
+ * this software without specific prior written permission.
19
+ *
20
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ */
33
+
34
+ #include "rb_event_thread.h"
35
+
36
+ #include <stdbool.h>
37
+
38
+ #include <ruby/ruby.h>
39
+ #include <ruby/thread.h>
40
+ #include <grpc/support/alloc.h>
41
+ #include <grpc/support/sync.h>
42
+ #include <grpc/support/time.h>
43
+ #include <grpc/support/log.h>
44
+
45
+ typedef struct grpc_rb_event {
46
+ // callback will be called with argument while holding the GVL
47
+ void (*callback)(void*);
48
+ void *argument;
49
+
50
+ struct grpc_rb_event *next;
51
+ } grpc_rb_event;
52
+
53
+ typedef struct grpc_rb_event_queue {
54
+ grpc_rb_event *head;
55
+ grpc_rb_event *tail;
56
+
57
+ gpr_mu mu;
58
+ gpr_cv cv;
59
+
60
+ // Indicates that the thread should stop waiting
61
+ bool abort;
62
+ } grpc_rb_event_queue;
63
+
64
+ static grpc_rb_event_queue event_queue;
65
+
66
+ void grpc_rb_event_queue_enqueue(void (*callback)(void*),
67
+ void *argument) {
68
+ grpc_rb_event *event = gpr_malloc(sizeof(grpc_rb_event));
69
+ event->callback = callback;
70
+ event->argument = argument;
71
+ event->next = NULL;
72
+ gpr_mu_lock(&event_queue.mu);
73
+ if (event_queue.tail == NULL) {
74
+ event_queue.head = event_queue.tail = event;
75
+ } else {
76
+ event_queue.tail->next = event;
77
+ event_queue.tail = event;
78
+ }
79
+ gpr_cv_signal(&event_queue.cv);
80
+ gpr_mu_unlock(&event_queue.mu);
81
+ }
82
+
83
+ static grpc_rb_event *grpc_rb_event_queue_dequeue() {
84
+ grpc_rb_event *event;
85
+ if (event_queue.head == NULL) {
86
+ event = NULL;
87
+ } else {
88
+ event = event_queue.head;
89
+ if (event_queue.head->next == NULL) {
90
+ event_queue.head = event_queue.tail = NULL;
91
+ } else {
92
+ event_queue.head = event_queue.head->next;
93
+ }
94
+ }
95
+ return event;
96
+ }
97
+
98
+ static void grpc_rb_event_queue_destroy() {
99
+ gpr_mu_destroy(&event_queue.mu);
100
+ gpr_cv_destroy(&event_queue.cv);
101
+ }
102
+
103
+ static void *grpc_rb_wait_for_event_no_gil(void *param) {
104
+ grpc_rb_event *event = NULL;
105
+ gpr_mu_lock(&event_queue.mu);
106
+ while ((event = grpc_rb_event_queue_dequeue()) == NULL) {
107
+ gpr_cv_wait(&event_queue.cv,
108
+ &event_queue.mu,
109
+ gpr_inf_future(GPR_CLOCK_REALTIME));
110
+ if (event_queue.abort) {
111
+ gpr_mu_unlock(&event_queue.mu);
112
+ return NULL;
113
+ }
114
+ }
115
+ gpr_mu_unlock(&event_queue.mu);
116
+ return event;
117
+ }
118
+
119
+ static void grpc_rb_event_unblocking_func(void *arg) {
120
+ gpr_mu_lock(&event_queue.mu);
121
+ event_queue.abort = true;
122
+ gpr_cv_signal(&event_queue.cv);
123
+ gpr_mu_unlock(&event_queue.mu);
124
+ }
125
+
126
+ /* This is the implementation of the thread that handles auth metadata plugin
127
+ * events */
128
+ static VALUE grpc_rb_event_thread(VALUE arg) {
129
+ grpc_rb_event *event;
130
+ while(true) {
131
+ event = (grpc_rb_event*)rb_thread_call_without_gvl(
132
+ grpc_rb_wait_for_event_no_gil, NULL,
133
+ grpc_rb_event_unblocking_func, NULL);
134
+ if (event == NULL) {
135
+ // Indicates that the thread needs to shut down
136
+ break;
137
+ } else {
138
+ event->callback(event->argument);
139
+ gpr_free(event);
140
+ }
141
+ }
142
+ grpc_rb_event_queue_destroy();
143
+ return Qnil;
144
+ }
145
+
146
+ void grpc_rb_event_queue_thread_start() {
147
+ event_queue.head = event_queue.tail = NULL;
148
+ event_queue.abort = false;
149
+ gpr_mu_init(&event_queue.mu);
150
+ gpr_cv_init(&event_queue.cv);
151
+
152
+ rb_thread_create(grpc_rb_event_thread, NULL);
153
+ }