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,52 @@
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_COMPRESSION_MESSAGE_COMPRESS_H
35
+ #define GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H
36
+
37
+ #include <grpc/compression.h>
38
+ #include <grpc/support/slice_buffer.h>
39
+
40
+ /* compress 'input' to 'output' using 'algorithm'.
41
+ On success, appends compressed slices to output and returns 1.
42
+ On failure, appends uncompressed slices to output and returns 0. */
43
+ int grpc_msg_compress(grpc_compression_algorithm algorithm,
44
+ gpr_slice_buffer* input, gpr_slice_buffer* output);
45
+
46
+ /* decompress 'input' to 'output' using 'algorithm'.
47
+ On success, appends slices to output and returns 1.
48
+ On failure, output is unchanged, and returns 0. */
49
+ int grpc_msg_decompress(grpc_compression_algorithm algorithm,
50
+ gpr_slice_buffer* input, gpr_slice_buffer* output);
51
+
52
+ #endif /* GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H */
@@ -0,0 +1,136 @@
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/debug/trace.h"
35
+
36
+ #include <string.h>
37
+
38
+ #include <grpc/grpc.h>
39
+ #include <grpc/support/alloc.h>
40
+ #include <grpc/support/log.h>
41
+ #include "src/core/support/env.h"
42
+
43
+ typedef struct tracer {
44
+ const char *name;
45
+ int *flag;
46
+ struct tracer *next;
47
+ } tracer;
48
+ static tracer *tracers;
49
+
50
+ void grpc_register_tracer(const char *name, int *flag) {
51
+ tracer *t = gpr_malloc(sizeof(*t));
52
+ t->name = name;
53
+ t->flag = flag;
54
+ t->next = tracers;
55
+ *flag = 0;
56
+ tracers = t;
57
+ }
58
+
59
+ static void add(const char *beg, const char *end, char ***ss, size_t *ns) {
60
+ size_t n = *ns;
61
+ size_t np = n + 1;
62
+ char *s;
63
+ size_t len;
64
+ GPR_ASSERT(end >= beg);
65
+ len = (size_t)(end - beg);
66
+ s = gpr_malloc(len + 1);
67
+ memcpy(s, beg, len);
68
+ s[len] = 0;
69
+ *ss = gpr_realloc(*ss, sizeof(char **) * np);
70
+ (*ss)[n] = s;
71
+ *ns = np;
72
+ }
73
+
74
+ static void split(const char *s, char ***ss, size_t *ns) {
75
+ const char *c = strchr(s, ',');
76
+ if (c == NULL) {
77
+ add(s, s + strlen(s), ss, ns);
78
+ } else {
79
+ add(s, c, ss, ns);
80
+ split(c + 1, ss, ns);
81
+ }
82
+ }
83
+
84
+ static void parse(const char *s) {
85
+ char **strings = NULL;
86
+ size_t nstrings = 0;
87
+ size_t i;
88
+ split(s, &strings, &nstrings);
89
+
90
+ for (i = 0; i < nstrings; i++) {
91
+ grpc_tracer_set_enabled(strings[i], 1);
92
+ }
93
+
94
+ for (i = 0; i < nstrings; i++) {
95
+ gpr_free(strings[i]);
96
+ }
97
+ gpr_free(strings);
98
+ }
99
+
100
+ void grpc_tracer_init(const char *env_var) {
101
+ char *e = gpr_getenv(env_var);
102
+ if (e != NULL) {
103
+ parse(e);
104
+ gpr_free(e);
105
+ }
106
+ }
107
+
108
+ void grpc_tracer_shutdown(void) {
109
+ while (tracers) {
110
+ tracer *t = tracers;
111
+ tracers = t->next;
112
+ gpr_free(t);
113
+ }
114
+ }
115
+
116
+ int grpc_tracer_set_enabled(const char *name, int enabled) {
117
+ tracer *t;
118
+ if (0 == strcmp(name, "all")) {
119
+ for (t = tracers; t; t = t->next) {
120
+ *t->flag = 1;
121
+ }
122
+ } else {
123
+ int found = 0;
124
+ for (t = tracers; t; t = t->next) {
125
+ if (0 == strcmp(name, t->name)) {
126
+ *t->flag = enabled;
127
+ found = 1;
128
+ }
129
+ }
130
+ if (!found) {
131
+ gpr_log(GPR_ERROR, "Unknown trace var: '%s'", name);
132
+ return 0; /* early return */
133
+ }
134
+ }
135
+ return 1;
136
+ }
@@ -0,0 +1,43 @@
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_DEBUG_TRACE_H
35
+ #define GRPC_INTERNAL_CORE_DEBUG_TRACE_H
36
+
37
+ #include <grpc/support/port_platform.h>
38
+
39
+ void grpc_register_tracer(const char *name, int *flag);
40
+ void grpc_tracer_init(const char *env_var_name);
41
+ void grpc_tracer_shutdown(void);
42
+
43
+ #endif /* GRPC_INTERNAL_CORE_DEBUG_TRACE_H */
@@ -0,0 +1,120 @@
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/httpcli/format_request.h"
35
+
36
+ #include <stdarg.h>
37
+ #include <stdio.h>
38
+ #include <string.h>
39
+
40
+ #include "src/core/support/string.h"
41
+ #include <grpc/support/alloc.h>
42
+ #include <grpc/support/slice.h>
43
+ #include <grpc/support/string_util.h>
44
+ #include <grpc/support/useful.h>
45
+
46
+ static void fill_common_header(const grpc_httpcli_request *request,
47
+ gpr_strvec *buf) {
48
+ size_t i;
49
+ gpr_strvec_add(buf, gpr_strdup(request->path));
50
+ gpr_strvec_add(buf, gpr_strdup(" HTTP/1.0\r\n"));
51
+ /* just in case some crazy server really expects HTTP/1.1 */
52
+ gpr_strvec_add(buf, gpr_strdup("Host: "));
53
+ gpr_strvec_add(buf, gpr_strdup(request->host));
54
+ gpr_strvec_add(buf, gpr_strdup("\r\n"));
55
+ gpr_strvec_add(buf, gpr_strdup("Connection: close\r\n"));
56
+ gpr_strvec_add(buf,
57
+ gpr_strdup("User-Agent: " GRPC_HTTPCLI_USER_AGENT "\r\n"));
58
+ /* user supplied headers */
59
+ for (i = 0; i < request->hdr_count; i++) {
60
+ gpr_strvec_add(buf, gpr_strdup(request->hdrs[i].key));
61
+ gpr_strvec_add(buf, gpr_strdup(": "));
62
+ gpr_strvec_add(buf, gpr_strdup(request->hdrs[i].value));
63
+ gpr_strvec_add(buf, gpr_strdup("\r\n"));
64
+ }
65
+ }
66
+
67
+ gpr_slice grpc_httpcli_format_get_request(const grpc_httpcli_request *request) {
68
+ gpr_strvec out;
69
+ char *flat;
70
+ size_t flat_len;
71
+
72
+ gpr_strvec_init(&out);
73
+ gpr_strvec_add(&out, gpr_strdup("GET "));
74
+ fill_common_header(request, &out);
75
+ gpr_strvec_add(&out, gpr_strdup("\r\n"));
76
+
77
+ flat = gpr_strvec_flatten(&out, &flat_len);
78
+ gpr_strvec_destroy(&out);
79
+
80
+ return gpr_slice_new(flat, flat_len, gpr_free);
81
+ }
82
+
83
+ gpr_slice grpc_httpcli_format_post_request(const grpc_httpcli_request *request,
84
+ const char *body_bytes,
85
+ size_t body_size) {
86
+ gpr_strvec out;
87
+ char *tmp;
88
+ size_t out_len;
89
+ size_t i;
90
+
91
+ gpr_strvec_init(&out);
92
+
93
+ gpr_strvec_add(&out, gpr_strdup("POST "));
94
+ fill_common_header(request, &out);
95
+ if (body_bytes) {
96
+ gpr_uint8 has_content_type = 0;
97
+ for (i = 0; i < request->hdr_count; i++) {
98
+ if (strcmp(request->hdrs[i].key, "Content-Type") == 0) {
99
+ has_content_type = 1;
100
+ break;
101
+ }
102
+ }
103
+ if (!has_content_type) {
104
+ gpr_strvec_add(&out, gpr_strdup("Content-Type: text/plain\r\n"));
105
+ }
106
+ gpr_asprintf(&tmp, "Content-Length: %lu\r\n", (unsigned long)body_size);
107
+ gpr_strvec_add(&out, tmp);
108
+ }
109
+ gpr_strvec_add(&out, gpr_strdup("\r\n"));
110
+ tmp = gpr_strvec_flatten(&out, &out_len);
111
+ gpr_strvec_destroy(&out);
112
+
113
+ if (body_bytes) {
114
+ tmp = gpr_realloc(tmp, out_len + body_size);
115
+ memcpy(tmp + out_len, body_bytes, body_size);
116
+ out_len += body_size;
117
+ }
118
+
119
+ return gpr_slice_new(tmp, out_len, gpr_free);
120
+ }
@@ -0,0 +1,45 @@
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_HTTPCLI_FORMAT_REQUEST_H
35
+ #define GRPC_INTERNAL_CORE_HTTPCLI_FORMAT_REQUEST_H
36
+
37
+ #include "src/core/httpcli/httpcli.h"
38
+ #include <grpc/support/slice.h>
39
+
40
+ gpr_slice grpc_httpcli_format_get_request(const grpc_httpcli_request *request);
41
+ gpr_slice grpc_httpcli_format_post_request(const grpc_httpcli_request *request,
42
+ const char *body_bytes,
43
+ size_t body_size);
44
+
45
+ #endif /* GRPC_INTERNAL_CORE_HTTPCLI_FORMAT_REQUEST_H */
@@ -0,0 +1,286 @@
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/iomgr/sockaddr.h"
35
+ #include "src/core/httpcli/httpcli.h"
36
+
37
+ #include <string.h>
38
+
39
+ #include "src/core/iomgr/endpoint.h"
40
+ #include "src/core/iomgr/resolve_address.h"
41
+ #include "src/core/iomgr/tcp_client.h"
42
+ #include "src/core/httpcli/format_request.h"
43
+ #include "src/core/httpcli/parser.h"
44
+ #include "src/core/support/string.h"
45
+ #include <grpc/support/alloc.h>
46
+ #include <grpc/support/log.h>
47
+ #include <grpc/support/string_util.h>
48
+
49
+ typedef struct {
50
+ gpr_slice request_text;
51
+ grpc_httpcli_parser parser;
52
+ grpc_resolved_addresses *addresses;
53
+ size_t next_address;
54
+ grpc_endpoint *ep;
55
+ char *host;
56
+ char *ssl_host_override;
57
+ gpr_timespec deadline;
58
+ int have_read_byte;
59
+ const grpc_httpcli_handshaker *handshaker;
60
+ grpc_httpcli_response_cb on_response;
61
+ void *user_data;
62
+ grpc_httpcli_context *context;
63
+ grpc_pollset *pollset;
64
+ grpc_iomgr_object iomgr_obj;
65
+ gpr_slice_buffer incoming;
66
+ gpr_slice_buffer outgoing;
67
+ grpc_closure on_read;
68
+ grpc_closure done_write;
69
+ grpc_closure connected;
70
+ } internal_request;
71
+
72
+ static grpc_httpcli_get_override g_get_override = NULL;
73
+ static grpc_httpcli_post_override g_post_override = NULL;
74
+
75
+ static void plaintext_handshake(grpc_exec_ctx *exec_ctx, void *arg,
76
+ grpc_endpoint *endpoint, const char *host,
77
+ void (*on_done)(grpc_exec_ctx *exec_ctx,
78
+ void *arg,
79
+ grpc_endpoint *endpoint)) {
80
+ on_done(exec_ctx, arg, endpoint);
81
+ }
82
+
83
+ const grpc_httpcli_handshaker grpc_httpcli_plaintext = {"http",
84
+ plaintext_handshake};
85
+
86
+ void grpc_httpcli_context_init(grpc_httpcli_context *context) {
87
+ grpc_pollset_set_init(&context->pollset_set);
88
+ }
89
+
90
+ void grpc_httpcli_context_destroy(grpc_httpcli_context *context) {
91
+ grpc_pollset_set_destroy(&context->pollset_set);
92
+ }
93
+
94
+ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req);
95
+
96
+ static void finish(grpc_exec_ctx *exec_ctx, internal_request *req,
97
+ int success) {
98
+ grpc_pollset_set_del_pollset(exec_ctx, &req->context->pollset_set,
99
+ req->pollset);
100
+ req->on_response(exec_ctx, req->user_data, success ? &req->parser.r : NULL);
101
+ grpc_httpcli_parser_destroy(&req->parser);
102
+ if (req->addresses != NULL) {
103
+ grpc_resolved_addresses_destroy(req->addresses);
104
+ }
105
+ if (req->ep != NULL) {
106
+ grpc_endpoint_destroy(exec_ctx, req->ep);
107
+ }
108
+ gpr_slice_unref(req->request_text);
109
+ gpr_free(req->host);
110
+ gpr_free(req->ssl_host_override);
111
+ grpc_iomgr_unregister_object(&req->iomgr_obj);
112
+ gpr_slice_buffer_destroy(&req->incoming);
113
+ gpr_slice_buffer_destroy(&req->outgoing);
114
+ gpr_free(req);
115
+ }
116
+
117
+ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, int success);
118
+
119
+ static void do_read(grpc_exec_ctx *exec_ctx, internal_request *req) {
120
+ grpc_endpoint_read(exec_ctx, req->ep, &req->incoming, &req->on_read);
121
+ }
122
+
123
+ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, int success) {
124
+ internal_request *req = user_data;
125
+ size_t i;
126
+
127
+ for (i = 0; i < req->incoming.count; i++) {
128
+ if (GPR_SLICE_LENGTH(req->incoming.slices[i])) {
129
+ req->have_read_byte = 1;
130
+ if (!grpc_httpcli_parser_parse(&req->parser, req->incoming.slices[i])) {
131
+ finish(exec_ctx, req, 0);
132
+ return;
133
+ }
134
+ }
135
+ }
136
+
137
+ if (success) {
138
+ do_read(exec_ctx, req);
139
+ } else if (!req->have_read_byte) {
140
+ next_address(exec_ctx, req);
141
+ } else {
142
+ finish(exec_ctx, req, grpc_httpcli_parser_eof(&req->parser));
143
+ }
144
+ }
145
+
146
+ static void on_written(grpc_exec_ctx *exec_ctx, internal_request *req) {
147
+ do_read(exec_ctx, req);
148
+ }
149
+
150
+ static void done_write(grpc_exec_ctx *exec_ctx, void *arg, int success) {
151
+ internal_request *req = arg;
152
+ if (success) {
153
+ on_written(exec_ctx, req);
154
+ } else {
155
+ next_address(exec_ctx, req);
156
+ }
157
+ }
158
+
159
+ static void start_write(grpc_exec_ctx *exec_ctx, internal_request *req) {
160
+ gpr_slice_ref(req->request_text);
161
+ gpr_slice_buffer_add(&req->outgoing, req->request_text);
162
+ grpc_endpoint_write(exec_ctx, req->ep, &req->outgoing, &req->done_write);
163
+ }
164
+
165
+ static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg,
166
+ grpc_endpoint *ep) {
167
+ internal_request *req = arg;
168
+
169
+ if (!ep) {
170
+ next_address(exec_ctx, req);
171
+ return;
172
+ }
173
+
174
+ req->ep = ep;
175
+ start_write(exec_ctx, req);
176
+ }
177
+
178
+ static void on_connected(grpc_exec_ctx *exec_ctx, void *arg, int success) {
179
+ internal_request *req = arg;
180
+
181
+ if (!req->ep) {
182
+ next_address(exec_ctx, req);
183
+ return;
184
+ }
185
+ req->handshaker->handshake(
186
+ exec_ctx, req, req->ep,
187
+ req->ssl_host_override ? req->ssl_host_override : req->host,
188
+ on_handshake_done);
189
+ }
190
+
191
+ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req) {
192
+ grpc_resolved_address *addr;
193
+ if (req->next_address == req->addresses->naddrs) {
194
+ finish(exec_ctx, req, 0);
195
+ return;
196
+ }
197
+ addr = &req->addresses->addrs[req->next_address++];
198
+ grpc_closure_init(&req->connected, on_connected, req);
199
+ grpc_tcp_client_connect(
200
+ exec_ctx, &req->connected, &req->ep, &req->context->pollset_set,
201
+ (struct sockaddr *)&addr->addr, addr->len, req->deadline);
202
+ }
203
+
204
+ static void on_resolved(grpc_exec_ctx *exec_ctx, void *arg,
205
+ grpc_resolved_addresses *addresses) {
206
+ internal_request *req = arg;
207
+ if (!addresses) {
208
+ finish(exec_ctx, req, 0);
209
+ return;
210
+ }
211
+ req->addresses = addresses;
212
+ req->next_address = 0;
213
+ next_address(exec_ctx, req);
214
+ }
215
+
216
+ static void internal_request_begin(
217
+ grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context,
218
+ grpc_pollset *pollset, const grpc_httpcli_request *request,
219
+ gpr_timespec deadline, grpc_httpcli_response_cb on_response,
220
+ void *user_data, const char *name, gpr_slice request_text) {
221
+ internal_request *req = gpr_malloc(sizeof(internal_request));
222
+ memset(req, 0, sizeof(*req));
223
+ req->request_text = request_text;
224
+ grpc_httpcli_parser_init(&req->parser);
225
+ req->on_response = on_response;
226
+ req->user_data = user_data;
227
+ req->deadline = deadline;
228
+ req->handshaker =
229
+ request->handshaker ? request->handshaker : &grpc_httpcli_plaintext;
230
+ req->context = context;
231
+ req->pollset = pollset;
232
+ grpc_closure_init(&req->on_read, on_read, req);
233
+ grpc_closure_init(&req->done_write, done_write, req);
234
+ gpr_slice_buffer_init(&req->incoming);
235
+ gpr_slice_buffer_init(&req->outgoing);
236
+ grpc_iomgr_register_object(&req->iomgr_obj, name);
237
+ req->host = gpr_strdup(request->host);
238
+ req->ssl_host_override = gpr_strdup(request->ssl_host_override);
239
+
240
+ grpc_pollset_set_add_pollset(exec_ctx, &req->context->pollset_set,
241
+ req->pollset);
242
+ grpc_resolve_address(request->host, req->handshaker->default_port,
243
+ on_resolved, req);
244
+ }
245
+
246
+ void grpc_httpcli_get(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context,
247
+ grpc_pollset *pollset,
248
+ const grpc_httpcli_request *request,
249
+ gpr_timespec deadline,
250
+ grpc_httpcli_response_cb on_response, void *user_data) {
251
+ char *name;
252
+ if (g_get_override &&
253
+ g_get_override(exec_ctx, request, deadline, on_response, user_data)) {
254
+ return;
255
+ }
256
+ gpr_asprintf(&name, "HTTP:GET:%s:%s", request->host, request->path);
257
+ internal_request_begin(exec_ctx, context, pollset, request, deadline,
258
+ on_response, user_data, name,
259
+ grpc_httpcli_format_get_request(request));
260
+ gpr_free(name);
261
+ }
262
+
263
+ void grpc_httpcli_post(grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context,
264
+ grpc_pollset *pollset,
265
+ const grpc_httpcli_request *request,
266
+ const char *body_bytes, size_t body_size,
267
+ gpr_timespec deadline,
268
+ grpc_httpcli_response_cb on_response, void *user_data) {
269
+ char *name;
270
+ if (g_post_override &&
271
+ g_post_override(exec_ctx, request, body_bytes, body_size, deadline,
272
+ on_response, user_data)) {
273
+ return;
274
+ }
275
+ gpr_asprintf(&name, "HTTP:POST:%s:%s", request->host, request->path);
276
+ internal_request_begin(
277
+ exec_ctx, context, pollset, request, deadline, on_response, user_data,
278
+ name, grpc_httpcli_format_post_request(request, body_bytes, body_size));
279
+ gpr_free(name);
280
+ }
281
+
282
+ void grpc_httpcli_set_override(grpc_httpcli_get_override get,
283
+ grpc_httpcli_post_override post) {
284
+ g_get_override = get;
285
+ g_post_override = post;
286
+ }