grpc 1.7.3 → 1.8.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 (616) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2106 -2116
  3. data/include/grpc/census.h +1 -432
  4. data/include/grpc/compression.h +9 -9
  5. data/include/grpc/grpc.h +115 -98
  6. data/include/grpc/grpc_cronet.h +3 -3
  7. data/include/grpc/grpc_posix.h +4 -4
  8. data/include/grpc/grpc_security.h +160 -88
  9. data/include/grpc/grpc_security_constants.h +7 -0
  10. data/include/grpc/impl/codegen/atm.h +9 -1
  11. data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
  12. data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
  13. data/include/grpc/impl/codegen/atm_windows.h +23 -22
  14. data/include/grpc/impl/codegen/byte_buffer.h +14 -14
  15. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
  16. data/include/grpc/impl/codegen/connectivity_state.h +0 -2
  17. data/include/grpc/impl/codegen/grpc_types.h +32 -28
  18. data/include/grpc/impl/codegen/port_platform.h +48 -0
  19. data/include/grpc/impl/codegen/slice.h +10 -10
  20. data/include/grpc/impl/codegen/sync_generic.h +9 -3
  21. data/include/grpc/slice.h +16 -17
  22. data/include/grpc/slice_buffer.h +22 -22
  23. data/include/grpc/support/alloc.h +11 -11
  24. data/include/grpc/support/avl.h +28 -20
  25. data/include/grpc/support/cmdline.h +13 -13
  26. data/include/grpc/support/histogram.h +17 -17
  27. data/include/grpc/support/host_port.h +2 -2
  28. data/include/grpc/support/log.h +9 -9
  29. data/include/grpc/support/log_windows.h +1 -1
  30. data/include/grpc/support/string_util.h +2 -2
  31. data/include/grpc/support/subprocess.h +5 -5
  32. data/include/grpc/support/sync.h +43 -27
  33. data/include/grpc/support/thd.h +6 -6
  34. data/include/grpc/support/tls_gcc.h +1 -1
  35. data/include/grpc/support/tls_pthread.h +1 -1
  36. data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
  37. data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
  38. data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
  39. data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
  40. data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
  41. data/src/core/ext/filters/client_channel/client_channel.h +16 -8
  42. data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
  43. data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
  44. data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
  45. data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
  46. data/src/core/ext/filters/client_channel/connector.h +29 -21
  47. data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
  48. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
  49. data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
  50. data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
  51. data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
  52. data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
  63. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
  65. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
  67. data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
  68. data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
  69. data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
  70. data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
  71. data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
  72. data/src/core/ext/filters/client_channel/parse_address.h +14 -6
  73. data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
  74. data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
  75. data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
  76. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
  77. data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
  78. data/src/core/ext/filters/client_channel/resolver.h +33 -27
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_ev_driver_posix.c → grpc_ares_ev_driver_posix.cc} +58 -56
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
  85. data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
  86. data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
  87. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
  88. data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
  89. data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
  90. data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
  91. data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
  92. data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
  93. data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
  94. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
  95. data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
  96. data/src/core/ext/filters/client_channel/subchannel.h +68 -60
  97. data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
  98. data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
  99. data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
  100. data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
  101. data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
  102. data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
  103. data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
  104. data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
  105. data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
  106. data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
  107. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
  108. data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
  109. data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
  110. data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
  111. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
  112. data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
  113. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
  114. data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
  115. data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
  116. data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
  117. data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
  118. data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
  119. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
  120. data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
  121. data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
  122. data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
  123. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
  124. data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
  125. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
  126. data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
  127. data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
  128. data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
  129. data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
  131. data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
  132. data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
  133. data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
  134. data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
  135. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
  136. data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
  137. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
  138. data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
  139. data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
  140. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
  141. data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
  142. data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
  143. data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
  144. data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
  145. data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
  146. data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
  147. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
  148. data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
  149. data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
  150. data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
  151. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
  152. data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
  153. data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
  154. data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
  155. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
  156. data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
  157. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
  158. data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
  159. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
  160. data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
  161. data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
  162. data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
  163. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
  164. data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
  165. data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
  166. data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
  167. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
  168. data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
  169. data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
  170. data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
  171. data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
  172. data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
  173. data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
  174. data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
  175. data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
  176. data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
  177. data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
  178. data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
  179. data/src/core/lib/backoff/backoff.cc +80 -0
  180. data/src/core/lib/backoff/backoff.h +83 -0
  181. data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
  182. data/src/core/lib/channel/channel_args.h +45 -37
  183. data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
  184. data/src/core/lib/channel/channel_stack.h +76 -75
  185. data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
  186. data/src/core/lib/channel/channel_stack_builder.h +45 -45
  187. data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
  188. data/src/core/lib/channel/connected_channel.h +12 -4
  189. data/src/core/lib/channel/context.h +2 -2
  190. data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
  191. data/src/core/lib/channel/handshaker.h +9 -1
  192. data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
  193. data/src/core/lib/channel/handshaker_factory.h +18 -10
  194. data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
  195. data/src/core/lib/channel/handshaker_registry.h +8 -0
  196. data/src/core/lib/compression/algorithm_metadata.h +8 -0
  197. data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
  198. data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
  199. data/src/core/lib/compression/message_compress.h +8 -0
  200. data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
  201. data/src/core/lib/compression/stream_compression.h +27 -19
  202. data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
  203. data/src/core/lib/compression/stream_compression_gzip.h +8 -0
  204. data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
  205. data/src/core/lib/compression/stream_compression_identity.h +8 -0
  206. data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
  207. data/src/core/lib/debug/stats.h +17 -9
  208. data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
  209. data/src/core/lib/debug/stats_data.h +58 -19
  210. data/src/core/lib/debug/trace.cc +142 -0
  211. data/src/core/lib/debug/trace.h +74 -14
  212. data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
  213. data/src/core/lib/http/format_request.h +12 -4
  214. data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
  215. data/src/core/lib/http/httpcli.h +41 -33
  216. data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
  217. data/src/core/lib/http/{parser.c → parser.cc} +42 -42
  218. data/src/core/lib/http/parser.h +28 -20
  219. data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
  220. data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
  221. data/src/core/lib/iomgr/call_combiner.h +9 -1
  222. data/src/core/lib/iomgr/closure.h +220 -62
  223. data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
  224. data/src/core/lib/iomgr/combiner.h +16 -8
  225. data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
  226. data/src/core/lib/iomgr/endpoint.h +47 -32
  227. data/src/core/lib/iomgr/endpoint_pair.h +12 -4
  228. data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
  229. data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
  230. data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
  231. data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
  232. data/src/core/lib/iomgr/error.h +32 -27
  233. data/src/core/lib/iomgr/error_internal.h +11 -2
  234. data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
  235. data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
  236. data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
  237. data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
  238. data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
  239. data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
  240. data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
  241. data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
  242. data/src/core/lib/iomgr/ev_posix.cc +288 -0
  243. data/src/core/lib/iomgr/ev_posix.h +75 -67
  244. data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
  245. data/src/core/lib/iomgr/exec_ctx.cc +177 -0
  246. data/src/core/lib/iomgr/exec_ctx.h +35 -13
  247. data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
  248. data/src/core/lib/iomgr/executor.h +12 -4
  249. data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
  250. data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
  251. data/src/core/lib/iomgr/gethostname.h +9 -1
  252. data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
  253. data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
  254. data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
  255. data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
  256. data/src/core/lib/iomgr/iocp_windows.h +17 -3
  257. data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
  258. data/src/core/lib/iomgr/iomgr.h +11 -3
  259. data/src/core/lib/iomgr/iomgr_internal.h +13 -5
  260. data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
  261. data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
  262. data/src/core/lib/iomgr/iomgr_uv.h +8 -0
  263. data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
  264. data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
  265. data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
  266. data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
  267. data/src/core/lib/iomgr/load_file.h +2 -2
  268. data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
  269. data/src/core/lib/iomgr/lockfree_event.h +30 -11
  270. data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
  271. data/src/core/lib/iomgr/network_status_tracker.h +2 -2
  272. data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
  273. data/src/core/lib/iomgr/polling_entity.h +21 -13
  274. data/src/core/lib/iomgr/pollset.h +17 -11
  275. data/src/core/lib/iomgr/pollset_set.h +23 -15
  276. data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
  277. data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
  278. data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
  279. data/src/core/lib/iomgr/pollset_uv.h +8 -0
  280. data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
  281. data/src/core/lib/iomgr/pollset_windows.h +17 -4
  282. data/src/core/lib/iomgr/port.h +10 -0
  283. data/src/core/lib/iomgr/resolve_address.h +18 -10
  284. data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
  285. data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
  286. data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
  287. data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
  288. data/src/core/lib/iomgr/resource_quota.h +45 -37
  289. data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
  290. data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
  291. data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
  292. data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
  293. data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
  294. data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
  295. data/src/core/lib/iomgr/socket_mutator.h +11 -11
  296. data/src/core/lib/iomgr/socket_utils.h +9 -1
  297. data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
  298. data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
  299. data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
  300. data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
  301. data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
  302. data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
  303. data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
  304. data/src/core/lib/iomgr/socket_windows.h +26 -13
  305. data/src/core/lib/iomgr/tcp_client.h +14 -6
  306. data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
  307. data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
  308. data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
  309. data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
  310. data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
  311. data/src/core/lib/iomgr/tcp_posix.h +15 -7
  312. data/src/core/lib/iomgr/tcp_server.h +31 -23
  313. data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
  314. data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
  315. data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
  316. data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
  317. data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
  318. data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
  319. data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
  320. data/src/core/lib/iomgr/tcp_uv.cc +420 -0
  321. data/src/core/lib/iomgr/tcp_uv.h +18 -4
  322. data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
  323. data/src/core/lib/iomgr/tcp_windows.h +17 -4
  324. data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
  325. data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
  326. data/src/core/lib/iomgr/timer.h +16 -9
  327. data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
  328. data/src/core/lib/iomgr/timer_generic.h +4 -4
  329. data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
  330. data/src/core/lib/iomgr/timer_heap.h +16 -8
  331. data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
  332. data/src/core/lib/iomgr/timer_manager.h +8 -0
  333. data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
  334. data/src/core/lib/iomgr/timer_uv.h +2 -2
  335. data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
  336. data/src/core/lib/iomgr/udp_server.h +25 -17
  337. data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
  338. data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
  339. data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
  340. data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
  341. data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
  342. data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
  343. data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
  344. data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
  345. data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
  346. data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
  347. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
  348. data/src/core/lib/json/{json.c → json.cc} +0 -0
  349. data/src/core/lib/json/json.h +8 -0
  350. data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
  351. data/src/core/lib/json/json_reader.h +26 -18
  352. data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
  353. data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
  354. data/src/core/lib/json/json_writer.h +23 -15
  355. data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
  356. data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
  357. data/src/core/lib/profiling/timers.h +6 -6
  358. data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
  359. data/src/core/lib/security/context/security_context.h +27 -29
  360. data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
  361. data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
  362. data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
  363. data/src/core/lib/security/credentials/credentials.h +83 -75
  364. data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
  365. data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
  366. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
  367. data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
  368. data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
  369. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
  370. data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
  371. data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
  372. data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
  373. data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
  374. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
  375. data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
  376. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
  377. data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
  378. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
  379. data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
  380. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
  381. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
  382. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
  383. data/src/core/lib/security/transport/auth_filters.h +16 -0
  384. data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
  385. data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
  386. data/src/core/lib/security/transport/lb_targets_info.h +11 -3
  387. data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
  388. data/src/core/lib/security/transport/secure_endpoint.h +13 -5
  389. data/src/core/lib/security/transport/security_connector.cc +1121 -0
  390. data/src/core/lib/security/transport/security_connector.h +97 -79
  391. data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
  392. data/src/core/lib/security/transport/security_handshaker.h +11 -3
  393. data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
  394. data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
  395. data/src/core/lib/security/transport/tsi_error.h +9 -1
  396. data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
  397. data/src/core/lib/security/util/json_util.h +12 -4
  398. data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
  399. data/src/core/lib/slice/b64.h +12 -4
  400. data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
  401. data/src/core/lib/slice/percent_encoding.h +11 -3
  402. data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
  403. data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
  404. data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
  405. data/src/core/lib/slice/slice_hash_table.h +19 -11
  406. data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
  407. data/src/core/lib/slice/slice_internal.h +17 -6
  408. data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
  409. data/src/core/lib/slice/slice_string_helpers.h +3 -3
  410. data/src/core/lib/support/abstract.h +29 -0
  411. data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
  412. data/src/core/lib/support/{arena.c → arena.cc} +12 -12
  413. data/src/core/lib/support/arena.h +11 -3
  414. data/src/core/lib/support/{atm.c → atm.cc} +1 -1
  415. data/src/core/lib/support/{avl.c → avl.cc} +71 -70
  416. data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
  417. data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
  418. data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
  419. data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
  420. data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
  421. data/src/core/lib/support/env.h +3 -3
  422. data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
  423. data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
  424. data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
  425. data/src/core/lib/support/{fork.c → fork.cc} +2 -2
  426. data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
  427. data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
  428. data/src/core/lib/support/{log.c → log.cc} +8 -8
  429. data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
  430. data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
  431. data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
  432. data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
  433. data/src/core/lib/support/manual_constructor.h +211 -0
  434. data/src/core/lib/support/memory.h +41 -0
  435. data/src/core/lib/support/mpscq.cc +114 -0
  436. data/src/core/lib/support/mpscq.h +45 -7
  437. data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
  438. data/src/core/lib/support/murmur_hash.h +9 -1
  439. data/src/core/lib/support/spinlock.h +8 -1
  440. data/src/core/lib/support/{string.c → string.cc} +56 -55
  441. data/src/core/lib/support/string.h +21 -21
  442. data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
  443. data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
  444. data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
  445. data/src/core/lib/support/string_windows.h +8 -0
  446. data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
  447. data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
  448. data/src/core/lib/support/{sync.c → sync.cc} +22 -22
  449. data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
  450. data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
  451. data/src/core/lib/support/{thd.c → thd.cc} +0 -0
  452. data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
  453. data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
  454. data/src/core/lib/support/{time.c → time.cc} +0 -0
  455. data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
  456. data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
  457. data/src/core/lib/support/time_precise.h +9 -1
  458. data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
  459. data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
  460. data/src/core/lib/support/tmpfile.h +1 -1
  461. data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
  462. data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
  463. data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
  464. data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
  465. data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
  466. data/src/core/lib/surface/alarm_internal.h +10 -2
  467. data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
  468. data/src/core/lib/surface/api_trace.h +2 -2
  469. data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
  470. data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
  471. data/src/core/lib/surface/{call.c → call.cc} +379 -372
  472. data/src/core/lib/surface/call.h +37 -38
  473. data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
  474. data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
  475. data/src/core/lib/surface/call_test_only.h +5 -5
  476. data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
  477. data/src/core/lib/surface/channel.h +29 -21
  478. data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
  479. data/src/core/lib/surface/channel_init.h +6 -6
  480. data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
  481. data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
  482. data/src/core/lib/surface/channel_stack_type.h +9 -1
  483. data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
  484. data/src/core/lib/surface/completion_queue.h +29 -29
  485. data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
  486. data/src/core/lib/surface/completion_queue_factory.h +8 -0
  487. data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
  488. data/src/core/lib/surface/event_string.h +9 -1
  489. data/src/core/lib/surface/{init.c → init.cc} +16 -39
  490. data/src/core/lib/surface/init.h +8 -0
  491. data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
  492. data/src/core/lib/surface/lame_client.cc +38 -40
  493. data/src/core/lib/surface/lame_client.h +8 -0
  494. data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
  495. data/src/core/lib/surface/{server.c → server.cc} +340 -404
  496. data/src/core/lib/surface/server.h +22 -14
  497. data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
  498. data/src/core/lib/surface/validate_metadata.h +10 -2
  499. data/src/core/lib/surface/{version.c → version.cc} +2 -2
  500. data/src/core/lib/transport/bdp_estimator.cc +84 -0
  501. data/src/core/lib/transport/bdp_estimator.h +67 -42
  502. data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
  503. data/src/core/lib/transport/byte_stream.h +41 -33
  504. data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
  505. data/src/core/lib/transport/connectivity_state.h +29 -21
  506. data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
  507. data/src/core/lib/transport/error_utils.h +18 -6
  508. data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
  509. data/src/core/lib/transport/metadata.h +22 -20
  510. data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
  511. data/src/core/lib/transport/metadata_batch.h +46 -45
  512. data/src/core/lib/transport/pid_controller.cc +48 -0
  513. data/src/core/lib/transport/pid_controller.h +84 -32
  514. data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
  515. data/src/core/lib/transport/service_config.h +11 -2
  516. data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
  517. data/src/core/lib/transport/static_metadata.h +30 -23
  518. data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
  519. data/src/core/lib/transport/status_conversion.h +12 -2
  520. data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
  521. data/src/core/lib/transport/timeout_encoding.h +11 -2
  522. data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
  523. data/src/core/lib/transport/transport.h +78 -80
  524. data/src/core/lib/transport/transport_impl.h +27 -19
  525. data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
  526. data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
  527. data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
  528. data/src/core/tsi/fake_transport_security.h +5 -5
  529. data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
  530. data/src/core/tsi/gts_transport_security.h +11 -3
  531. data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
  532. data/src/core/tsi/ssl_transport_security.h +25 -25
  533. data/src/core/tsi/ssl_types.h +8 -0
  534. data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
  535. data/src/core/tsi/transport_security.h +55 -55
  536. data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
  537. data/src/core/tsi/transport_security_adapter.h +2 -2
  538. data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
  539. data/src/core/tsi/transport_security_grpc.h +19 -19
  540. data/src/core/tsi/transport_security_interface.h +41 -41
  541. data/src/ruby/ext/grpc/extconf.rb +4 -2
  542. data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
  543. data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
  544. data/src/ruby/ext/grpc/rb_call.c +41 -42
  545. data/src/ruby/ext/grpc/rb_call.h +6 -6
  546. data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
  547. data/src/ruby/ext/grpc/rb_channel.c +87 -87
  548. data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
  549. data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
  550. data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
  551. data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
  552. data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
  553. data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
  554. data/src/ruby/ext/grpc/rb_grpc.c +8 -8
  555. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
  556. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
  557. data/src/ruby/ext/grpc/rb_server.c +23 -23
  558. data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
  559. data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
  560. data/src/ruby/lib/grpc/version.rb +1 -1
  561. data/src/ruby/pb/grpc/health/checker.rb +14 -0
  562. data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
  563. data/third_party/cares/config_freebsd/ares_config.h +502 -0
  564. data/third_party/cares/config_openbsd/ares_config.h +502 -0
  565. metadata +302 -328
  566. data/src/core/ext/census/aggregation.h +0 -51
  567. data/src/core/ext/census/base_resources.c +0 -56
  568. data/src/core/ext/census/base_resources.h +0 -24
  569. data/src/core/ext/census/census_interface.h +0 -61
  570. data/src/core/ext/census/census_rpc_stats.h +0 -86
  571. data/src/core/ext/census/context.c +0 -496
  572. data/src/core/ext/census/gen/census.pb.c +0 -161
  573. data/src/core/ext/census/gen/census.pb.h +0 -280
  574. data/src/core/ext/census/gen/trace_context.pb.c +0 -39
  575. data/src/core/ext/census/gen/trace_context.pb.h +0 -78
  576. data/src/core/ext/census/grpc_filter.c +0 -196
  577. data/src/core/ext/census/grpc_plugin.c +0 -70
  578. data/src/core/ext/census/initialize.c +0 -51
  579. data/src/core/ext/census/intrusive_hash_map.c +0 -305
  580. data/src/core/ext/census/intrusive_hash_map.h +0 -152
  581. data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
  582. data/src/core/ext/census/mlog.c +0 -586
  583. data/src/core/ext/census/mlog.h +0 -80
  584. data/src/core/ext/census/operation.c +0 -48
  585. data/src/core/ext/census/placeholders.c +0 -49
  586. data/src/core/ext/census/resource.c +0 -303
  587. data/src/core/ext/census/resource.h +0 -48
  588. data/src/core/ext/census/rpc_metric_id.h +0 -36
  589. data/src/core/ext/census/trace_context.c +0 -71
  590. data/src/core/ext/census/trace_context.h +0 -56
  591. data/src/core/ext/census/trace_label.h +0 -46
  592. data/src/core/ext/census/trace_propagation.h +0 -48
  593. data/src/core/ext/census/trace_status.h +0 -30
  594. data/src/core/ext/census/trace_string.h +0 -35
  595. data/src/core/ext/census/tracing.c +0 -55
  596. data/src/core/ext/census/tracing.h +0 -109
  597. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
  598. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
  599. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
  600. data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
  601. data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
  602. data/src/core/lib/debug/trace.c +0 -146
  603. data/src/core/lib/iomgr/closure.c +0 -219
  604. data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
  605. data/src/core/lib/iomgr/ev_posix.c +0 -266
  606. data/src/core/lib/iomgr/exec_ctx.c +0 -113
  607. data/src/core/lib/iomgr/tcp_uv.c +0 -381
  608. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
  609. data/src/core/lib/security/transport/security_connector.c +0 -914
  610. data/src/core/lib/support/backoff.c +0 -72
  611. data/src/core/lib/support/backoff.h +0 -56
  612. data/src/core/lib/support/mpscq.c +0 -79
  613. data/src/core/lib/support/stack_lockfree.c +0 -137
  614. data/src/core/lib/support/stack_lockfree.h +0 -38
  615. data/src/core/lib/transport/bdp_estimator.c +0 -110
  616. data/src/core/lib/transport/pid_controller.c +0 -63
