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,74 @@
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_INTERNAL_CORE_SURFACE_CHANNEL_H
35
+ #define GRPC_INTERNAL_CORE_SURFACE_CHANNEL_H
36
+
37
+ #include "src/core/channel/channel_stack.h"
38
+ #include "src/core/client_config/subchannel_factory.h"
39
+
40
+ grpc_channel *grpc_channel_create_from_filters(
41
+ grpc_exec_ctx *exec_ctx, const char *target,
42
+ const grpc_channel_filter **filters, size_t count,
43
+ const grpc_channel_args *args, int is_client);
44
+
45
+ /** Get a (borrowed) pointer to this channels underlying channel stack */
46
+ grpc_channel_stack *grpc_channel_get_channel_stack(grpc_channel *channel);
47
+
48
+ /** Get a grpc_mdelem of grpc-status: X where X is the numeric value of
49
+ status_code.
50
+
51
+ The returned elem is owned by the caller. */
52
+ grpc_mdelem *grpc_channel_get_reffed_status_elem(grpc_channel *channel,
53
+ int status_code);
54
+ gpr_uint32 grpc_channel_get_max_message_length(grpc_channel *channel);
55
+
56
+ #ifdef GRPC_STREAM_REFCOUNT_DEBUG
57
+ void grpc_channel_internal_ref(grpc_channel *channel, const char *reason);
58
+ void grpc_channel_internal_unref(grpc_exec_ctx *exec_ctx, grpc_channel *channel,
59
+ const char *reason);
60
+ #define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
61
+ grpc_channel_internal_ref(channel, reason)
62
+ #define GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, reason) \
63
+ grpc_channel_internal_unref(exec_ctx, channel, reason)
64
+ #else
65
+ void grpc_channel_internal_ref(grpc_channel *channel);
66
+ void grpc_channel_internal_unref(grpc_exec_ctx *exec_ctx,
67
+ grpc_channel *channel);
68
+ #define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
69
+ grpc_channel_internal_ref(channel)
70
+ #define GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, reason) \
71
+ grpc_channel_internal_unref(exec_ctx, channel)
72
+ #endif
73
+
74
+ #endif /* GRPC_INTERNAL_CORE_SURFACE_CHANNEL_H */
@@ -0,0 +1,220 @@
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 "src/core/surface/channel.h"
35
+
36
+ #include <grpc/support/alloc.h>
37
+ #include <grpc/support/log.h>
38
+
39
+ #include "src/core/channel/client_channel.h"
40
+ #include "src/core/channel/client_uchannel.h"
41
+ #include "src/core/iomgr/timer.h"
42
+ #include "src/core/surface/api_trace.h"
43
+ #include "src/core/surface/completion_queue.h"
44
+
45
+ grpc_connectivity_state grpc_channel_check_connectivity_state(
46
+ grpc_channel *channel, int try_to_connect) {
47
+ /* forward through to the underlying client channel */
48
+ grpc_channel_element *client_channel_elem =
49
+ grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
50
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
51
+ grpc_connectivity_state state;
52
+ GRPC_API_TRACE(
53
+ "grpc_channel_check_connectivity_state(channel=%p, try_to_connect=%d)", 2,
54
+ (channel, try_to_connect));
55
+ if (client_channel_elem->filter == &grpc_client_channel_filter) {
56
+ state = grpc_client_channel_check_connectivity_state(
57
+ &exec_ctx, client_channel_elem, try_to_connect);
58
+ grpc_exec_ctx_finish(&exec_ctx);
59
+ return state;
60
+ }
61
+ if (client_channel_elem->filter == &grpc_client_uchannel_filter) {
62
+ state = grpc_client_uchannel_check_connectivity_state(
63
+ &exec_ctx, client_channel_elem, try_to_connect);
64
+ grpc_exec_ctx_finish(&exec_ctx);
65
+ return state;
66
+ }
67
+ gpr_log(GPR_ERROR,
68
+ "grpc_channel_check_connectivity_state called on something that is "
69
+ "not a (u)client channel, but '%s'",
70
+ client_channel_elem->filter->name);
71
+ grpc_exec_ctx_finish(&exec_ctx);
72
+ return GRPC_CHANNEL_FATAL_FAILURE;
73
+ }
74
+
75
+ typedef enum {
76
+ WAITING,
77
+ CALLING_BACK,
78
+ CALLING_BACK_AND_FINISHED,
79
+ CALLED_BACK
80
+ } callback_phase;
81
+
82
+ typedef struct {
83
+ gpr_mu mu;
84
+ callback_phase phase;
85
+ int success;
86
+ grpc_closure on_complete;
87
+ grpc_timer alarm;
88
+ grpc_connectivity_state state;
89
+ grpc_completion_queue *cq;
90
+ grpc_cq_completion completion_storage;
91
+ grpc_channel *channel;
92
+ void *tag;
93
+ } state_watcher;
94
+
95
+ static void delete_state_watcher(grpc_exec_ctx *exec_ctx, state_watcher *w) {
96
+ grpc_channel_element *client_channel_elem = grpc_channel_stack_last_element(
97
+ grpc_channel_get_channel_stack(w->channel));
98
+ if (client_channel_elem->filter == &grpc_client_channel_filter) {
99
+ GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, w->channel,
100
+ "watch_channel_connectivity");
101
+ } else if (client_channel_elem->filter == &grpc_client_uchannel_filter) {
102
+ GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, w->channel,
103
+ "watch_uchannel_connectivity");
104
+ } else {
105
+ abort();
106
+ }
107
+ gpr_mu_destroy(&w->mu);
108
+ gpr_free(w);
109
+ }
110
+
111
+ static void finished_completion(grpc_exec_ctx *exec_ctx, void *pw,
112
+ grpc_cq_completion *ignored) {
113
+ int delete = 0;
114
+ state_watcher *w = pw;
115
+ gpr_mu_lock(&w->mu);
116
+ switch (w->phase) {
117
+ case WAITING:
118
+ case CALLED_BACK:
119
+ GPR_UNREACHABLE_CODE(return );
120
+ case CALLING_BACK:
121
+ w->phase = CALLED_BACK;
122
+ break;
123
+ case CALLING_BACK_AND_FINISHED:
124
+ delete = 1;
125
+ break;
126
+ }
127
+ gpr_mu_unlock(&w->mu);
128
+
129
+ if (delete) {
130
+ delete_state_watcher(exec_ctx, w);
131
+ }
132
+ }
133
+
134
+ static void partly_done(grpc_exec_ctx *exec_ctx, state_watcher *w,
135
+ int due_to_completion) {
136
+ int delete = 0;
137
+
138
+ if (due_to_completion) {
139
+ grpc_timer_cancel(exec_ctx, &w->alarm);
140
+ }
141
+
142
+ gpr_mu_lock(&w->mu);
143
+ if (due_to_completion) {
144
+ w->success = 1;
145
+ }
146
+ switch (w->phase) {
147
+ case WAITING:
148
+ w->phase = CALLING_BACK;
149
+ grpc_cq_end_op(exec_ctx, w->cq, w->tag, w->success, finished_completion,
150
+ w, &w->completion_storage);
151
+ break;
152
+ case CALLING_BACK:
153
+ w->phase = CALLING_BACK_AND_FINISHED;
154
+ break;
155
+ case CALLING_BACK_AND_FINISHED:
156
+ GPR_UNREACHABLE_CODE(return );
157
+ case CALLED_BACK:
158
+ delete = 1;
159
+ break;
160
+ }
161
+ gpr_mu_unlock(&w->mu);
162
+
163
+ if (delete) {
164
+ delete_state_watcher(exec_ctx, w);
165
+ }
166
+ }
167
+
168
+ static void watch_complete(grpc_exec_ctx *exec_ctx, void *pw, int success) {
169
+ partly_done(exec_ctx, pw, 1);
170
+ }
171
+
172
+ static void timeout_complete(grpc_exec_ctx *exec_ctx, void *pw, int success) {
173
+ partly_done(exec_ctx, pw, 0);
174
+ }
175
+
176
+ void grpc_channel_watch_connectivity_state(
177
+ grpc_channel *channel, grpc_connectivity_state last_observed_state,
178
+ gpr_timespec deadline, grpc_completion_queue *cq, void *tag) {
179
+ grpc_channel_element *client_channel_elem =
180
+ grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
181
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
182
+ state_watcher *w = gpr_malloc(sizeof(*w));
183
+
184
+ GRPC_API_TRACE(
185
+ "grpc_channel_watch_connectivity_state("
186
+ "channel=%p, last_observed_state=%d, "
187
+ "deadline=gpr_timespec { tv_sec: %lld, tv_nsec: %d, clock_type: %d }, "
188
+ "cq=%p, tag=%p)",
189
+ 7, (channel, (int)last_observed_state, (long long)deadline.tv_sec,
190
+ (int)deadline.tv_nsec, (int)deadline.clock_type, cq, tag));
191
+
192
+ grpc_cq_begin_op(cq, tag);
193
+
194
+ gpr_mu_init(&w->mu);
195
+ grpc_closure_init(&w->on_complete, watch_complete, w);
196
+ w->phase = WAITING;
197
+ w->state = last_observed_state;
198
+ w->success = 0;
199
+ w->cq = cq;
200
+ w->tag = tag;
201
+ w->channel = channel;
202
+
203
+ grpc_timer_init(&exec_ctx, &w->alarm,
204
+ gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC),
205
+ timeout_complete, w, gpr_now(GPR_CLOCK_MONOTONIC));
206
+
207
+ if (client_channel_elem->filter == &grpc_client_channel_filter) {
208
+ GRPC_CHANNEL_INTERNAL_REF(channel, "watch_channel_connectivity");
209
+ grpc_client_channel_watch_connectivity_state(&exec_ctx, client_channel_elem,
210
+ grpc_cq_pollset(cq), &w->state,
211
+ &w->on_complete);
212
+ } else if (client_channel_elem->filter == &grpc_client_uchannel_filter) {
213
+ GRPC_CHANNEL_INTERNAL_REF(channel, "watch_uchannel_connectivity");
214
+ grpc_client_uchannel_watch_connectivity_state(
215
+ &exec_ctx, client_channel_elem, grpc_cq_pollset(cq), &w->state,
216
+ &w->on_complete);
217
+ }
218
+
219
+ grpc_exec_ctx_finish(&exec_ctx);
220
+ }
@@ -0,0 +1,235 @@
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/grpc.h>
35
+
36
+ #include <stdlib.h>
37
+ #include <string.h>
38
+
39
+ #include <grpc/support/alloc.h>
40
+ #include <grpc/support/slice.h>
41
+ #include <grpc/support/slice_buffer.h>
42
+
43
+ #include "src/core/census/grpc_filter.h"
44
+ #include "src/core/channel/channel_args.h"
45
+ #include "src/core/channel/client_channel.h"
46
+ #include "src/core/channel/compress_filter.h"
47
+ #include "src/core/channel/http_client_filter.h"
48
+ #include "src/core/client_config/resolver_registry.h"
49
+ #include "src/core/iomgr/tcp_client.h"
50
+ #include "src/core/surface/api_trace.h"
51
+ #include "src/core/surface/channel.h"
52
+ #include "src/core/transport/chttp2_transport.h"
53
+
54
+ typedef struct {
55
+ grpc_connector base;
56
+ gpr_refcount refs;
57
+
58
+ grpc_closure *notify;
59
+ grpc_connect_in_args args;
60
+ grpc_connect_out_args *result;
61
+ grpc_closure initial_string_sent;
62
+ gpr_slice_buffer initial_string_buffer;
63
+
64
+ grpc_endpoint *tcp;
65
+
66
+ grpc_closure connected;
67
+ } connector;
68
+
69
+ static void connector_ref(grpc_connector *con) {
70
+ connector *c = (connector *)con;
71
+ gpr_ref(&c->refs);
72
+ }
73
+
74
+ static void connector_unref(grpc_exec_ctx *exec_ctx, grpc_connector *con) {
75
+ connector *c = (connector *)con;
76
+ if (gpr_unref(&c->refs)) {
77
+ /* c->initial_string_buffer does not need to be destroyed */
78
+ gpr_free(c);
79
+ }
80
+ }
81
+
82
+ static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg,
83
+ int success) {
84
+ connector_unref(exec_ctx, arg);
85
+ }
86
+
87
+ static void connected(grpc_exec_ctx *exec_ctx, void *arg, int success) {
88
+ connector *c = arg;
89
+ grpc_closure *notify;
90
+ grpc_endpoint *tcp = c->tcp;
91
+ if (tcp != NULL) {
92
+ if (!GPR_SLICE_IS_EMPTY(c->args.initial_connect_string)) {
93
+ grpc_closure_init(&c->initial_string_sent, on_initial_connect_string_sent,
94
+ c);
95
+ gpr_slice_buffer_init(&c->initial_string_buffer);
96
+ gpr_slice_buffer_add(&c->initial_string_buffer,
97
+ c->args.initial_connect_string);
98
+ connector_ref(arg);
99
+ grpc_endpoint_write(exec_ctx, tcp, &c->initial_string_buffer,
100
+ &c->initial_string_sent);
101
+ }
102
+ c->result->transport =
103
+ grpc_create_chttp2_transport(exec_ctx, c->args.channel_args, tcp, 1);
104
+ grpc_chttp2_transport_start_reading(exec_ctx, c->result->transport, NULL,
105
+ 0);
106
+ GPR_ASSERT(c->result->transport);
107
+ c->result->channel_args = c->args.channel_args;
108
+ c->result->filters = gpr_malloc(sizeof(grpc_channel_filter *));
109
+ c->result->filters[0] = &grpc_http_client_filter;
110
+ c->result->num_filters = 1;
111
+ } else {
112
+ memset(c->result, 0, sizeof(*c->result));
113
+ }
114
+ notify = c->notify;
115
+ c->notify = NULL;
116
+ notify->cb(exec_ctx, notify->cb_arg, 1);
117
+ }
118
+
119
+ static void connector_shutdown(grpc_exec_ctx *exec_ctx, grpc_connector *con) {}
120
+
121
+ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con,
122
+ const grpc_connect_in_args *args,
123
+ grpc_connect_out_args *result,
124
+ grpc_closure *notify) {
125
+ connector *c = (connector *)con;
126
+ GPR_ASSERT(c->notify == NULL);
127
+ GPR_ASSERT(notify->cb);
128
+ c->notify = notify;
129
+ c->args = *args;
130
+ c->result = result;
131
+ c->tcp = NULL;
132
+ grpc_closure_init(&c->connected, connected, c);
133
+ grpc_tcp_client_connect(exec_ctx, &c->connected, &c->tcp,
134
+ args->interested_parties, args->addr, args->addr_len,
135
+ args->deadline);
136
+ }
137
+
138
+ static const grpc_connector_vtable connector_vtable = {
139
+ connector_ref, connector_unref, connector_shutdown, connector_connect};
140
+
141
+ typedef struct {
142
+ grpc_subchannel_factory base;
143
+ gpr_refcount refs;
144
+ grpc_channel_args *merge_args;
145
+ grpc_channel *master;
146
+ } subchannel_factory;
147
+
148
+ static void subchannel_factory_ref(grpc_subchannel_factory *scf) {
149
+ subchannel_factory *f = (subchannel_factory *)scf;
150
+ gpr_ref(&f->refs);
151
+ }
152
+
153
+ static void subchannel_factory_unref(grpc_exec_ctx *exec_ctx,
154
+ grpc_subchannel_factory *scf) {
155
+ subchannel_factory *f = (subchannel_factory *)scf;
156
+ if (gpr_unref(&f->refs)) {
157
+ GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, f->master, "subchannel_factory");
158
+ grpc_channel_args_destroy(f->merge_args);
159
+ gpr_free(f);
160
+ }
161
+ }
162
+
163
+ static grpc_subchannel *subchannel_factory_create_subchannel(
164
+ grpc_exec_ctx *exec_ctx, grpc_subchannel_factory *scf,
165
+ grpc_subchannel_args *args) {
166
+ subchannel_factory *f = (subchannel_factory *)scf;
167
+ connector *c = gpr_malloc(sizeof(*c));
168
+ grpc_channel_args *final_args =
169
+ grpc_channel_args_merge(args->args, f->merge_args);
170
+ grpc_subchannel *s;
171
+ memset(c, 0, sizeof(*c));
172
+ c->base.vtable = &connector_vtable;
173
+ gpr_ref_init(&c->refs, 1);
174
+ args->args = final_args;
175
+ s = grpc_subchannel_create(&c->base, args);
176
+ grpc_connector_unref(exec_ctx, &c->base);
177
+ grpc_channel_args_destroy(final_args);
178
+ return s;
179
+ }
180
+
181
+ static const grpc_subchannel_factory_vtable subchannel_factory_vtable = {
182
+ subchannel_factory_ref, subchannel_factory_unref,
183
+ subchannel_factory_create_subchannel};
184
+
185
+ /* Create a client channel:
186
+ Asynchronously: - resolve target
187
+ - connect to it (trying alternatives as presented)
188
+ - perform handshakes */
189
+ grpc_channel *grpc_insecure_channel_create(const char *target,
190
+ const grpc_channel_args *args,
191
+ void *reserved) {
192
+ grpc_channel *channel = NULL;
193
+ #define MAX_FILTERS 3
194
+ const grpc_channel_filter *filters[MAX_FILTERS];
195
+ grpc_resolver *resolver;
196
+ subchannel_factory *f;
197
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
198
+ size_t n = 0;
199
+ GRPC_API_TRACE(
200
+ "grpc_insecure_channel_create(target=%p, args=%p, reserved=%p)", 3,
201
+ (target, args, reserved));
202
+ GPR_ASSERT(!reserved);
203
+ if (grpc_channel_args_is_census_enabled(args)) {
204
+ filters[n++] = &grpc_client_census_filter;
205
+ }
206
+ filters[n++] = &grpc_compress_filter;
207
+ filters[n++] = &grpc_client_channel_filter;
208
+ GPR_ASSERT(n <= MAX_FILTERS);
209
+
210
+ channel =
211
+ grpc_channel_create_from_filters(&exec_ctx, target, filters, n, args, 1);
212
+
213
+ f = gpr_malloc(sizeof(*f));
214
+ f->base.vtable = &subchannel_factory_vtable;
215
+ gpr_ref_init(&f->refs, 1);
216
+ f->merge_args = grpc_channel_args_copy(args);
217
+ f->master = channel;
218
+ GRPC_CHANNEL_INTERNAL_REF(f->master, "subchannel_factory");
219
+ resolver = grpc_resolver_create(target, &f->base);
220
+ if (!resolver) {
221
+ GRPC_CHANNEL_INTERNAL_UNREF(&exec_ctx, f->master, "subchannel_factory");
222
+ grpc_subchannel_factory_unref(&exec_ctx, &f->base);
223
+ grpc_exec_ctx_finish(&exec_ctx);
224
+ return NULL;
225
+ }
226
+
227
+ grpc_client_channel_set_resolver(
228
+ &exec_ctx, grpc_channel_get_channel_stack(channel), resolver);
229
+ GRPC_RESOLVER_UNREF(&exec_ctx, resolver, "create");
230
+ grpc_subchannel_factory_unref(&exec_ctx, &f->base);
231
+
232
+ grpc_exec_ctx_finish(&exec_ctx);
233
+
234
+ return channel;
235
+ }