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,65 @@
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_CHANNEL_COMPRESS_FILTER_H
35
+ #define GRPC_INTERNAL_CORE_CHANNEL_COMPRESS_FILTER_H
36
+
37
+ #include "src/core/channel/channel_stack.h"
38
+
39
+ #define GRPC_COMPRESS_REQUEST_ALGORITHM_KEY "grpc-internal-encoding-request"
40
+
41
+ /** Compression filter for outgoing data.
42
+ *
43
+ * See <grpc/compression.h> for the available compression settings.
44
+ *
45
+ * Compression settings may come from:
46
+ * - Channel configuration, as established at channel creation time.
47
+ * - The metadata accompanying the outgoing data to be compressed. This is
48
+ * taken as a request only. We may choose not to honor it. The metadata key
49
+ * is given by \a GRPC_COMPRESS_REQUEST_ALGORITHM_KEY.
50
+ *
51
+ * Compression can be disabled for concrete messages (for instance in order to
52
+ * prevent CRIME/BEAST type attacks) by having the GRPC_WRITE_NO_COMPRESS set in
53
+ * the BEGIN_MESSAGE flags.
54
+ *
55
+ * The attempted compression mechanism is added to the resulting initial
56
+ * metadata under the'grpc-encoding' key.
57
+ *
58
+ * If compression is actually performed, BEGIN_MESSAGE's flag is modified to
59
+ * incorporate GRPC_WRITE_INTERNAL_COMPRESS. Otherwise, and regardless of the
60
+ * aforementioned 'grpc-encoding' metadata value, data will pass through
61
+ * uncompressed. */
62
+
63
+ extern const grpc_channel_filter grpc_compress_filter;
64
+
65
+ #endif /* GRPC_INTERNAL_CORE_CHANNEL_COMPRESS_FILTER_H */
@@ -0,0 +1,167 @@
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/channel/connected_channel.h"
35
+
36
+ #include <stdarg.h>
37
+ #include <stdio.h>
38
+ #include <string.h>
39
+
40
+ #include "src/core/support/string.h"
41
+ #include "src/core/transport/transport.h"
42
+ #include "src/core/profiling/timers.h"
43
+ #include <grpc/byte_buffer.h>
44
+ #include <grpc/support/alloc.h>
45
+ #include <grpc/support/log.h>
46
+ #include <grpc/support/slice_buffer.h>
47
+
48
+ #define MAX_BUFFER_LENGTH 8192
49
+
50
+ typedef struct connected_channel_channel_data {
51
+ grpc_transport *transport;
52
+ } channel_data;
53
+
54
+ typedef struct connected_channel_call_data { void *unused; } call_data;
55
+
56
+ /* We perform a small hack to locate transport data alongside the connected
57
+ channel data in call allocations, to allow everything to be pulled in minimal
58
+ cache line requests */
59
+ #define TRANSPORT_STREAM_FROM_CALL_DATA(calld) ((grpc_stream *)((calld) + 1))
60
+ #define CALL_DATA_FROM_TRANSPORT_STREAM(transport_stream) \
61
+ (((call_data *)(transport_stream)) - 1)
62
+
63
+ /* Intercept a call operation and either push it directly up or translate it
64
+ into transport stream operations */
65
+ static void con_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
66
+ grpc_call_element *elem,
67
+ grpc_transport_stream_op *op) {
68
+ call_data *calld = elem->call_data;
69
+ channel_data *chand = elem->channel_data;
70
+ GPR_ASSERT(elem->filter == &grpc_connected_channel_filter);
71
+ GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
72
+
73
+ grpc_transport_perform_stream_op(exec_ctx, chand->transport,
74
+ TRANSPORT_STREAM_FROM_CALL_DATA(calld), op);
75
+ }
76
+
77
+ static void con_start_transport_op(grpc_exec_ctx *exec_ctx,
78
+ grpc_channel_element *elem,
79
+ grpc_transport_op *op) {
80
+ channel_data *chand = elem->channel_data;
81
+ grpc_transport_perform_op(exec_ctx, chand->transport, op);
82
+ }
83
+
84
+ /* Constructor for call_data */
85
+ static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
86
+ grpc_call_element_args *args) {
87
+ call_data *calld = elem->call_data;
88
+ channel_data *chand = elem->channel_data;
89
+ int r;
90
+
91
+ GPR_ASSERT(elem->filter == &grpc_connected_channel_filter);
92
+ r = grpc_transport_init_stream(
93
+ exec_ctx, chand->transport, TRANSPORT_STREAM_FROM_CALL_DATA(calld),
94
+ &args->call_stack->refcount, args->server_transport_data);
95
+ GPR_ASSERT(r == 0);
96
+ }
97
+
98
+ static void set_pollset(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
99
+ grpc_pollset *pollset) {
100
+ call_data *calld = elem->call_data;
101
+ channel_data *chand = elem->channel_data;
102
+ grpc_transport_set_pollset(exec_ctx, chand->transport,
103
+ TRANSPORT_STREAM_FROM_CALL_DATA(calld), pollset);
104
+ }
105
+
106
+ /* Destructor for call_data */
107
+ static void destroy_call_elem(grpc_exec_ctx *exec_ctx,
108
+ grpc_call_element *elem) {
109
+ call_data *calld = elem->call_data;
110
+ channel_data *chand = elem->channel_data;
111
+ GPR_ASSERT(elem->filter == &grpc_connected_channel_filter);
112
+ grpc_transport_destroy_stream(exec_ctx, chand->transport,
113
+ TRANSPORT_STREAM_FROM_CALL_DATA(calld));
114
+ }
115
+
116
+ /* Constructor for channel_data */
117
+ static void init_channel_elem(grpc_exec_ctx *exec_ctx,
118
+ grpc_channel_element *elem,
119
+ grpc_channel_element_args *args) {
120
+ channel_data *cd = (channel_data *)elem->channel_data;
121
+ GPR_ASSERT(args->is_last);
122
+ GPR_ASSERT(elem->filter == &grpc_connected_channel_filter);
123
+ cd->transport = NULL;
124
+ }
125
+
126
+ /* Destructor for channel_data */
127
+ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
128
+ grpc_channel_element *elem) {
129
+ channel_data *cd = (channel_data *)elem->channel_data;
130
+ GPR_ASSERT(elem->filter == &grpc_connected_channel_filter);
131
+ grpc_transport_destroy(exec_ctx, cd->transport);
132
+ }
133
+
134
+ static char *con_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
135
+ channel_data *chand = elem->channel_data;
136
+ return grpc_transport_get_peer(exec_ctx, chand->transport);
137
+ }
138
+
139
+ const grpc_channel_filter grpc_connected_channel_filter = {
140
+ con_start_transport_stream_op, con_start_transport_op, sizeof(call_data),
141
+ init_call_elem, set_pollset, destroy_call_elem, sizeof(channel_data),
142
+ init_channel_elem, destroy_channel_elem, con_get_peer, "connected",
143
+ };
144
+
145
+ void grpc_connected_channel_bind_transport(grpc_channel_stack *channel_stack,
146
+ grpc_transport *transport) {
147
+ /* Assumes that the connected channel filter is always the last filter
148
+ in a channel stack */
149
+ grpc_channel_element *elem = grpc_channel_stack_last_element(channel_stack);
150
+ channel_data *cd = (channel_data *)elem->channel_data;
151
+ GPR_ASSERT(elem->filter == &grpc_connected_channel_filter);
152
+ GPR_ASSERT(cd->transport == NULL);
153
+ cd->transport = transport;
154
+
155
+ /* HACK(ctiller): increase call stack size for the channel to make space
156
+ for channel data. We need a cleaner (but performant) way to do this,
157
+ and I'm not sure what that is yet.
158
+ This is only "safe" because call stacks place no additional data after
159
+ the last call element, and the last call element MUST be the connected
160
+ channel. */
161
+ channel_stack->call_stack_size += grpc_transport_stream_size(transport);
162
+ }
163
+
164
+ grpc_stream *grpc_connected_channel_get_stream(grpc_call_element *elem) {
165
+ call_data *calld = elem->call_data;
166
+ return TRANSPORT_STREAM_FROM_CALL_DATA(calld);
167
+ }
@@ -0,0 +1,51 @@
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_CHANNEL_CONNECTED_CHANNEL_H
35
+ #define GRPC_INTERNAL_CORE_CHANNEL_CONNECTED_CHANNEL_H
36
+
37
+ #include "src/core/channel/channel_stack.h"
38
+
39
+ /* A channel filter representing a channel that is on a connected transport.
40
+ This filter performs actual sending and receiving of messages. */
41
+
42
+ extern const grpc_channel_filter grpc_connected_channel_filter;
43
+
44
+ /* Post construction fixup: set the transport in the connected channel.
45
+ Must be called before any call stack using this filter is used. */
46
+ void grpc_connected_channel_bind_transport(grpc_channel_stack* channel_stack,
47
+ grpc_transport* transport);
48
+
49
+ grpc_stream* grpc_connected_channel_get_stream(grpc_call_element* elem);
50
+
51
+ #endif /* GRPC_INTERNAL_CORE_CHANNEL_CONNECTED_CHANNEL_H */
@@ -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
+ #ifndef GRPC_INTERNAL_CORE_CHANNEL_CONTEXT_H
35
+ #define GRPC_INTERNAL_CORE_CHANNEL_CONTEXT_H
36
+
37
+ /* Call object context pointers */
38
+ typedef enum {
39
+ GRPC_CONTEXT_SECURITY = 0,
40
+ GRPC_CONTEXT_TRACING,
41
+ GRPC_CONTEXT_COUNT
42
+ } grpc_context_index;
43
+
44
+ typedef struct {
45
+ void *value;
46
+ void (*destroy)(void *);
47
+ } grpc_call_context_element;
48
+
49
+ #endif /* GRPC_INTERNAL_CORE_CHANNEL_CONTEXT_H */
@@ -0,0 +1,248 @@
1
+ /*
2
+ * Copyright 2015, Google Inc.
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions are
7
+ * met:
8
+ *
9
+ * * Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * * Redistributions in binary form must reproduce the above
12
+ * copyright notice, this list of conditions and the following disclaimer
13
+ * in the documentation and/or other materials provided with the
14
+ * distribution.
15
+ * * Neither the name of Google Inc. nor the names of its
16
+ * contributors may be used to endorse or promote products derived from
17
+ * this software without specific prior written permission.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ *
31
+ */
32
+
33
+ #include "src/core/channel/http_client_filter.h"
34
+ #include <grpc/support/alloc.h>
35
+ #include <grpc/support/log.h>
36
+ #include <grpc/support/string_util.h>
37
+ #include <string.h>
38
+ #include "src/core/profiling/timers.h"
39
+ #include "src/core/support/string.h"
40
+ #include "src/core/transport/static_metadata.h"
41
+
42
+ typedef struct call_data {
43
+ grpc_linked_mdelem method;
44
+ grpc_linked_mdelem scheme;
45
+ grpc_linked_mdelem authority;
46
+ grpc_linked_mdelem te_trailers;
47
+ grpc_linked_mdelem content_type;
48
+ grpc_linked_mdelem user_agent;
49
+
50
+ grpc_metadata_batch *recv_initial_metadata;
51
+
52
+ /** Closure to call when finished with the hc_on_recv hook */
53
+ grpc_closure *on_done_recv;
54
+ /** Receive closures are chained: we inject this closure as the on_done_recv
55
+ up-call on transport_op, and remember to call our on_done_recv member
56
+ after handling it. */
57
+ grpc_closure hc_on_recv;
58
+ } call_data;
59
+
60
+ typedef struct channel_data {
61
+ grpc_mdelem *static_scheme;
62
+ grpc_mdelem *user_agent;
63
+ } channel_data;
64
+
65
+ typedef struct {
66
+ grpc_call_element *elem;
67
+ grpc_exec_ctx *exec_ctx;
68
+ } client_recv_filter_args;
69
+
70
+ static grpc_mdelem *client_recv_filter(void *user_data, grpc_mdelem *md) {
71
+ client_recv_filter_args *a = user_data;
72
+ if (md == GRPC_MDELEM_STATUS_200) {
73
+ return NULL;
74
+ } else if (md->key == GRPC_MDSTR_STATUS) {
75
+ grpc_call_element_send_cancel(a->exec_ctx, a->elem);
76
+ return NULL;
77
+ } else if (md->key == GRPC_MDSTR_CONTENT_TYPE) {
78
+ return NULL;
79
+ }
80
+ return md;
81
+ }
82
+
83
+ static void hc_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, int success) {
84
+ grpc_call_element *elem = user_data;
85
+ call_data *calld = elem->call_data;
86
+ client_recv_filter_args a;
87
+ a.elem = elem;
88
+ a.exec_ctx = exec_ctx;
89
+ grpc_metadata_batch_filter(calld->recv_initial_metadata, client_recv_filter,
90
+ &a);
91
+ calld->on_done_recv->cb(exec_ctx, calld->on_done_recv->cb_arg, success);
92
+ }
93
+
94
+ static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) {
95
+ /* eat the things we'd like to set ourselves */
96
+ if (md->key == GRPC_MDSTR_METHOD) return NULL;
97
+ if (md->key == GRPC_MDSTR_SCHEME) return NULL;
98
+ if (md->key == GRPC_MDSTR_TE) return NULL;
99
+ if (md->key == GRPC_MDSTR_CONTENT_TYPE) return NULL;
100
+ if (md->key == GRPC_MDSTR_USER_AGENT) return NULL;
101
+ return md;
102
+ }
103
+
104
+ static void hc_mutate_op(grpc_call_element *elem,
105
+ grpc_transport_stream_op *op) {
106
+ /* grab pointers to our data from the call element */
107
+ call_data *calld = elem->call_data;
108
+ channel_data *channeld = elem->channel_data;
109
+ if (op->send_initial_metadata != NULL) {
110
+ grpc_metadata_batch_filter(op->send_initial_metadata, client_strip_filter,
111
+ elem);
112
+ /* Send : prefixed headers, which have to be before any application
113
+ layer headers. */
114
+ grpc_metadata_batch_add_head(op->send_initial_metadata, &calld->method,
115
+ GRPC_MDELEM_METHOD_POST);
116
+ grpc_metadata_batch_add_head(op->send_initial_metadata, &calld->scheme,
117
+ channeld->static_scheme);
118
+ grpc_metadata_batch_add_tail(op->send_initial_metadata, &calld->te_trailers,
119
+ GRPC_MDELEM_TE_TRAILERS);
120
+ grpc_metadata_batch_add_tail(
121
+ op->send_initial_metadata, &calld->content_type,
122
+ GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC);
123
+ grpc_metadata_batch_add_tail(op->send_initial_metadata, &calld->user_agent,
124
+ GRPC_MDELEM_REF(channeld->user_agent));
125
+ }
126
+
127
+ if (op->recv_initial_metadata != NULL) {
128
+ /* substitute our callback for the higher callback */
129
+ calld->recv_initial_metadata = op->recv_initial_metadata;
130
+ calld->on_done_recv = op->on_complete;
131
+ op->on_complete = &calld->hc_on_recv;
132
+ }
133
+ }
134
+
135
+ static void hc_start_transport_op(grpc_exec_ctx *exec_ctx,
136
+ grpc_call_element *elem,
137
+ grpc_transport_stream_op *op) {
138
+ GPR_TIMER_BEGIN("hc_start_transport_op", 0);
139
+ GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
140
+ hc_mutate_op(elem, op);
141
+ GPR_TIMER_END("hc_start_transport_op", 0);
142
+ grpc_call_next_op(exec_ctx, elem, op);
143
+ }
144
+
145
+ /* Constructor for call_data */
146
+ static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
147
+ grpc_call_element_args *args) {
148
+ call_data *calld = elem->call_data;
149
+ calld->on_done_recv = NULL;
150
+ grpc_closure_init(&calld->hc_on_recv, hc_on_recv, elem);
151
+ }
152
+
153
+ /* Destructor for call_data */
154
+ static void destroy_call_elem(grpc_exec_ctx *exec_ctx,
155
+ grpc_call_element *elem) {}
156
+
157
+ static grpc_mdelem *scheme_from_args(const grpc_channel_args *args) {
158
+ unsigned i;
159
+ size_t j;
160
+ grpc_mdelem *valid_schemes[] = {GRPC_MDELEM_SCHEME_HTTP,
161
+ GRPC_MDELEM_SCHEME_HTTPS};
162
+ if (args != NULL) {
163
+ for (i = 0; i < args->num_args; ++i) {
164
+ if (args->args[i].type == GRPC_ARG_STRING &&
165
+ strcmp(args->args[i].key, GRPC_ARG_HTTP2_SCHEME) == 0) {
166
+ for (j = 0; j < GPR_ARRAY_SIZE(valid_schemes); j++) {
167
+ if (0 == strcmp(grpc_mdstr_as_c_string(valid_schemes[j]->value),
168
+ args->args[i].value.string)) {
169
+ return valid_schemes[j];
170
+ }
171
+ }
172
+ }
173
+ }
174
+ }
175
+ return GRPC_MDELEM_SCHEME_HTTP;
176
+ }
177
+
178
+ static grpc_mdstr *user_agent_from_args(const grpc_channel_args *args) {
179
+ gpr_strvec v;
180
+ size_t i;
181
+ int is_first = 1;
182
+ char *tmp;
183
+ grpc_mdstr *result;
184
+
185
+ gpr_strvec_init(&v);
186
+
187
+ for (i = 0; args && i < args->num_args; i++) {
188
+ if (0 == strcmp(args->args[i].key, GRPC_ARG_PRIMARY_USER_AGENT_STRING)) {
189
+ if (args->args[i].type != GRPC_ARG_STRING) {
190
+ gpr_log(GPR_ERROR, "Channel argument '%s' should be a string",
191
+ GRPC_ARG_PRIMARY_USER_AGENT_STRING);
192
+ } else {
193
+ if (!is_first) gpr_strvec_add(&v, gpr_strdup(" "));
194
+ is_first = 0;
195
+ gpr_strvec_add(&v, gpr_strdup(args->args[i].value.string));
196
+ }
197
+ }
198
+ }
199
+
200
+ gpr_asprintf(&tmp, "%sgrpc-c/%s (%s)", is_first ? "" : " ",
201
+ grpc_version_string(), GPR_PLATFORM_STRING);
202
+ is_first = 0;
203
+ gpr_strvec_add(&v, tmp);
204
+
205
+ for (i = 0; args && i < args->num_args; i++) {
206
+ if (0 == strcmp(args->args[i].key, GRPC_ARG_SECONDARY_USER_AGENT_STRING)) {
207
+ if (args->args[i].type != GRPC_ARG_STRING) {
208
+ gpr_log(GPR_ERROR, "Channel argument '%s' should be a string",
209
+ GRPC_ARG_SECONDARY_USER_AGENT_STRING);
210
+ } else {
211
+ if (!is_first) gpr_strvec_add(&v, gpr_strdup(" "));
212
+ is_first = 0;
213
+ gpr_strvec_add(&v, gpr_strdup(args->args[i].value.string));
214
+ }
215
+ }
216
+ }
217
+
218
+ tmp = gpr_strvec_flatten(&v, NULL);
219
+ gpr_strvec_destroy(&v);
220
+ result = grpc_mdstr_from_string(tmp);
221
+ gpr_free(tmp);
222
+
223
+ return result;
224
+ }
225
+
226
+ /* Constructor for channel_data */
227
+ static void init_channel_elem(grpc_exec_ctx *exec_ctx,
228
+ grpc_channel_element *elem,
229
+ grpc_channel_element_args *args) {
230
+ channel_data *chand = elem->channel_data;
231
+ GPR_ASSERT(!args->is_last);
232
+ chand->static_scheme = scheme_from_args(args->channel_args);
233
+ chand->user_agent = grpc_mdelem_from_metadata_strings(
234
+ GRPC_MDSTR_USER_AGENT, user_agent_from_args(args->channel_args));
235
+ }
236
+
237
+ /* Destructor for channel data */
238
+ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
239
+ grpc_channel_element *elem) {
240
+ channel_data *chand = elem->channel_data;
241
+ GRPC_MDELEM_UNREF(chand->user_agent);
242
+ }
243
+
244
+ const grpc_channel_filter grpc_http_client_filter = {
245
+ hc_start_transport_op, grpc_channel_next_op, sizeof(call_data),
246
+ init_call_elem, grpc_call_stack_ignore_set_pollset, destroy_call_elem,
247
+ sizeof(channel_data), init_channel_elem, destroy_channel_elem,
248
+ grpc_call_next_get_peer, "http-client"};