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,149 @@
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 <string.h>
37
+
38
+ #include "src/core/channel/channel_stack.h"
39
+ #include "src/core/support/string.h"
40
+ #include "src/core/surface/api_trace.h"
41
+ #include "src/core/surface/channel.h"
42
+ #include "src/core/surface/call.h"
43
+ #include <grpc/support/alloc.h>
44
+ #include <grpc/support/log.h>
45
+
46
+ typedef struct {
47
+ grpc_linked_mdelem status;
48
+ grpc_linked_mdelem details;
49
+ } call_data;
50
+
51
+ typedef struct {
52
+ grpc_status_code error_code;
53
+ const char *error_message;
54
+ } channel_data;
55
+
56
+ static void fill_metadata(grpc_call_element *elem, grpc_metadata_batch *mdb) {
57
+ call_data *calld = elem->call_data;
58
+ channel_data *chand = elem->channel_data;
59
+ char tmp[GPR_LTOA_MIN_BUFSIZE];
60
+ gpr_ltoa(chand->error_code, tmp);
61
+ calld->status.md = grpc_mdelem_from_strings("grpc-status", tmp);
62
+ calld->details.md =
63
+ grpc_mdelem_from_strings("grpc-message", chand->error_message);
64
+ calld->status.prev = calld->details.next = NULL;
65
+ calld->status.next = &calld->details;
66
+ calld->details.prev = &calld->status;
67
+ mdb->list.head = &calld->status;
68
+ mdb->list.tail = &calld->details;
69
+ mdb->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
70
+ }
71
+
72
+ static void lame_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
73
+ grpc_call_element *elem,
74
+ grpc_transport_stream_op *op) {
75
+ GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
76
+ if (op->recv_initial_metadata != NULL) {
77
+ fill_metadata(elem, op->recv_initial_metadata);
78
+ } else if (op->recv_trailing_metadata != NULL) {
79
+ fill_metadata(elem, op->recv_trailing_metadata);
80
+ }
81
+ grpc_exec_ctx_enqueue(exec_ctx, op->on_complete, 0);
82
+ grpc_exec_ctx_enqueue(exec_ctx, op->recv_message_ready, 0);
83
+ }
84
+
85
+ static char *lame_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
86
+ return NULL;
87
+ }
88
+
89
+ static void lame_start_transport_op(grpc_exec_ctx *exec_ctx,
90
+ grpc_channel_element *elem,
91
+ grpc_transport_op *op) {
92
+ if (op->on_connectivity_state_change) {
93
+ GPR_ASSERT(*op->connectivity_state != GRPC_CHANNEL_FATAL_FAILURE);
94
+ *op->connectivity_state = GRPC_CHANNEL_FATAL_FAILURE;
95
+ op->on_connectivity_state_change->cb(
96
+ exec_ctx, op->on_connectivity_state_change->cb_arg, 1);
97
+ }
98
+ if (op->on_consumed != NULL) {
99
+ op->on_consumed->cb(exec_ctx, op->on_consumed->cb_arg, 1);
100
+ }
101
+ }
102
+
103
+ static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
104
+ grpc_call_element_args *args) {}
105
+
106
+ static void destroy_call_elem(grpc_exec_ctx *exec_ctx,
107
+ grpc_call_element *elem) {}
108
+
109
+ static void init_channel_elem(grpc_exec_ctx *exec_ctx,
110
+ grpc_channel_element *elem,
111
+ grpc_channel_element_args *args) {
112
+ GPR_ASSERT(args->is_first);
113
+ GPR_ASSERT(args->is_last);
114
+ }
115
+
116
+ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
117
+ grpc_channel_element *elem) {}
118
+
119
+ static const grpc_channel_filter lame_filter = {
120
+ lame_start_transport_stream_op, lame_start_transport_op, sizeof(call_data),
121
+ init_call_elem, grpc_call_stack_ignore_set_pollset, destroy_call_elem,
122
+ sizeof(channel_data), init_channel_elem, destroy_channel_elem,
123
+ lame_get_peer, "lame-client",
124
+ };
125
+
126
+ #define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack *)((c) + 1))
127
+
128
+ grpc_channel *grpc_lame_client_channel_create(const char *target,
129
+ grpc_status_code error_code,
130
+ const char *error_message) {
131
+ grpc_channel *channel;
132
+ grpc_channel_element *elem;
133
+ channel_data *chand;
134
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
135
+ static const grpc_channel_filter *filters[] = {&lame_filter};
136
+ channel =
137
+ grpc_channel_create_from_filters(&exec_ctx, target, filters, 1, NULL, 1);
138
+ elem = grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
139
+ GRPC_API_TRACE(
140
+ "grpc_lame_client_channel_create(target=%s, error_code=%d, "
141
+ "error_message=%s)",
142
+ 3, (target, (int)error_code, error_message));
143
+ GPR_ASSERT(elem->filter == &lame_filter);
144
+ chand = (channel_data *)elem->channel_data;
145
+ chand->error_code = error_code;
146
+ chand->error_message = error_message;
147
+ grpc_exec_ctx_finish(&exec_ctx);
148
+ return channel;
149
+ }
@@ -0,0 +1,49 @@
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
+ #include <grpc/support/alloc.h>
36
+
37
+ #include <string.h>
38
+
39
+ #include "src/core/surface/api_trace.h"
40
+
41
+ void grpc_metadata_array_init(grpc_metadata_array* array) {
42
+ GRPC_API_TRACE("grpc_metadata_array_init(array=%p)", 1, (array));
43
+ memset(array, 0, sizeof(*array));
44
+ }
45
+
46
+ void grpc_metadata_array_destroy(grpc_metadata_array* array) {
47
+ GRPC_API_TRACE("grpc_metadata_array_destroy(array=%p)", 1, (array));
48
+ gpr_free(array->metadata);
49
+ }
@@ -0,0 +1,336 @@
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/security/auth_filters.h"
51
+ #include "src/core/security/credentials.h"
52
+ #include "src/core/security/security_context.h"
53
+ #include "src/core/surface/api_trace.h"
54
+ #include "src/core/surface/channel.h"
55
+ #include "src/core/transport/chttp2_transport.h"
56
+ #include "src/core/tsi/transport_security_interface.h"
57
+
58
+ typedef struct {
59
+ grpc_connector base;
60
+ gpr_refcount refs;
61
+
62
+ grpc_channel_security_connector *security_connector;
63
+
64
+ grpc_closure *notify;
65
+ grpc_connect_in_args args;
66
+ grpc_connect_out_args *result;
67
+ grpc_closure initial_string_sent;
68
+ gpr_slice_buffer initial_string_buffer;
69
+
70
+ gpr_mu mu;
71
+ grpc_endpoint *connecting_endpoint;
72
+ grpc_endpoint *newly_connecting_endpoint;
73
+
74
+ grpc_closure connected_closure;
75
+ } connector;
76
+
77
+ static void connector_ref(grpc_connector *con) {
78
+ connector *c = (connector *)con;
79
+ gpr_ref(&c->refs);
80
+ }
81
+
82
+ static void connector_unref(grpc_exec_ctx *exec_ctx, grpc_connector *con) {
83
+ connector *c = (connector *)con;
84
+ if (gpr_unref(&c->refs)) {
85
+ /* c->initial_string_buffer does not need to be destroyed */
86
+ gpr_free(c);
87
+ }
88
+ }
89
+
90
+ static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *arg,
91
+ grpc_security_status status,
92
+ grpc_endpoint *secure_endpoint,
93
+ grpc_auth_context *auth_context) {
94
+ connector *c = arg;
95
+ grpc_closure *notify;
96
+ grpc_channel_args *args_copy = NULL;
97
+ gpr_mu_lock(&c->mu);
98
+ if (c->connecting_endpoint == NULL) {
99
+ memset(c->result, 0, sizeof(*c->result));
100
+ gpr_mu_unlock(&c->mu);
101
+ } else if (status != GRPC_SECURITY_OK) {
102
+ gpr_log(GPR_ERROR, "Secure handshake failed with error %d.", status);
103
+ memset(c->result, 0, sizeof(*c->result));
104
+ c->connecting_endpoint = NULL;
105
+ gpr_mu_unlock(&c->mu);
106
+ } else {
107
+ grpc_arg auth_context_arg;
108
+ c->connecting_endpoint = NULL;
109
+ gpr_mu_unlock(&c->mu);
110
+ c->result->transport = grpc_create_chttp2_transport(
111
+ exec_ctx, c->args.channel_args, secure_endpoint, 1);
112
+ grpc_chttp2_transport_start_reading(exec_ctx, c->result->transport, NULL,
113
+ 0);
114
+ auth_context_arg = grpc_auth_context_to_arg(auth_context);
115
+ args_copy = grpc_channel_args_copy_and_add(c->args.channel_args,
116
+ &auth_context_arg, 1);
117
+ c->result->channel_args = args_copy;
118
+ c->result->filters = gpr_malloc(sizeof(grpc_channel_filter *) * 2);
119
+ c->result->filters[0] = &grpc_http_client_filter;
120
+ c->result->filters[1] = &grpc_client_auth_filter;
121
+ c->result->num_filters = 2;
122
+ }
123
+ notify = c->notify;
124
+ c->notify = NULL;
125
+ /* look at c->args which are connector args. */
126
+ notify->cb(exec_ctx, notify->cb_arg, 1);
127
+ if (args_copy != NULL) grpc_channel_args_destroy(args_copy);
128
+ }
129
+
130
+ static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg,
131
+ int success) {
132
+ connector *c = arg;
133
+ grpc_security_connector_do_handshake(exec_ctx, &c->security_connector->base,
134
+ c->connecting_endpoint,
135
+ on_secure_handshake_done, c);
136
+ }
137
+
138
+ static void connected(grpc_exec_ctx *exec_ctx, void *arg, int success) {
139
+ connector *c = arg;
140
+ grpc_closure *notify;
141
+ grpc_endpoint *tcp = c->newly_connecting_endpoint;
142
+ if (tcp != NULL) {
143
+ gpr_mu_lock(&c->mu);
144
+ GPR_ASSERT(c->connecting_endpoint == NULL);
145
+ c->connecting_endpoint = tcp;
146
+ gpr_mu_unlock(&c->mu);
147
+ if (!GPR_SLICE_IS_EMPTY(c->args.initial_connect_string)) {
148
+ grpc_closure_init(&c->initial_string_sent, on_initial_connect_string_sent,
149
+ c);
150
+ gpr_slice_buffer_init(&c->initial_string_buffer);
151
+ gpr_slice_buffer_add(&c->initial_string_buffer,
152
+ c->args.initial_connect_string);
153
+ grpc_endpoint_write(exec_ctx, tcp, &c->initial_string_buffer,
154
+ &c->initial_string_sent);
155
+ } else {
156
+ grpc_security_connector_do_handshake(exec_ctx,
157
+ &c->security_connector->base, tcp,
158
+ on_secure_handshake_done, c);
159
+ }
160
+ } else {
161
+ memset(c->result, 0, sizeof(*c->result));
162
+ notify = c->notify;
163
+ c->notify = NULL;
164
+ notify->cb(exec_ctx, notify->cb_arg, 1);
165
+ }
166
+ }
167
+
168
+ static void connector_shutdown(grpc_exec_ctx *exec_ctx, grpc_connector *con) {
169
+ connector *c = (connector *)con;
170
+ grpc_endpoint *ep;
171
+ gpr_mu_lock(&c->mu);
172
+ ep = c->connecting_endpoint;
173
+ c->connecting_endpoint = NULL;
174
+ gpr_mu_unlock(&c->mu);
175
+ if (ep) {
176
+ grpc_endpoint_shutdown(exec_ctx, ep);
177
+ }
178
+ }
179
+
180
+ static void connector_connect(grpc_exec_ctx *exec_ctx, grpc_connector *con,
181
+ const grpc_connect_in_args *args,
182
+ grpc_connect_out_args *result,
183
+ grpc_closure *notify) {
184
+ connector *c = (connector *)con;
185
+ GPR_ASSERT(c->notify == NULL);
186
+ GPR_ASSERT(notify->cb);
187
+ c->notify = notify;
188
+ c->args = *args;
189
+ c->result = result;
190
+ gpr_mu_lock(&c->mu);
191
+ GPR_ASSERT(c->connecting_endpoint == NULL);
192
+ gpr_mu_unlock(&c->mu);
193
+ grpc_closure_init(&c->connected_closure, connected, c);
194
+ grpc_tcp_client_connect(
195
+ exec_ctx, &c->connected_closure, &c->newly_connecting_endpoint,
196
+ args->interested_parties, args->addr, args->addr_len, args->deadline);
197
+ }
198
+
199
+ static const grpc_connector_vtable connector_vtable = {
200
+ connector_ref, connector_unref, connector_shutdown, connector_connect};
201
+
202
+ typedef struct {
203
+ grpc_subchannel_factory base;
204
+ gpr_refcount refs;
205
+ grpc_channel_args *merge_args;
206
+ grpc_channel_security_connector *security_connector;
207
+ grpc_channel *master;
208
+ } subchannel_factory;
209
+
210
+ static void subchannel_factory_ref(grpc_subchannel_factory *scf) {
211
+ subchannel_factory *f = (subchannel_factory *)scf;
212
+ gpr_ref(&f->refs);
213
+ }
214
+
215
+ static void subchannel_factory_unref(grpc_exec_ctx *exec_ctx,
216
+ grpc_subchannel_factory *scf) {
217
+ subchannel_factory *f = (subchannel_factory *)scf;
218
+ if (gpr_unref(&f->refs)) {
219
+ GRPC_SECURITY_CONNECTOR_UNREF(&f->security_connector->base,
220
+ "subchannel_factory");
221
+ GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, f->master, "subchannel_factory");
222
+ grpc_channel_args_destroy(f->merge_args);
223
+ gpr_free(f);
224
+ }
225
+ }
226
+
227
+ static grpc_subchannel *subchannel_factory_create_subchannel(
228
+ grpc_exec_ctx *exec_ctx, grpc_subchannel_factory *scf,
229
+ grpc_subchannel_args *args) {
230
+ subchannel_factory *f = (subchannel_factory *)scf;
231
+ connector *c = gpr_malloc(sizeof(*c));
232
+ grpc_channel_args *final_args =
233
+ grpc_channel_args_merge(args->args, f->merge_args);
234
+ grpc_subchannel *s;
235
+ memset(c, 0, sizeof(*c));
236
+ c->base.vtable = &connector_vtable;
237
+ c->security_connector = f->security_connector;
238
+ gpr_mu_init(&c->mu);
239
+ gpr_ref_init(&c->refs, 1);
240
+ args->args = final_args;
241
+ s = grpc_subchannel_create(&c->base, args);
242
+ grpc_connector_unref(exec_ctx, &c->base);
243
+ grpc_channel_args_destroy(final_args);
244
+ return s;
245
+ }
246
+
247
+ static const grpc_subchannel_factory_vtable subchannel_factory_vtable = {
248
+ subchannel_factory_ref, subchannel_factory_unref,
249
+ subchannel_factory_create_subchannel};
250
+
251
+ /* Create a secure client channel:
252
+ Asynchronously: - resolve target
253
+ - connect to it (trying alternatives as presented)
254
+ - perform handshakes */
255
+ grpc_channel *grpc_secure_channel_create(grpc_channel_credentials *creds,
256
+ const char *target,
257
+ const grpc_channel_args *args,
258
+ void *reserved) {
259
+ grpc_channel *channel;
260
+ grpc_arg connector_arg;
261
+ grpc_channel_args *args_copy;
262
+ grpc_channel_args *new_args_from_connector;
263
+ grpc_channel_security_connector *security_connector;
264
+ grpc_resolver *resolver;
265
+ subchannel_factory *f;
266
+ #define MAX_FILTERS 3
267
+ const grpc_channel_filter *filters[MAX_FILTERS];
268
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
269
+ size_t n = 0;
270
+
271
+ GRPC_API_TRACE(
272
+ "grpc_secure_channel_create(creds=%p, target=%s, args=%p, "
273
+ "reserved=%p)",
274
+ 4, (creds, target, args, reserved));
275
+ GPR_ASSERT(reserved == NULL);
276
+
277
+ if (grpc_find_security_connector_in_args(args) != NULL) {
278
+ gpr_log(GPR_ERROR, "Cannot set security context in channel args.");
279
+ grpc_exec_ctx_finish(&exec_ctx);
280
+ return grpc_lame_client_channel_create(
281
+ target, GRPC_STATUS_INVALID_ARGUMENT,
282
+ "Security connector exists in channel args.");
283
+ }
284
+
285
+ if (grpc_channel_credentials_create_security_connector(
286
+ creds, target, args, &security_connector, &new_args_from_connector) !=
287
+ GRPC_SECURITY_OK) {
288
+ grpc_exec_ctx_finish(&exec_ctx);
289
+ return grpc_lame_client_channel_create(
290
+ target, GRPC_STATUS_INVALID_ARGUMENT,
291
+ "Failed to create security connector.");
292
+ }
293
+
294
+ connector_arg = grpc_security_connector_to_arg(&security_connector->base);
295
+ args_copy = grpc_channel_args_copy_and_add(
296
+ new_args_from_connector != NULL ? new_args_from_connector : args,
297
+ &connector_arg, 1);
298
+ if (grpc_channel_args_is_census_enabled(args)) {
299
+ filters[n++] = &grpc_client_census_filter;
300
+ }
301
+ filters[n++] = &grpc_compress_filter;
302
+ filters[n++] = &grpc_client_channel_filter;
303
+ GPR_ASSERT(n <= MAX_FILTERS);
304
+
305
+ channel = grpc_channel_create_from_filters(&exec_ctx, target, filters, n,
306
+ args_copy, 1);
307
+
308
+ f = gpr_malloc(sizeof(*f));
309
+ f->base.vtable = &subchannel_factory_vtable;
310
+ gpr_ref_init(&f->refs, 1);
311
+ GRPC_SECURITY_CONNECTOR_REF(&security_connector->base, "subchannel_factory");
312
+ f->security_connector = security_connector;
313
+ f->merge_args = grpc_channel_args_copy(args_copy);
314
+ f->master = channel;
315
+ GRPC_CHANNEL_INTERNAL_REF(channel, "subchannel_factory");
316
+ resolver = grpc_resolver_create(target, &f->base);
317
+ if (resolver) {
318
+ grpc_client_channel_set_resolver(
319
+ &exec_ctx, grpc_channel_get_channel_stack(channel), resolver);
320
+ GRPC_RESOLVER_UNREF(&exec_ctx, resolver, "create");
321
+ }
322
+ grpc_subchannel_factory_unref(&exec_ctx, &f->base);
323
+ GRPC_SECURITY_CONNECTOR_UNREF(&security_connector->base, "channel_create");
324
+ grpc_channel_args_destroy(args_copy);
325
+ if (new_args_from_connector != NULL) {
326
+ grpc_channel_args_destroy(new_args_from_connector);
327
+ }
328
+
329
+ if (!resolver) {
330
+ GRPC_CHANNEL_INTERNAL_UNREF(&exec_ctx, channel, "subchannel_factory");
331
+ channel = NULL;
332
+ }
333
+ grpc_exec_ctx_finish(&exec_ctx);
334
+
335
+ return channel;
336
+ }