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,156 @@
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_TRANSPORT_METADATA_H
35
+ #define GRPC_INTERNAL_CORE_TRANSPORT_METADATA_H
36
+
37
+ #include <grpc/support/slice.h>
38
+ #include <grpc/support/useful.h>
39
+
40
+ /* This file provides a mechanism for tracking metadata through the grpc stack.
41
+ It's not intended for consumption outside of the library.
42
+
43
+ Metadata is tracked in the context of a grpc_mdctx. For the time being there
44
+ is one of these per-channel, avoiding cross channel interference with memory
45
+ use and lock contention.
46
+
47
+ The context tracks unique strings (grpc_mdstr) and pairs of strings
48
+ (grpc_mdelem). Any of these objects can be checked for equality by comparing
49
+ their pointers. These objects are reference counted.
50
+
51
+ grpc_mdelem can additionally store a (non-NULL) user data pointer. This
52
+ pointer is intended to be used to cache semantic meaning of a metadata
53
+ element. For example, an OAuth token may cache the credentials it represents
54
+ and the time at which it expires in the mdelem user data.
55
+
56
+ Combining this metadata cache and the hpack compression table allows us to
57
+ simply lookup complete preparsed objects quickly, incurring a few atomic
58
+ ops per metadata element on the fast path.
59
+
60
+ grpc_mdelem instances MAY live longer than their refcount implies, and are
61
+ garbage collected periodically, meaning cached data can easily outlive a
62
+ single request.
63
+
64
+ STATIC METADATA: in static_metadata.h we declare a set of static metadata.
65
+ These mdelems and mdstrs are available via pre-declared code generated macros
66
+ and are available to code anywhere between grpc_init() and grpc_shutdown().
67
+ They are not refcounted, but can be passed to _ref and _unref functions
68
+ declared here - in which case those functions are effectively no-ops. */
69
+
70
+ /* Forward declarations */
71
+ typedef struct grpc_mdstr grpc_mdstr;
72
+ typedef struct grpc_mdelem grpc_mdelem;
73
+
74
+ /* if changing this, make identical changes in internal_string in metadata.c */
75
+ struct grpc_mdstr {
76
+ const gpr_slice slice;
77
+ const gpr_uint32 hash;
78
+ /* there is a private part to this in metadata.c */
79
+ };
80
+
81
+ /* if changing this, make identical changes in internal_metadata in
82
+ metadata.c */
83
+ struct grpc_mdelem {
84
+ grpc_mdstr *const key;
85
+ grpc_mdstr *const value;
86
+ /* there is a private part to this in metadata.c */
87
+ };
88
+
89
+ void grpc_test_only_set_metadata_hash_seed(gpr_uint32 seed);
90
+
91
+ /* Constructors for grpc_mdstr instances; take a variety of data types that
92
+ clients may have handy */
93
+ grpc_mdstr *grpc_mdstr_from_string(const char *str);
94
+ /* Unrefs the slice. */
95
+ grpc_mdstr *grpc_mdstr_from_slice(gpr_slice slice);
96
+ grpc_mdstr *grpc_mdstr_from_buffer(const gpr_uint8 *str, size_t length);
97
+
98
+ /* Returns a borrowed slice from the mdstr with its contents base64 encoded
99
+ and huffman compressed */
100
+ gpr_slice grpc_mdstr_as_base64_encoded_and_huffman_compressed(grpc_mdstr *str);
101
+
102
+ /* Constructors for grpc_mdelem instances; take a variety of data types that
103
+ clients may have handy */
104
+ grpc_mdelem *grpc_mdelem_from_metadata_strings(grpc_mdstr *key,
105
+ grpc_mdstr *value);
106
+ grpc_mdelem *grpc_mdelem_from_strings(const char *key, const char *value);
107
+ /* Unrefs the slices. */
108
+ grpc_mdelem *grpc_mdelem_from_slices(gpr_slice key, gpr_slice value);
109
+ grpc_mdelem *grpc_mdelem_from_string_and_buffer(const char *key,
110
+ const gpr_uint8 *value,
111
+ size_t value_length);
112
+
113
+ /* Mutator and accessor for grpc_mdelem user data. The destructor function
114
+ is used as a type tag and is checked during user_data fetch. */
115
+ void *grpc_mdelem_get_user_data(grpc_mdelem *md,
116
+ void (*if_destroy_func)(void *));
117
+ void grpc_mdelem_set_user_data(grpc_mdelem *md, void (*destroy_func)(void *),
118
+ void *user_data);
119
+
120
+ /* Reference counting */
121
+ #ifdef GRPC_METADATA_REFCOUNT_DEBUG
122
+ #define GRPC_MDSTR_REF(s) grpc_mdstr_ref((s), __FILE__, __LINE__)
123
+ #define GRPC_MDSTR_UNREF(s) grpc_mdstr_unref((s), __FILE__, __LINE__)
124
+ #define GRPC_MDELEM_REF(s) grpc_mdelem_ref((s), __FILE__, __LINE__)
125
+ #define GRPC_MDELEM_UNREF(s) grpc_mdelem_unref((s), __FILE__, __LINE__)
126
+ grpc_mdstr *grpc_mdstr_ref(grpc_mdstr *s, const char *file, int line);
127
+ void grpc_mdstr_unref(grpc_mdstr *s, const char *file, int line);
128
+ grpc_mdelem *grpc_mdelem_ref(grpc_mdelem *md, const char *file, int line);
129
+ void grpc_mdelem_unref(grpc_mdelem *md, const char *file, int line);
130
+ #else
131
+ #define GRPC_MDSTR_REF(s) grpc_mdstr_ref((s))
132
+ #define GRPC_MDSTR_UNREF(s) grpc_mdstr_unref((s))
133
+ #define GRPC_MDELEM_REF(s) grpc_mdelem_ref((s))
134
+ #define GRPC_MDELEM_UNREF(s) grpc_mdelem_unref((s))
135
+ grpc_mdstr *grpc_mdstr_ref(grpc_mdstr *s);
136
+ void grpc_mdstr_unref(grpc_mdstr *s);
137
+ grpc_mdelem *grpc_mdelem_ref(grpc_mdelem *md);
138
+ void grpc_mdelem_unref(grpc_mdelem *md);
139
+ #endif
140
+
141
+ /* Recover a char* from a grpc_mdstr. The returned string is null terminated.
142
+ Does not promise that the returned string has no embedded nulls however. */
143
+ const char *grpc_mdstr_as_c_string(grpc_mdstr *s);
144
+
145
+ #define GRPC_MDSTR_LENGTH(s) (GPR_SLICE_LENGTH(s->slice))
146
+
147
+ int grpc_mdstr_is_legal_header(grpc_mdstr *s);
148
+ int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s);
149
+ int grpc_mdstr_is_bin_suffixed(grpc_mdstr *s);
150
+
151
+ #define GRPC_MDSTR_KV_HASH(k_hash, v_hash) (GPR_ROTL((k_hash), 2) ^ (v_hash))
152
+
153
+ void grpc_mdctx_global_init(void);
154
+ void grpc_mdctx_global_shutdown(void);
155
+
156
+ #endif /* GRPC_INTERNAL_CORE_TRANSPORT_METADATA_H */
@@ -0,0 +1,194 @@
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/transport/metadata_batch.h"
35
+
36
+ #include <string.h>
37
+
38
+ #include <grpc/support/alloc.h>
39
+ #include <grpc/support/log.h>
40
+
41
+ #include "src/core/profiling/timers.h"
42
+
43
+ static void assert_valid_list(grpc_mdelem_list *list) {
44
+ #ifndef NDEBUG
45
+ grpc_linked_mdelem *l;
46
+
47
+ GPR_ASSERT((list->head == NULL) == (list->tail == NULL));
48
+ if (!list->head) return;
49
+ GPR_ASSERT(list->head->prev == NULL);
50
+ GPR_ASSERT(list->tail->next == NULL);
51
+ GPR_ASSERT((list->head == list->tail) == (list->head->next == NULL));
52
+
53
+ for (l = list->head; l; l = l->next) {
54
+ GPR_ASSERT(l->md);
55
+ GPR_ASSERT((l->prev == NULL) == (l == list->head));
56
+ GPR_ASSERT((l->next == NULL) == (l == list->tail));
57
+ if (l->next) GPR_ASSERT(l->next->prev == l);
58
+ if (l->prev) GPR_ASSERT(l->prev->next == l);
59
+ }
60
+ #endif /* NDEBUG */
61
+ }
62
+
63
+ #ifndef NDEBUG
64
+ void grpc_metadata_batch_assert_ok(grpc_metadata_batch *batch) {
65
+ assert_valid_list(&batch->list);
66
+ }
67
+ #endif /* NDEBUG */
68
+
69
+ void grpc_metadata_batch_init(grpc_metadata_batch *batch) {
70
+ batch->list.head = batch->list.tail = NULL;
71
+ batch->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
72
+ }
73
+
74
+ void grpc_metadata_batch_destroy(grpc_metadata_batch *batch) {
75
+ grpc_linked_mdelem *l;
76
+ for (l = batch->list.head; l; l = l->next) {
77
+ GRPC_MDELEM_UNREF(l->md);
78
+ }
79
+ }
80
+
81
+ void grpc_metadata_batch_add_head(grpc_metadata_batch *batch,
82
+ grpc_linked_mdelem *storage,
83
+ grpc_mdelem *elem_to_add) {
84
+ GPR_ASSERT(elem_to_add);
85
+ storage->md = elem_to_add;
86
+ grpc_metadata_batch_link_head(batch, storage);
87
+ }
88
+
89
+ static void link_head(grpc_mdelem_list *list, grpc_linked_mdelem *storage) {
90
+ assert_valid_list(list);
91
+ GPR_ASSERT(storage->md);
92
+ storage->prev = NULL;
93
+ storage->next = list->head;
94
+ if (list->head != NULL) {
95
+ list->head->prev = storage;
96
+ } else {
97
+ list->tail = storage;
98
+ }
99
+ list->head = storage;
100
+ assert_valid_list(list);
101
+ }
102
+
103
+ void grpc_metadata_batch_link_head(grpc_metadata_batch *batch,
104
+ grpc_linked_mdelem *storage) {
105
+ link_head(&batch->list, storage);
106
+ }
107
+
108
+ void grpc_metadata_batch_add_tail(grpc_metadata_batch *batch,
109
+ grpc_linked_mdelem *storage,
110
+ grpc_mdelem *elem_to_add) {
111
+ GPR_ASSERT(elem_to_add);
112
+ storage->md = elem_to_add;
113
+ grpc_metadata_batch_link_tail(batch, storage);
114
+ }
115
+
116
+ static void link_tail(grpc_mdelem_list *list, grpc_linked_mdelem *storage) {
117
+ assert_valid_list(list);
118
+ GPR_ASSERT(storage->md);
119
+ storage->prev = list->tail;
120
+ storage->next = NULL;
121
+ storage->reserved = NULL;
122
+ if (list->tail != NULL) {
123
+ list->tail->next = storage;
124
+ } else {
125
+ list->head = storage;
126
+ }
127
+ list->tail = storage;
128
+ assert_valid_list(list);
129
+ }
130
+
131
+ void grpc_metadata_batch_link_tail(grpc_metadata_batch *batch,
132
+ grpc_linked_mdelem *storage) {
133
+ link_tail(&batch->list, storage);
134
+ }
135
+
136
+ void grpc_metadata_batch_move(grpc_metadata_batch *dst,
137
+ grpc_metadata_batch *src) {
138
+ *dst = *src;
139
+ memset(src, 0, sizeof(grpc_metadata_batch));
140
+ }
141
+
142
+ void grpc_metadata_batch_filter(grpc_metadata_batch *batch,
143
+ grpc_mdelem *(*filter)(void *user_data,
144
+ grpc_mdelem *elem),
145
+ void *user_data) {
146
+ grpc_linked_mdelem *l;
147
+ grpc_linked_mdelem *next;
148
+
149
+ GPR_TIMER_BEGIN("grpc_metadata_batch_filter", 0);
150
+
151
+ assert_valid_list(&batch->list);
152
+ for (l = batch->list.head; l; l = next) {
153
+ grpc_mdelem *orig = l->md;
154
+ grpc_mdelem *filt = filter(user_data, orig);
155
+ next = l->next;
156
+ if (filt == NULL) {
157
+ if (l->prev) {
158
+ l->prev->next = l->next;
159
+ }
160
+ if (l->next) {
161
+ l->next->prev = l->prev;
162
+ }
163
+ if (batch->list.head == l) {
164
+ batch->list.head = l->next;
165
+ }
166
+ if (batch->list.tail == l) {
167
+ batch->list.tail = l->prev;
168
+ }
169
+ assert_valid_list(&batch->list);
170
+ GRPC_MDELEM_UNREF(l->md);
171
+ } else if (filt != orig) {
172
+ GRPC_MDELEM_UNREF(orig);
173
+ l->md = filt;
174
+ }
175
+ }
176
+ assert_valid_list(&batch->list);
177
+
178
+ GPR_TIMER_END("grpc_metadata_batch_filter", 0);
179
+ }
180
+
181
+ static grpc_mdelem *no_metadata_for_you(void *user_data, grpc_mdelem *elem) {
182
+ return NULL;
183
+ }
184
+
185
+ void grpc_metadata_batch_clear(grpc_metadata_batch *batch) {
186
+ batch->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
187
+ grpc_metadata_batch_filter(batch, no_metadata_for_you, NULL);
188
+ }
189
+
190
+ int grpc_metadata_batch_is_empty(grpc_metadata_batch *batch) {
191
+ return batch->list.head == NULL &&
192
+ gpr_time_cmp(gpr_inf_future(batch->deadline.clock_type),
193
+ batch->deadline) == 0;
194
+ }
@@ -0,0 +1,125 @@
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_TRANSPORT_STREAM_OP_H
35
+ #define GRPC_INTERNAL_CORE_TRANSPORT_STREAM_OP_H
36
+
37
+ #include <grpc/grpc.h>
38
+ #include <grpc/support/port_platform.h>
39
+ #include <grpc/support/slice.h>
40
+ #include <grpc/support/time.h>
41
+ #include "src/core/transport/metadata.h"
42
+
43
+ typedef struct grpc_linked_mdelem {
44
+ grpc_mdelem *md;
45
+ struct grpc_linked_mdelem *next;
46
+ struct grpc_linked_mdelem *prev;
47
+ void *reserved;
48
+ } grpc_linked_mdelem;
49
+
50
+ typedef struct grpc_mdelem_list {
51
+ grpc_linked_mdelem *head;
52
+ grpc_linked_mdelem *tail;
53
+ } grpc_mdelem_list;
54
+
55
+ typedef struct grpc_metadata_batch {
56
+ /** Metadata elements in this batch */
57
+ grpc_mdelem_list list;
58
+ /** Used to calculate grpc-timeout at the point of sending,
59
+ or gpr_inf_future if this batch does not need to send a
60
+ grpc-timeout */
61
+ gpr_timespec deadline;
62
+ } grpc_metadata_batch;
63
+
64
+ void grpc_metadata_batch_init(grpc_metadata_batch *batch);
65
+ void grpc_metadata_batch_destroy(grpc_metadata_batch *batch);
66
+ void grpc_metadata_batch_clear(grpc_metadata_batch *batch);
67
+ int grpc_metadata_batch_is_empty(grpc_metadata_batch *batch);
68
+
69
+ /** Moves the metadata information from \a src to \a dst. Upon return, \a src is
70
+ * zeroed. */
71
+ void grpc_metadata_batch_move(grpc_metadata_batch *dst,
72
+ grpc_metadata_batch *src);
73
+
74
+ /** Add \a storage to the beginning of \a batch. storage->md is
75
+ assumed to be valid.
76
+ \a storage is owned by the caller and must survive for the
77
+ lifetime of batch. This usually means it should be around
78
+ for the lifetime of the call. */
79
+ void grpc_metadata_batch_link_head(grpc_metadata_batch *batch,
80
+ grpc_linked_mdelem *storage);
81
+ /** Add \a storage to the end of \a batch. storage->md is
82
+ assumed to be valid.
83
+ \a storage is owned by the caller and must survive for the
84
+ lifetime of batch. This usually means it should be around
85
+ for the lifetime of the call. */
86
+ void grpc_metadata_batch_link_tail(grpc_metadata_batch *batch,
87
+ grpc_linked_mdelem *storage);
88
+
89
+ /** Add \a elem_to_add as the first element in \a batch, using
90
+ \a storage as backing storage for the linked list element.
91
+ \a storage is owned by the caller and must survive for the
92
+ lifetime of batch. This usually means it should be around
93
+ for the lifetime of the call.
94
+ Takes ownership of \a elem_to_add */
95
+ void grpc_metadata_batch_add_head(grpc_metadata_batch *batch,
96
+ grpc_linked_mdelem *storage,
97
+ grpc_mdelem *elem_to_add);
98
+ /** Add \a elem_to_add as the last element in \a batch, using
99
+ \a storage as backing storage for the linked list element.
100
+ \a storage is owned by the caller and must survive for the
101
+ lifetime of batch. This usually means it should be around
102
+ for the lifetime of the call.
103
+ Takes ownership of \a elem_to_add */
104
+ void grpc_metadata_batch_add_tail(grpc_metadata_batch *batch,
105
+ grpc_linked_mdelem *storage,
106
+ grpc_mdelem *elem_to_add);
107
+
108
+ /** For each element in \a batch, execute \a filter.
109
+ The return value from \a filter will be substituted for the
110
+ grpc_mdelem passed to \a filter. If \a filter returns NULL,
111
+ the element will be moved to the garbage list. */
112
+ void grpc_metadata_batch_filter(grpc_metadata_batch *batch,
113
+ grpc_mdelem *(*filter)(void *user_data,
114
+ grpc_mdelem *elem),
115
+ void *user_data);
116
+
117
+ #ifndef NDEBUG
118
+ void grpc_metadata_batch_assert_ok(grpc_metadata_batch *comd);
119
+ #else
120
+ #define grpc_metadata_batch_assert_ok(comd) \
121
+ do { \
122
+ } while (0)
123
+ #endif
124
+
125
+ #endif /* GRPC_INTERNAL_CORE_TRANSPORT_STREAM_OP_H */