@@ -1,51 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #include <stddef.h>
20
-
21
- #ifndef GRPC_CORE_EXT_CENSUS_AGGREGATION_H
22
- #define GRPC_CORE_EXT_CENSUS_AGGREGATION_H
23
-
24
- /** Structure used to describe an aggregation type. */
25
- struct census_aggregation_ops {
26
- /* Create a new aggregation. The pointer returned can be used in future calls
27
- to clone(), free(), record(), data() and reset(). */
28
- void *(*create)(const void *create_arg);
29
- /* Make a copy of an aggregation created by create() */
30
- void *(*clone)(const void *aggregation);
31
- /* Destroy an aggregation created by create() */
32
- void (*free)(void *aggregation);
33
- /* Record a new value against aggregation. */
34
- void (*record)(void *aggregation, double value);
35
- /* Return current aggregation data. The caller must cast this object into
36
- the correct type for the aggregation result. The object returned can be
37
- freed by using free_data(). */
38
- void *(*data)(const void *aggregation);
39
- /* free data returned by data() */
40
- void (*free_data)(void *data);
41
- /* Reset an aggregation to default (zero) values. */
42
- void (*reset)(void *aggregation);
43
- /* Merge 'from' aggregation into 'to'. Both aggregations must be compatible */
44
- void (*merge)(void *to, const void *from);
45
- /* Fill buffer with printable string version of aggregation contents. For
46
- debugging only. Returns the number of bytes added to buffer (a value == n
47
- implies the buffer was of insufficient size). */
48
- size_t (*print)(const void *aggregation, char *buffer, size_t n);
49
- };
50
-
51
- #endif /* GRPC_CORE_EXT_CENSUS_AGGREGATION_H */
@@ -1,56 +0,0 @@
1
- /*
2
- * Copyright 2016 gRPC authors.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- *
16
- */
17
-
18
- #include "src/core/ext/census/base_resources.h"
19
-
20
- #include <stdio.h>
21
- #include <string.h>
22
-
23
- #include <grpc/census.h>
24
- #include <grpc/support/log.h>
25
-
26
- #include "src/core/ext/census/resource.h"
27
-
28
- // Add base RPC resource definitions for use by RPC runtime.
29
- //
30
- // TODO(aveitch): All of these are currently hardwired definitions encoded in
31
- // the code in this file. These should be converted to use an external
32
- // configuration mechanism, in which these resources are defined in a text
33
- // file, which is compiled to .pb format and read by still-to-be-written
34
- // configuration functions.
35
-
36
- // Define all base resources. This should be called by census initialization.
37
- void define_base_resources() {
38
- google_census_Resource_BasicUnit numerator =
39
- google_census_Resource_BasicUnit_SECS;
40
- resource r = {(char *)"client_rpc_latency", // name
41
- (char *)"Client RPC latency in seconds", // description
42
- 0, // prefix
43
- 1, // n_numerators
44
- &numerator, // numerators
45
- 0, // n_denominators
46
- NULL}; // denominators
47
- define_resource(&r);
48
- r = (resource){(char *)"server_rpc_latency", // name
49
- (char *)"Server RPC latency in seconds", // description
50
- 0, // prefix
51
- 1, // n_numerators
52
- &numerator, // numerators
53
- 0, // n_denominators
54
- NULL}; // denominators
55
- define_resource(&r);
56
- }
@@ -1,24 +0,0 @@
1
- /*
2
- * Copyright 2016 gRPC authors.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- *
16
- */
17
-
18
- #ifndef GRPC_CORE_EXT_CENSUS_BASE_RESOURCES_H
19
- #define GRPC_CORE_EXT_CENSUS_BASE_RESOURCES_H
20
-
21
- /* Define all base resources. This should be called by census initialization. */
22
- void define_base_resources();
23
-
24
- #endif /* GRPC_CORE_EXT_CENSUS_BASE_RESOURCES_H */
@@ -1,61 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #ifndef GRPC_CORE_EXT_CENSUS_CENSUS_INTERFACE_H
20
- #define GRPC_CORE_EXT_CENSUS_CENSUS_INTERFACE_H
21
-
22
- #include <grpc/support/port_platform.h>
23
-
24
- /* Maximum length of an individual census trace annotation. */
25
- #define CENSUS_MAX_ANNOTATION_LENGTH 200
26
-
27
- /* Structure of a census op id. Define as structure because 64bit integer is not
28
- available on every platform for C89. */
29
- typedef struct census_op_id {
30
- uint32_t upper;
31
- uint32_t lower;
32
- } census_op_id;
33
-
34
- typedef struct census_rpc_stats census_rpc_stats;
35
-
36
- /* Initializes Census library. No-op if Census is already initialized. */
37
- void census_init(void);
38
-
39
- /* Shutdown Census Library. */
40
- void census_shutdown(void);
41
-
42
- /* Annotates grpc method name on a census_op_id. The method name has the format
43
- of <full quantified rpc service name>/<rpc function name>. Returns 0 iff
44
- op_id and method_name are all valid. op_id is valid after its creation and
45
- before calling census_tracing_end_op().
46
-
47
- TODO(hongyu): Figure out valid characters set for service name and command
48
- name and document requirements here.*/
49
- int census_add_method_tag(census_op_id op_id, const char *method_name);
50
-
51
- /* Annotates tracing information to a specific op_id.
52
- Up to CENSUS_MAX_ANNOTATION_LENGTH bytes are recorded. */
53
- void census_tracing_print(census_op_id op_id, const char *annotation);
54
-
55
- /* Starts tracing for an RPC. Returns a locally unique census_op_id */
56
- census_op_id census_tracing_start_op(void);
57
-
58
- /* Ends tracing. Calling this function will invalidate the input op_id. */
59
- void census_tracing_end_op(census_op_id op_id);
60
-
61
- #endif /* GRPC_CORE_EXT_CENSUS_CENSUS_INTERFACE_H */
@@ -1,86 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #ifndef GRPC_CORE_EXT_CENSUS_CENSUS_RPC_STATS_H
20
- #define GRPC_CORE_EXT_CENSUS_CENSUS_RPC_STATS_H
21
-
22
- #include <grpc/support/port_platform.h>
23
- #include "src/core/ext/census/census_interface.h"
24
-
25
- #ifdef __cplusplus
26
- extern "C" {
27
- #endif
28
-
29
- struct census_rpc_stats {
30
- uint64_t cnt;
31
- uint64_t rpc_error_cnt;
32
- uint64_t app_error_cnt;
33
- double elapsed_time_ms;
34
- double api_request_bytes;
35
- double wire_request_bytes;
36
- double api_response_bytes;
37
- double wire_response_bytes;
38
- };
39
-
40
- /* Creates an empty rpc stats object on heap. */
41
- census_rpc_stats *census_rpc_stats_create_empty(void);
42
-
43
- typedef struct census_per_method_rpc_stats {
44
- const char *method;
45
- census_rpc_stats minute_stats; /* cumulative stats in the past minute */
46
- census_rpc_stats hour_stats; /* cumulative stats in the past hour */
47
- census_rpc_stats total_stats; /* cumulative stats from last gc */
48
- } census_per_method_rpc_stats;
49
-
50
- typedef struct census_aggregated_rpc_stats {
51
- int num_entries;
52
- census_per_method_rpc_stats *stats;
53
- } census_aggregated_rpc_stats;
54
-
55
- /* Initializes an aggregated rpc stats object to an empty state. */
56
- void census_aggregated_rpc_stats_set_empty(census_aggregated_rpc_stats *data);
57
-
58
- /* Records client side stats of a rpc. */
59
- void census_record_rpc_client_stats(census_op_id op_id,
60
- const census_rpc_stats *stats);
61
-
62
- /* Records server side stats of a rpc. */
63
- void census_record_rpc_server_stats(census_op_id op_id,
64
- const census_rpc_stats *stats);
65
-
66
- /* The following two functions are intended for inprocess query of
67
- per-service per-method stats from grpc implementations. */
68
-
69
- /* Populates *data_map with server side aggregated per-service per-method
70
- stats.
71
- DO NOT CALL from outside of grpc code. */
72
- void census_get_server_stats(census_aggregated_rpc_stats *data_map);
73
-
74
- /* Populates *data_map with client side aggregated per-service per-method
75
- stats.
76
- DO NOT CALL from outside of grpc code. */
77
- void census_get_client_stats(census_aggregated_rpc_stats *data_map);
78
-
79
- void census_stats_store_init(void);
80
- void census_stats_store_shutdown(void);
81
-
82
- #ifdef __cplusplus
83
- }
84
- #endif
85
-
86
- #endif /* GRPC_CORE_EXT_CENSUS_CENSUS_RPC_STATS_H */
@@ -1,496 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
18
-
19
- #include <grpc/census.h>
20
- #include <grpc/support/alloc.h>
21
- #include <grpc/support/log.h>
22
- #include <grpc/support/port_platform.h>
23
- #include <grpc/support/useful.h>
24
- #include <stdbool.h>
25
- #include <string.h>
26
- #include "src/core/lib/support/string.h"
27
-
28
- // Functions in this file support the public context API, including
29
- // encoding/decoding as part of context propagation across RPC's. The overall
30
- // requirements (in approximate priority order) for the
31
- // context representation:
32
- // 1. Efficient conversion to/from wire format
33
- // 2. Minimal bytes used on-wire
34
- // 3. Efficient context creation
35
- // 4. Efficient lookup of tag value for a key
36
- // 5. Efficient iteration over tags
37
- // 6. Minimal memory footprint
38
- //
39
- // Notes on tradeoffs/decisions:
40
- // * tag includes 1 byte length of key, as well as nil-terminating byte. These
41
- // are to aid in efficient parsing and the ability to directly return key
42
- // strings. This is more important than saving a single byte/tag on the wire.
43
- // * The wire encoding uses only single byte values. This eliminates the need
44
- // to handle endian-ness conversions. It also means there is a hard upper
45
- // limit of 255 for both CENSUS_MAX_TAG_KV_LEN and CENSUS_MAX_PROPAGATED_TAGS.
46
- // * Keep all tag information (keys/values/flags) in a single memory buffer,
47
- // that can be directly copied to the wire.
48
-
49
- // min and max valid chars in tag keys and values. All printable ASCII is OK.
50
- #define MIN_VALID_TAG_CHAR 32 // ' '
51
- #define MAX_VALID_TAG_CHAR 126 // '~'
52
-
53
- // Structure representing a set of tags. Essentially a count of number of tags
54
- // present, and pointer to a chunk of memory that contains the per-tag details.
55
- struct tag_set {
56
- int ntags; // number of tags.
57
- int ntags_alloc; // ntags + number of deleted tags (total number of tags
58
- // in all of kvm). This will always be == ntags, except during the process
59
- // of building a new tag set.
60
- size_t kvm_size; // number of bytes allocated for key/value storage.
61
- size_t kvm_used; // number of bytes of used key/value memory
62
- char *kvm; // key/value memory. Consists of repeated entries of:
63
- // Offset Size Description
64
- // 0 1 Key length, including trailing 0. (K)
65
- // 1 1 Value length, including trailing 0 (V)
66
- // 2 1 Flags
67
- // 3 K Key bytes
68
- // 3 + K V Value bytes
69
- //
70
- // We refer to the first 3 entries as the 'tag header'. If extra values are
71
- // introduced in the header, you will need to modify the TAG_HEADER_SIZE
72
- // constant, the raw_tag structure (and everything that uses it) and the
73
- // encode/decode functions appropriately.
74
- };
75
-
76
- // Number of bytes in tag header.
77
- #define TAG_HEADER_SIZE 3 // key length (1) + value length (1) + flags (1)
78
- // Offsets to tag header entries.
79
- #define KEY_LEN_OFFSET 0
80
- #define VALUE_LEN_OFFSET 1
81
- #define FLAG_OFFSET 2
82
-
83
- // raw_tag represents the raw-storage form of a tag in the kvm of a tag_set.
84
- struct raw_tag {
85
- uint8_t key_len;
86
- uint8_t value_len;
87
- uint8_t flags;
88
- char *key;
89
- char *value;
90
- };
91
-
92
- // Use a reserved flag bit for indication of deleted tag.
93
- #define CENSUS_TAG_DELETED CENSUS_TAG_RESERVED
94
- #define CENSUS_TAG_IS_DELETED(flags) (flags & CENSUS_TAG_DELETED)
95
-
96
- // Primary representation of a context. Composed of 2 underlying tag_set
97
- // structs, one each for propagated and local (non-propagated) tags. This is
98
- // to efficiently support tag encoding/decoding.
99
- // TODO(aveitch): need to add tracing id's/structure.
100
- struct census_context {
101
- struct tag_set tags[2];
102
- census_context_status status;
103
- };
104
-
105
- // Indices into the tags member of census_context
106
- #define PROPAGATED_TAGS 0
107
- #define LOCAL_TAGS 1
108
-
109
- // Validate (check all characters are in range and size is less than limit) a
110
- // key or value string. Returns 0 if the string is invalid, or the length
111
- // (including terminator) if valid.
112
- static size_t validate_tag(const char *kv) {
113
- size_t len = 1;
114
- char ch;
115
- while ((ch = *kv++) != 0) {
116
- if (ch < MIN_VALID_TAG_CHAR || ch > MAX_VALID_TAG_CHAR) {
117
- return 0;
118
- }
119
- len++;
120
- }
121
- if (len > CENSUS_MAX_TAG_KV_LEN) {
122
- return 0;
123
- }
124
- return len;
125
- }
126
-
127
- // Extract a raw tag given a pointer (raw) to the tag header. Allow for some
128
- // extra bytes in the tag header (see encode/decode functions for usage: this
129
- // allows for future expansion of the tag header).
130
- static char *decode_tag(struct raw_tag *tag, char *header, int offset) {
131
- tag->key_len = (uint8_t)(*header++);
132
- tag->value_len = (uint8_t)(*header++);
133
- tag->flags = (uint8_t)(*header++);
134
- header += offset;
135
- tag->key = header;
136
- header += tag->key_len;
137
- tag->value = header;
138
- return header + tag->value_len;
139
- }
140
-
141
- // Make a copy (in 'to') of an existing tag_set.
142
- static void tag_set_copy(struct tag_set *to, const struct tag_set *from) {
143
- memcpy(to, from, sizeof(struct tag_set));
144
- to->kvm = (char *)gpr_malloc(to->kvm_size);
145
- memcpy(to->kvm, from->kvm, from->kvm_used);
146
- }
147
-
148
- // Delete a tag from a tag_set, if it exists (returns true if it did).
149
- static bool tag_set_delete_tag(struct tag_set *tags, const char *key,
150
- size_t key_len) {
151
- char *kvp = tags->kvm;
152
- for (int i = 0; i < tags->ntags_alloc; i++) {
153
- uint8_t *flags = (uint8_t *)(kvp + FLAG_OFFSET);
154
- struct raw_tag tag;
155
- kvp = decode_tag(&tag, kvp, 0);
156
- if (CENSUS_TAG_IS_DELETED(tag.flags)) continue;
157
- if ((key_len == tag.key_len) && (memcmp(key, tag.key, key_len) == 0)) {
158
- *flags |= CENSUS_TAG_DELETED;
159
- tags->ntags--;
160
- return true;
161
- }
162
- }
163
- return false;
164
- }
165
-
166
- // Delete a tag from a context, return true if it existed.
167
- static bool context_delete_tag(census_context *context, const census_tag *tag,
168
- size_t key_len) {
169
- return (
170
- tag_set_delete_tag(&context->tags[LOCAL_TAGS], tag->key, key_len) ||
171
- tag_set_delete_tag(&context->tags[PROPAGATED_TAGS], tag->key, key_len));
172
- }
173
-
174
- // Add a tag to a tag_set. Return true on success, false if the tag could
175
- // not be added because of constraints on tag set size. This function should
176
- // not be called if the tag may already exist (in a non-deleted state) in
177
- // the tag_set, as that would result in two tags with the same key.
178
- static bool tag_set_add_tag(struct tag_set *tags, const census_tag *tag,
179
- size_t key_len, size_t value_len) {
180
- if (tags->ntags == CENSUS_MAX_PROPAGATED_TAGS) {
181
- return false;
182
- }
183
- const size_t tag_size = key_len + value_len + TAG_HEADER_SIZE;
184
- if (tags->kvm_used + tag_size > tags->kvm_size) {
185
- // allocate new memory if needed
186
- tags->kvm_size += 2 * CENSUS_MAX_TAG_KV_LEN + TAG_HEADER_SIZE;
187
- char *new_kvm = (char *)gpr_malloc(tags->kvm_size);
188
- if (tags->kvm_used > 0) memcpy(new_kvm, tags->kvm, tags->kvm_used);
189
- gpr_free(tags->kvm);
190
- tags->kvm = new_kvm;
191
- }
192
- char *kvp = tags->kvm + tags->kvm_used;
193
- *kvp++ = (char)key_len;
194
- *kvp++ = (char)value_len;
195
- // ensure reserved flags are not used.
196
- *kvp++ = (char)(tag->flags & (CENSUS_TAG_PROPAGATE | CENSUS_TAG_STATS));
197
- memcpy(kvp, tag->key, key_len);
198
- kvp += key_len;
199
- memcpy(kvp, tag->value, value_len);
200
- tags->kvm_used += tag_size;
201
- tags->ntags++;
202
- tags->ntags_alloc++;
203
- return true;
204
- }
205
-
206
- // Add/modify/delete a tag to/in a context. Caller must validate that tag key
207
- // etc. are valid.
208
- static void context_modify_tag(census_context *context, const census_tag *tag,
209
- size_t key_len, size_t value_len) {
210
- // First delete the tag if it is already present.
211
- bool deleted = context_delete_tag(context, tag, key_len);
212
- bool added = false;
213
- if (CENSUS_TAG_IS_PROPAGATED(tag->flags)) {
214
- added = tag_set_add_tag(&context->tags[PROPAGATED_TAGS], tag, key_len,
215
- value_len);
216
- } else {
217
- added =
218
- tag_set_add_tag(&context->tags[LOCAL_TAGS], tag, key_len, value_len);
219
- }
220
-
221
- if (deleted) {
222
- context->status.n_modified_tags++;
223
- } else {
224
- if (added) {
225
- context->status.n_added_tags++;
226
- } else {
227
- context->status.n_ignored_tags++;
228
- }
229
- }
230
- }
231
-
232
- // Remove memory used for deleted tags from a tag set. Basic algorithm:
233
- // 1) Walk through tag set to find first deleted tag. Record where it is.
234
- // 2) Find the next not-deleted tag. Copy all of kvm from there to the end
235
- // "over" the deleted tags
236
- // 3) repeat #1 and #2 until we have seen all tags
237
- // 4) if we are still looking for a not-deleted tag, then all the end portion
238
- // of the kvm is deleted. Just reduce the used amount of memory by the
239
- // appropriate amount.
240
- static void tag_set_flatten(struct tag_set *tags) {
241
- if (tags->ntags == tags->ntags_alloc) return;
242
- bool found_deleted = false; // found a deleted tag.
243
- char *kvp = tags->kvm;
244
- char *dbase = NULL; // record location of deleted tag
245
- for (int i = 0; i < tags->ntags_alloc; i++) {
246
- struct raw_tag tag;
247
- char *next_kvp = decode_tag(&tag, kvp, 0);
248
- if (found_deleted) {
249
- if (!CENSUS_TAG_IS_DELETED(tag.flags)) {
250
- ptrdiff_t reduce = kvp - dbase; // #bytes in deleted tags
251
- GPR_ASSERT(reduce > 0);
252
- ptrdiff_t copy_size = tags->kvm + tags->kvm_used - kvp;
253
- GPR_ASSERT(copy_size > 0);
254
- memmove(dbase, kvp, (size_t)copy_size);
255
- tags->kvm_used -= (size_t)reduce;
256
- next_kvp -= reduce;
257
- found_deleted = false;
258
- }
259
- } else {
260
- if (CENSUS_TAG_IS_DELETED(tag.flags)) {
261
- dbase = kvp;
262
- found_deleted = true;
263
- }
264
- }
265
- kvp = next_kvp;
266
- }
267
- if (found_deleted) {
268
- GPR_ASSERT(dbase > tags->kvm);
269
- tags->kvm_used = (size_t)(dbase - tags->kvm);
270
- }
271
- tags->ntags_alloc = tags->ntags;
272
- }
273
-
274
- census_context *census_context_create(const census_context *base,
275
- const census_tag *tags, int ntags,
276
- census_context_status const **status) {
277
- census_context *context =
278
- (census_context *)gpr_malloc(sizeof(census_context));
279
- // If we are given a base, copy it into our new tag set. Otherwise set it
280
- // to zero/NULL everything.
281
- if (base == NULL) {
282
- memset(context, 0, sizeof(census_context));
283
- } else {
284
- tag_set_copy(&context->tags[PROPAGATED_TAGS], &base->tags[PROPAGATED_TAGS]);
285
- tag_set_copy(&context->tags[LOCAL_TAGS], &base->tags[LOCAL_TAGS]);
286
- memset(&context->status, 0, sizeof(context->status));
287
- }
288
- // Walk over the additional tags and, for those that aren't invalid, modify
289
- // the context to add/replace/delete as required.
290
- for (int i = 0; i < ntags; i++) {
291
- const census_tag *tag = &tags[i];
292
- size_t key_len = validate_tag(tag->key);
293
- // ignore the tag if it is invalid or too short.
294
- if (key_len <= 1) {
295
- context->status.n_invalid_tags++;
296
- } else {
297
- if (tag->value != NULL) {
298
- size_t value_len = validate_tag(tag->value);
299
- if (value_len != 0) {
300
- context_modify_tag(context, tag, key_len, value_len);
301
- } else {
302
- context->status.n_invalid_tags++;
303
- }
304
- } else {
305
- if (context_delete_tag(context, tag, key_len)) {
306
- context->status.n_deleted_tags++;
307
- }
308
- }
309
- }
310
- }
311
- // Remove any deleted tags, update status if needed, and return.
312
- tag_set_flatten(&context->tags[PROPAGATED_TAGS]);
313
- tag_set_flatten(&context->tags[LOCAL_TAGS]);
314
- context->status.n_propagated_tags = context->tags[PROPAGATED_TAGS].ntags;
315
- context->status.n_local_tags = context->tags[LOCAL_TAGS].ntags;
316
- if (status) {
317
- *status = &context->status;
318
- }
319
- return context;
320
- }
321
-
322
- const census_context_status *census_context_get_status(
323
- const census_context *context) {
324
- return &context->status;
325
- }
326
-
327
- void census_context_destroy(census_context *context) {
328
- gpr_free(context->tags[PROPAGATED_TAGS].kvm);
329
- gpr_free(context->tags[LOCAL_TAGS].kvm);
330
- gpr_free(context);
331
- }
332
-
333
- void census_context_initialize_iterator(const census_context *context,
334
- census_context_iterator *iterator) {
335
- iterator->context = context;
336
- iterator->index = 0;
337
- if (context->tags[PROPAGATED_TAGS].ntags != 0) {
338
- iterator->base = PROPAGATED_TAGS;
339
- iterator->kvm = context->tags[PROPAGATED_TAGS].kvm;
340
- } else if (context->tags[LOCAL_TAGS].ntags != 0) {
341
- iterator->base = LOCAL_TAGS;
342
- iterator->kvm = context->tags[LOCAL_TAGS].kvm;
343
- } else {
344
- iterator->base = -1;
345
- }
346
- }
347
-
348
- int census_context_next_tag(census_context_iterator *iterator,
349
- census_tag *tag) {
350
- if (iterator->base < 0) {
351
- return 0;
352
- }
353
- struct raw_tag raw;
354
- iterator->kvm = decode_tag(&raw, iterator->kvm, 0);
355
- tag->key = raw.key;
356
- tag->value = raw.value;
357
- tag->flags = raw.flags;
358
- if (++iterator->index == iterator->context->tags[iterator->base].ntags) {
359
- do {
360
- if (iterator->base == LOCAL_TAGS) {
361
- iterator->base = -1;
362
- return 1;
363
- }
364
- } while (iterator->context->tags[++iterator->base].ntags == 0);
365
- iterator->index = 0;
366
- iterator->kvm = iterator->context->tags[iterator->base].kvm;
367
- }
368
- return 1;
369
- }
370
-
371
- // Find a tag in a tag_set by key. Return true if found, false otherwise.
372
- static bool tag_set_get_tag(const struct tag_set *tags, const char *key,
373
- size_t key_len, census_tag *tag) {
374
- char *kvp = tags->kvm;
375
- for (int i = 0; i < tags->ntags; i++) {
376
- struct raw_tag raw;
377
- kvp = decode_tag(&raw, kvp, 0);
378
- if (key_len == raw.key_len && memcmp(raw.key, key, key_len) == 0) {
379
- tag->key = raw.key;
380
- tag->value = raw.value;
381
- tag->flags = raw.flags;
382
- return true;
383
- }
384
- }
385
- return false;
386
- }
387
-
388
- int census_context_get_tag(const census_context *context, const char *key,
389
- census_tag *tag) {
390
- size_t key_len = strlen(key) + 1;
391
- if (key_len == 1) {
392
- return 0;
393
- }
394
- if (tag_set_get_tag(&context->tags[PROPAGATED_TAGS], key, key_len, tag) ||
395
- tag_set_get_tag(&context->tags[LOCAL_TAGS], key, key_len, tag)) {
396
- return 1;
397
- }
398
- return 0;
399
- }
400
-
401
- // Context encoding and decoding functions.
402
- //
403
- // Wire format for tag_set's on the wire:
404
- //
405
- // First, a tag set header:
406
- //
407
- // offset bytes description
408
- // 0 1 version number
409
- // 1 1 number of bytes in this header. This allows for future
410
- // expansion.
411
- // 2 1 number of bytes in each tag header.
412
- // 3 1 ntags value from tag set.
413
- //
414
- // This is followed by the key/value memory from struct tag_set.
415
-
416
- #define ENCODED_VERSION 0 // Version number
417
- #define ENCODED_HEADER_SIZE 4 // size of tag set header
418
-
419
- // Encode a tag set. Returns 0 if buffer is too small.
420
- static size_t tag_set_encode(const struct tag_set *tags, char *buffer,
421
- size_t buf_size) {
422
- if (buf_size < ENCODED_HEADER_SIZE + tags->kvm_used) {
423
- return 0;
424
- }
425
- buf_size -= ENCODED_HEADER_SIZE;
426
- *buffer++ = (char)ENCODED_VERSION;
427
- *buffer++ = (char)ENCODED_HEADER_SIZE;
428
- *buffer++ = (char)TAG_HEADER_SIZE;
429
- *buffer++ = (char)tags->ntags;
430
- if (tags->ntags == 0) {
431
- return ENCODED_HEADER_SIZE;
432
- }
433
- memcpy(buffer, tags->kvm, tags->kvm_used);
434
- return ENCODED_HEADER_SIZE + tags->kvm_used;
435
- }
436
-
437
- size_t census_context_encode(const census_context *context, char *buffer,
438
- size_t buf_size) {
439
- return tag_set_encode(&context->tags[PROPAGATED_TAGS], buffer, buf_size);
440
- }
441
-
442
- // Decode a tag set.
443
- static void tag_set_decode(struct tag_set *tags, const char *buffer,
444
- size_t size) {
445
- uint8_t version = (uint8_t)(*buffer++);
446
- uint8_t header_size = (uint8_t)(*buffer++);
447
- uint8_t tag_header_size = (uint8_t)(*buffer++);
448
- tags->ntags = tags->ntags_alloc = (int)(*buffer++);
449
- if (tags->ntags == 0) {
450
- tags->ntags_alloc = 0;
451
- tags->kvm_size = 0;
452
- tags->kvm_used = 0;
453
- tags->kvm = NULL;
454
- return;
455
- }
456
- if (header_size != ENCODED_HEADER_SIZE) {
457
- GPR_ASSERT(version != ENCODED_VERSION);
458
- GPR_ASSERT(ENCODED_HEADER_SIZE < header_size);
459
- buffer += (header_size - ENCODED_HEADER_SIZE);
460
- }
461
- tags->kvm_used = size - header_size;
462
- tags->kvm_size = tags->kvm_used + CENSUS_MAX_TAG_KV_LEN;
463
- tags->kvm = (char *)gpr_malloc(tags->kvm_size);
464
- if (tag_header_size != TAG_HEADER_SIZE) {
465
- // something new in the tag information. I don't understand it, so
466
- // don't copy it over.
467
- GPR_ASSERT(version != ENCODED_VERSION);
468
- GPR_ASSERT(tag_header_size > TAG_HEADER_SIZE);
469
- char *kvp = tags->kvm;
470
- for (int i = 0; i < tags->ntags; i++) {
471
- memcpy(kvp, buffer, TAG_HEADER_SIZE);
472
- kvp += header_size;
473
- struct raw_tag raw;
474
- buffer =
475
- decode_tag(&raw, (char *)buffer, tag_header_size - TAG_HEADER_SIZE);
476
- memcpy(kvp, raw.key, (size_t)raw.key_len + raw.value_len);
477
- kvp += raw.key_len + raw.value_len;
478
- }
479
- } else {
480
- memcpy(tags->kvm, buffer, tags->kvm_used);
481
- }
482
- }
483
-
484
- census_context *census_context_decode(const char *buffer, size_t size) {
485
- census_context *context =
486
- (census_context *)gpr_malloc(sizeof(census_context));
487
- memset(&context->tags[LOCAL_TAGS], 0, sizeof(struct tag_set));
488
- if (buffer == NULL) {
489
- memset(&context->tags[PROPAGATED_TAGS], 0, sizeof(struct tag_set));
490
- } else {
491
- tag_set_decode(&context->tags[PROPAGATED_TAGS], buffer, size);
492
- }
493
- memset(&context->status, 0, sizeof(context->status));
494
- context->status.n_propagated_tags = context->tags[PROPAGATED_TAGS].ntags;
495
- return context;
496
- }