grpc 0.13.1 → 0.14.1.pre1

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 (724) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -828
  3. data/include/grpc/byte_buffer.h +1 -1
  4. data/include/grpc/byte_buffer_reader.h +1 -20
  5. data/include/grpc/census.h +4 -4
  6. data/include/grpc/compression.h +6 -5
  7. data/include/grpc/grpc.h +31 -20
  8. data/include/grpc/grpc_security.h +17 -31
  9. data/include/grpc/grpc_security_constants.h +114 -0
  10. data/include/grpc/grpc_zookeeper.h +1 -1
  11. data/include/grpc/impl/codegen/alloc.h +1 -1
  12. data/include/grpc/impl/codegen/atm.h +1 -1
  13. data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
  14. data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
  15. data/include/grpc/impl/codegen/atm_win32.h +1 -1
  16. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  17. data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
  18. data/include/grpc/impl/codegen/grpc_types.h +20 -3
  19. data/include/grpc/impl/codegen/log.h +9 -2
  20. data/include/grpc/impl/codegen/port_platform.h +102 -17
  21. data/include/grpc/impl/codegen/propagation_bits.h +3 -3
  22. data/include/grpc/impl/codegen/slice.h +3 -3
  23. data/include/grpc/impl/codegen/slice_buffer.h +3 -3
  24. data/include/grpc/impl/codegen/status.h +1 -1
  25. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  26. data/include/grpc/impl/codegen/sync_posix.h +1 -1
  27. data/include/grpc/impl/codegen/sync_win32.h +1 -1
  28. data/include/grpc/impl/codegen/time.h +3 -3
  29. data/include/grpc/status.h +1 -1
  30. data/include/grpc/support/alloc.h +1 -1
  31. data/include/grpc/support/atm.h +1 -1
  32. data/include/grpc/support/atm_gcc_atomic.h +4 -4
  33. data/include/grpc/support/atm_gcc_sync.h +1 -1
  34. data/include/grpc/support/atm_win32.h +1 -1
  35. data/include/grpc/support/avl.h +1 -1
  36. data/include/grpc/support/cmdline.h +1 -1
  37. data/include/grpc/support/cpu.h +1 -1
  38. data/include/grpc/support/histogram.h +1 -1
  39. data/include/grpc/support/host_port.h +1 -1
  40. data/include/grpc/support/log.h +1 -1
  41. data/include/grpc/support/log_win32.h +1 -1
  42. data/include/grpc/support/port_platform.h +1 -1
  43. data/include/grpc/support/slice.h +1 -1
  44. data/include/grpc/support/slice_buffer.h +1 -1
  45. data/include/grpc/support/string_util.h +3 -1
  46. data/include/grpc/support/subprocess.h +2 -2
  47. data/include/grpc/support/sync.h +1 -1
  48. data/include/grpc/support/sync_generic.h +1 -1
  49. data/include/grpc/support/sync_posix.h +1 -1
  50. data/include/grpc/support/sync_win32.h +1 -1
  51. data/include/grpc/support/thd.h +1 -1
  52. data/include/grpc/support/time.h +1 -1
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +45 -1
  55. data/include/grpc/support/tls_msvc.h +3 -3
  56. data/include/grpc/support/tls_pthread.h +1 -1
  57. data/include/grpc/support/useful.h +1 -1
  58. data/src/boringssl/err_data.c +258 -252
  59. data/src/core/{census → ext/census}/aggregation.h +3 -3
  60. data/src/core/{statistics → ext/census}/census_interface.h +3 -3
  61. data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
  62. data/src/core/{census → ext/census}/context.c +2 -2
  63. data/src/core/{census → ext/census}/grpc_context.c +2 -2
  64. data/src/core/{census → ext/census}/grpc_filter.c +30 -16
  65. data/src/core/{census → ext/census}/grpc_filter.h +4 -4
  66. data/src/core/ext/census/grpc_plugin.c +82 -0
  67. data/src/core/{census → ext/census}/initialize.c +1 -1
  68. data/src/core/{census → ext/census}/mlog.c +2 -2
  69. data/src/core/{census → ext/census}/mlog.h +4 -4
  70. data/src/core/{census → ext/census}/operation.c +0 -0
  71. data/src/core/{census → ext/census}/placeholders.c +0 -0
  72. data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
  73. data/src/core/{census → ext/census}/tracing.c +0 -0
  74. data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
  75. data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
  76. data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
  77. data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
  78. data/src/core/ext/client_config/client_channel_factory.h +85 -0
  79. data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
  80. data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
  81. data/src/core/ext/client_config/client_config_plugin.c +95 -0
  82. data/src/core/{client_config → ext/client_config}/connector.c +2 -2
  83. data/src/core/{client_config → ext/client_config}/connector.h +7 -10
  84. data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
  85. data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
  86. data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
  87. data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
  88. data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
  89. data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
  90. data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
  91. data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
  92. data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
  93. data/src/core/ext/client_config/parse_address.c +137 -0
  94. data/src/core/ext/client_config/parse_address.h +56 -0
  95. data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
  96. data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
  97. data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
  98. data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
  99. data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
  100. data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
  101. data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
  102. data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
  103. data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
  104. data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
  105. data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
  106. data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
  107. data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
  108. data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
  109. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
  110. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
  111. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
  112. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
  113. data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
  114. data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
  115. data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
  116. data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
  117. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
  118. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
  119. data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
  120. data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
  121. data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
  122. data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
  123. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
  124. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
  125. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
  126. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
  127. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
  128. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
  129. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
  130. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
  131. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
  132. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
  133. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
  134. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
  135. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
  136. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
  137. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
  138. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
  139. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
  140. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
  141. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
  142. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
  143. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
  144. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
  145. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
  146. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
  147. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
  148. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  149. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
  150. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
  151. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
  152. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
  153. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
  154. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
  155. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
  156. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
  157. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
  158. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
  159. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
  160. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
  161. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
  162. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
  163. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
  164. data/src/core/{channel → lib/channel}/channel_args.c +3 -15
  165. data/src/core/{channel → lib/channel}/channel_args.h +11 -15
  166. data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
  167. data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
  168. data/src/core/lib/channel/channel_stack_builder.c +277 -0
  169. data/src/core/lib/channel/channel_stack_builder.h +161 -0
  170. data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
  171. data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
  172. data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
  173. data/src/core/lib/channel/connected_channel.h +42 -0
  174. data/src/core/{channel → lib/channel}/context.h +3 -3
  175. data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
  176. data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
  177. data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
  178. data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
  179. data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
  180. data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
  181. data/src/core/{compression → lib/compression}/message_compress.c +1 -1
  182. data/src/core/{compression → lib/compression}/message_compress.h +3 -3
  183. data/src/core/{debug → lib/debug}/trace.c +2 -2
  184. data/src/core/{debug → lib/debug}/trace.h +3 -3
  185. data/src/core/{httpcli → lib/http}/format_request.c +8 -8
  186. data/src/core/{httpcli → lib/http}/format_request.h +4 -4
  187. data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
  188. data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
  189. data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
  190. data/src/core/lib/http/parser.c +341 -0
  191. data/src/core/lib/http/parser.h +119 -0
  192. data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
  193. data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
  194. data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
  195. data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
  196. data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
  197. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
  198. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
  199. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
  200. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
  201. data/src/core/lib/iomgr/ev_posix.c +164 -0
  202. data/src/core/lib/iomgr/ev_posix.h +158 -0
  203. data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
  204. data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
  205. data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
  206. data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
  207. data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
  208. data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
  209. data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
  210. data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
  211. data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
  212. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
  213. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
  214. data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
  215. data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
  216. data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
  217. data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
  218. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  219. data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
  220. data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
  221. data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
  222. data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
  223. data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
  224. data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
  225. data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
  226. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
  227. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
  228. data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
  229. data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
  230. data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
  231. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
  232. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
  233. data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
  234. data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
  235. data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
  236. data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
  237. data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
  238. data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
  239. data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
  240. data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
  241. data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
  242. data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
  243. data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
  244. data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
  245. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
  246. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
  247. data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
  248. data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
  249. data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
  250. data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
  251. data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
  252. data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
  254. data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
  256. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
  257. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
  258. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
  259. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
  260. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
  261. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
  262. data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
  263. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
  264. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
  265. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
  266. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
  267. data/src/core/{json → lib/json}/json.c +1 -1
  268. data/src/core/{json → lib/json}/json.h +4 -4
  269. data/src/core/{json → lib/json}/json_common.h +3 -3
  270. data/src/core/{json → lib/json}/json_reader.c +16 -4
  271. data/src/core/{json → lib/json}/json_reader.h +4 -4
  272. data/src/core/{json → lib/json}/json_string.c +4 -4
  273. data/src/core/{json → lib/json}/json_writer.c +1 -1
  274. data/src/core/{json → lib/json}/json_writer.h +4 -4
  275. data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
  276. data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
  277. data/src/core/{profiling → lib/profiling}/timers.h +3 -3
  278. data/src/core/{security → lib/security}/auth_filters.h +4 -4
  279. data/src/core/{security → lib/security}/b64.c +2 -2
  280. data/src/core/{security → lib/security}/b64.h +4 -4
  281. data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
  282. data/src/core/{security → lib/security}/credentials.c +42 -26
  283. data/src/core/{security → lib/security}/credentials.h +11 -10
  284. data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
  285. data/src/core/{security → lib/security}/credentials_posix.c +3 -3
  286. data/src/core/{security → lib/security}/credentials_win32.c +3 -3
  287. data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
  288. data/src/core/{security → lib/security}/handshake.c +4 -4
  289. data/src/core/{security → lib/security}/handshake.h +6 -6
  290. data/src/core/{security → lib/security}/json_token.c +4 -4
  291. data/src/core/{security → lib/security}/json_token.h +4 -4
  292. data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
  293. data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
  294. data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
  295. data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
  296. data/src/core/{security → lib/security}/security_connector.c +53 -21
  297. data/src/core/{security → lib/security}/security_connector.h +8 -8
  298. data/src/core/{security → lib/security}/security_context.c +5 -5
  299. data/src/core/{security → lib/security}/security_context.h +5 -5
  300. data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
  301. data/src/core/{support → lib/support}/alloc.c +5 -3
  302. data/src/core/{support → lib/support}/avl.c +1 -1
  303. data/src/core/lib/support/backoff.c +76 -0
  304. data/src/core/lib/support/backoff.h +68 -0
  305. data/src/core/{support → lib/support}/block_annotate.h +3 -3
  306. data/src/core/{support → lib/support}/cmdline.c +1 -1
  307. data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
  308. data/src/core/{support → lib/support}/cpu_linux.c +2 -2
  309. data/src/core/{support → lib/support}/cpu_posix.c +2 -2
  310. data/src/core/{support → lib/support}/cpu_windows.c +0 -0
  311. data/src/core/{support → lib/support}/env.h +3 -3
  312. data/src/core/{support → lib/support}/env_linux.c +3 -3
  313. data/src/core/{support → lib/support}/env_posix.c +2 -2
  314. data/src/core/{support → lib/support}/env_win32.c +27 -21
  315. data/src/core/{support → lib/support}/histogram.c +1 -1
  316. data/src/core/{support → lib/support}/host_port.c +1 -1
  317. data/src/core/{support → lib/support}/load_file.c +4 -4
  318. data/src/core/{support → lib/support}/load_file.h +4 -4
  319. data/src/core/{support → lib/support}/log.c +33 -0
  320. data/src/core/{support → lib/support}/log_android.c +2 -2
  321. data/src/core/{support → lib/support}/log_linux.c +6 -5
  322. data/src/core/{support → lib/support}/log_posix.c +3 -3
  323. data/src/core/{support → lib/support}/log_win32.c +8 -22
  324. data/src/core/{support → lib/support}/murmur_hash.c +1 -1
  325. data/src/core/{support → lib/support}/murmur_hash.h +3 -3
  326. data/src/core/{support → lib/support}/slice.c +0 -0
  327. data/src/core/{support → lib/support}/slice_buffer.c +0 -0
  328. data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
  329. data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
  330. data/src/core/{support → lib/support}/string.c +1 -1
  331. data/src/core/{support → lib/support}/string.h +4 -4
  332. data/src/core/{support → lib/support}/string_posix.c +1 -1
  333. data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
  334. data/src/core/lib/support/string_win32.c +83 -0
  335. data/src/core/{support → lib/support}/string_win32.h +3 -3
  336. data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
  337. data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
  338. data/src/core/{support → lib/support}/sync.c +2 -2
  339. data/src/core/{support → lib/support}/sync_posix.c +3 -3
  340. data/src/core/{support → lib/support}/sync_win32.c +1 -1
  341. data/src/core/{support → lib/support}/thd.c +0 -0
  342. data/src/core/{support → lib/support}/thd_internal.h +3 -3
  343. data/src/core/{support → lib/support}/thd_posix.c +4 -3
  344. data/src/core/{support → lib/support}/thd_win32.c +1 -1
  345. data/src/core/{support → lib/support}/time.c +2 -2
  346. data/src/core/{support → lib/support}/time_posix.c +12 -6
  347. data/src/core/{support → lib/support}/time_precise.c +0 -0
  348. data/src/core/{support → lib/support}/time_precise.h +3 -3
  349. data/src/core/{support → lib/support}/time_win32.c +7 -7
  350. data/src/core/{support → lib/support}/tls_pthread.c +0 -0
  351. data/src/core/{support → lib/support}/tmpfile.h +4 -4
  352. data/src/core/lib/support/tmpfile_msys.c +73 -0
  353. data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
  354. data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
  355. data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
  356. data/src/core/{surface → lib/surface}/alarm.c +3 -3
  357. data/src/core/{surface → lib/surface}/api_trace.c +1 -1
  358. data/src/core/{surface → lib/surface}/api_trace.h +4 -4
  359. data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
  360. data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
  361. data/src/core/{surface → lib/surface}/call.c +145 -73
  362. data/src/core/{surface → lib/surface}/call.h +14 -7
  363. data/src/core/{surface → lib/surface}/call_details.c +1 -1
  364. data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
  365. data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
  366. data/src/core/{surface → lib/surface}/channel.c +33 -34
  367. data/src/core/{surface → lib/surface}/channel.h +9 -9
  368. data/src/core/lib/surface/channel_init.c +140 -0
  369. data/src/core/lib/surface/channel_init.h +87 -0
  370. data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
  371. data/src/core/lib/surface/channel_stack_type.c +54 -0
  372. data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
  373. data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
  374. data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
  375. data/src/core/{surface → lib/surface}/event_string.c +2 -2
  376. data/src/core/{surface → lib/surface}/event_string.h +3 -3
  377. data/src/core/lib/surface/init.c +217 -0
  378. data/src/core/{surface → lib/surface}/init.h +4 -3
  379. data/src/core/lib/surface/init_secure.c +89 -0
  380. data/src/core/{surface → lib/surface}/lame_client.c +31 -19
  381. data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
  382. data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
  383. data/src/core/{surface → lib/surface}/server.c +208 -183
  384. data/src/core/{surface → lib/surface}/server.h +6 -11
  385. data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
  386. data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
  387. data/src/core/{surface → lib/surface}/version.c +2 -2
  388. data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
  389. data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
  390. data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
  391. data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
  392. data/src/core/{transport → lib/transport}/metadata.c +71 -19
  393. data/src/core/{transport → lib/transport}/metadata.h +11 -4
  394. data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
  395. data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
  396. data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
  397. data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
  398. data/src/core/{transport → lib/transport}/transport.c +25 -5
  399. data/src/core/{transport → lib/transport}/transport.h +41 -16
  400. data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
  401. data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
  402. data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
  403. data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
  404. data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
  405. data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
  406. data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
  407. data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
  408. data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
  409. data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
  410. data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
  411. data/src/ruby/ext/grpc/extconf.rb +14 -20
  412. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
  413. data/src/ruby/ext/grpc/rb_call.c +37 -4
  414. data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
  415. data/src/ruby/ext/grpc/rb_channel.c +2 -3
  416. data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
  417. data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
  418. data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
  419. data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
  420. data/src/ruby/ext/grpc/rb_grpc.c +4 -2
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
  422. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
  423. data/src/ruby/ext/grpc/rb_server.c +2 -3
  424. data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
  425. data/src/ruby/ext/grpc/rb_signal.c +70 -0
  426. data/src/ruby/ext/grpc/rb_signal.h +39 -0
  427. data/src/ruby/lib/grpc.rb +21 -13
  428. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  429. data/src/ruby/lib/grpc/errors.rb +2 -2
  430. data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
  431. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  432. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
  433. data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
  434. data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
  435. data/src/ruby/lib/grpc/generic/service.rb +5 -15
  436. data/src/ruby/lib/grpc/grpc.rb +3 -3
  437. data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
  438. data/src/ruby/lib/grpc/version.rb +2 -2
  439. data/src/ruby/pb/generate_proto_ruby.sh +9 -2
  440. data/src/ruby/pb/grpc/health/checker.rb +1 -1
  441. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
  442. data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
  443. data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
  444. data/src/ruby/pb/test/client.rb +12 -23
  445. data/src/ruby/pb/test/server.rb +1 -1
  446. data/src/ruby/spec/client_server_spec.rb +1 -1
  447. data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
  448. data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
  449. data/src/ruby/spec/generic/service_spec.rb +0 -69
  450. data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
  451. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  452. data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
  453. data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
  454. data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
  455. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
  456. data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
  457. data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
  458. data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
  459. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
  460. data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
  461. data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
  462. data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
  463. data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
  464. data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
  465. data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
  466. data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
  467. data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
  468. data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
  469. data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
  470. data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
  471. data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
  472. data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
  473. data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
  474. data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
  475. data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
  476. data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
  477. data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
  478. data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
  479. data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
  480. data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
  481. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
  482. data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
  483. data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
  484. data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
  485. data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
  486. data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
  487. data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
  488. data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
  489. data/third_party/boringssl/crypto/bio/buffer.c +3 -3
  490. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
  491. data/third_party/boringssl/crypto/bn/bn.c +1 -1
  492. data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
  493. data/third_party/boringssl/crypto/bn/convert.c +9 -4
  494. data/third_party/boringssl/crypto/bn/div.c +0 -20
  495. data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
  496. data/third_party/boringssl/crypto/bn/generic.c +6 -242
  497. data/third_party/boringssl/crypto/bn/internal.h +9 -70
  498. data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
  499. data/third_party/boringssl/crypto/bn/mul.c +6 -26
  500. data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
  501. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  502. data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
  503. data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
  504. data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
  505. data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
  506. data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
  507. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
  508. data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
  509. data/third_party/boringssl/crypto/conf/conf.c +9 -0
  510. data/third_party/boringssl/crypto/cpu-intel.c +1 -1
  511. data/third_party/boringssl/crypto/crypto.c +2 -0
  512. data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
  513. data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
  514. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
  515. data/third_party/boringssl/crypto/dh/check.c +32 -10
  516. data/third_party/boringssl/crypto/dh/dh.c +1 -1
  517. data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
  518. data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
  519. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
  520. data/third_party/boringssl/crypto/ec/ec.c +45 -31
  521. data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
  522. data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
  523. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
  524. data/third_party/boringssl/crypto/ec/internal.h +1 -19
  525. data/third_party/boringssl/crypto/ec/oct.c +12 -0
  526. data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
  527. data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
  528. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
  529. data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
  530. data/third_party/boringssl/crypto/ec/simple.c +0 -76
  531. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
  532. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
  533. data/third_party/boringssl/crypto/evp/evp.c +4 -3
  534. data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
  535. data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
  536. data/third_party/boringssl/crypto/evp/internal.h +28 -27
  537. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
  538. data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
  539. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
  540. data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
  541. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
  542. data/third_party/boringssl/crypto/internal.h +16 -1
  543. data/third_party/boringssl/crypto/mem.c +2 -2
  544. data/third_party/boringssl/crypto/modes/ctr.c +2 -1
  545. data/third_party/boringssl/crypto/modes/gcm.c +5 -3
  546. data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
  547. data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
  548. data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
  549. data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
  550. data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
  551. data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
  552. data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
  553. data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
  554. data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
  555. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
  556. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
  557. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
  558. data/third_party/boringssl/crypto/rand/rand.c +2 -0
  559. data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
  560. data/third_party/boringssl/crypto/rsa/internal.h +1 -9
  561. data/third_party/boringssl/crypto/rsa/padding.c +73 -77
  562. data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
  563. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
  564. data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
  565. data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
  566. data/third_party/boringssl/crypto/thread_win.c +15 -13
  567. data/third_party/boringssl/crypto/time_support.c +0 -6
  568. data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
  569. data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
  570. data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
  571. data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
  572. data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
  573. data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
  574. data/third_party/boringssl/crypto/x509/by_file.c +186 -206
  575. data/third_party/boringssl/crypto/x509/charmap.h +11 -11
  576. data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
  577. data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
  578. data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
  579. data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
  580. data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
  581. data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
  582. data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
  583. data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
  584. data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
  585. data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
  586. data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
  587. data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
  588. data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
  589. data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
  590. data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
  591. data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
  592. data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
  593. data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
  594. data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
  595. data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
  596. data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
  597. data/third_party/boringssl/crypto/x509/x509name.c +280 -275
  598. data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
  599. data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
  600. data/third_party/boringssl/crypto/x509/x509type.c +58 -60
  601. data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
  602. data/third_party/boringssl/crypto/x509/x_all.c +282 -328
  603. data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
  604. data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
  605. data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
  606. data/third_party/boringssl/crypto/x509/x_info.c +30 -27
  607. data/third_party/boringssl/crypto/x509/x_name.c +387 -388
  608. data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
  609. data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
  610. data/third_party/boringssl/crypto/x509/x_req.c +30 -33
  611. data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
  612. data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
  613. data/third_party/boringssl/crypto/x509/x_val.c +2 -2
  614. data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
  615. data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
  616. data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
  617. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
  618. data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
  619. data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
  620. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
  621. data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
  622. data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
  623. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
  624. data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
  625. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
  626. data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
  627. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
  628. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
  629. data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
  630. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
  631. data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
  632. data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
  633. data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
  634. data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
  635. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
  636. data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
  637. data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
  638. data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
  639. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
  640. data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
  641. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
  642. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
  643. data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
  644. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
  645. data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
  646. data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
  647. data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
  648. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
  649. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
  650. data/third_party/boringssl/include/openssl/asn1.h +40 -38
  651. data/third_party/boringssl/include/openssl/base.h +10 -1
  652. data/third_party/boringssl/include/openssl/bio.h +10 -11
  653. data/third_party/boringssl/include/openssl/bn.h +12 -9
  654. data/third_party/boringssl/include/openssl/buf.h +1 -1
  655. data/third_party/boringssl/include/openssl/bytestring.h +29 -0
  656. data/third_party/boringssl/include/openssl/conf.h +25 -0
  657. data/third_party/boringssl/include/openssl/crypto.h +6 -1
  658. data/third_party/boringssl/include/openssl/curve25519.h +6 -3
  659. data/third_party/boringssl/include/openssl/dh.h +7 -3
  660. data/third_party/boringssl/include/openssl/dsa.h +108 -51
  661. data/third_party/boringssl/include/openssl/ec.h +46 -21
  662. data/third_party/boringssl/include/openssl/ec_key.h +78 -42
  663. data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
  664. data/third_party/boringssl/include/openssl/err.h +3 -2
  665. data/third_party/boringssl/include/openssl/evp.h +120 -37
  666. data/third_party/boringssl/include/openssl/mem.h +4 -13
  667. data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
  668. data/third_party/boringssl/include/openssl/pem.h +0 -9
  669. data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
  670. data/third_party/boringssl/include/openssl/rand.h +3 -0
  671. data/third_party/boringssl/include/openssl/rsa.h +42 -42
  672. data/third_party/boringssl/include/openssl/ssl.h +115 -41
  673. data/third_party/boringssl/include/openssl/stack.h +0 -3
  674. data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
  675. data/third_party/boringssl/include/openssl/tls1.h +1 -1
  676. data/third_party/boringssl/include/openssl/x509.h +0 -2
  677. data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
  678. data/third_party/boringssl/ssl/d1_both.c +102 -101
  679. data/third_party/boringssl/ssl/d1_clnt.c +145 -150
  680. data/third_party/boringssl/ssl/d1_lib.c +63 -62
  681. data/third_party/boringssl/ssl/d1_pkt.c +73 -71
  682. data/third_party/boringssl/ssl/d1_srvr.c +116 -125
  683. data/third_party/boringssl/ssl/dtls_record.c +3 -3
  684. data/third_party/boringssl/ssl/internal.h +210 -208
  685. data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
  686. data/third_party/boringssl/ssl/s3_both.c +116 -130
  687. data/third_party/boringssl/ssl/s3_clnt.c +589 -740
  688. data/third_party/boringssl/ssl/s3_enc.c +52 -151
  689. data/third_party/boringssl/ssl/s3_lib.c +70 -76
  690. data/third_party/boringssl/ssl/s3_pkt.c +105 -144
  691. data/third_party/boringssl/ssl/s3_srvr.c +542 -806
  692. data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
  693. data/third_party/boringssl/ssl/ssl_cert.c +2 -2
  694. data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
  695. data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
  696. data/third_party/boringssl/ssl/ssl_lib.c +260 -221
  697. data/third_party/boringssl/ssl/ssl_session.c +17 -17
  698. data/third_party/boringssl/ssl/t1_enc.c +128 -273
  699. data/third_party/boringssl/ssl/t1_lib.c +134 -258
  700. data/third_party/boringssl/ssl/test/test_config.h +2 -0
  701. data/third_party/boringssl/ssl/tls_record.c +52 -15
  702. metadata +385 -359
  703. data/src/core/channel/client_uchannel.c +0 -243
  704. data/src/core/channel/client_uchannel.h +0 -60
  705. data/src/core/channel/connected_channel.h +0 -51
  706. data/src/core/client_config/lb_policies/pick_first.h +0 -43
  707. data/src/core/client_config/resolvers/dns_resolver.h +0 -42
  708. data/src/core/client_config/subchannel_factory.h +0 -66
  709. data/src/core/httpcli/parser.c +0 -211
  710. data/src/core/iomgr/fd_posix.c +0 -451
  711. data/src/core/iomgr/fd_posix.h +0 -192
  712. data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
  713. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
  714. data/src/core/iomgr/pollset_posix.c +0 -633
  715. data/src/core/iomgr/pollset_posix.h +0 -153
  716. data/src/core/iomgr/pollset_set_posix.c +0 -202
  717. data/src/core/iomgr/pollset_set_posix.h +0 -45
  718. data/src/core/surface/init.c +0 -174
  719. data/src/core/surface/init_secure.c +0 -42
  720. data/src/core/surface/server_create.c +0 -48
  721. data/src/core/transport/chttp2/huffsyms.c +0 -297
  722. data/src/ruby/bin/grpc_ruby_interop_client +0 -33
  723. data/src/ruby/bin/grpc_ruby_interop_server +0 -33
  724. data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -31,10 +31,11 @@
31
31
  *
32
32
  */
33
33
 
34
- #ifndef GRPC_INTERNAL_CORE_SURFACE_INIT_H
35
- #define GRPC_INTERNAL_CORE_SURFACE_INIT_H
34
+ #ifndef GRPC_CORE_LIB_SURFACE_INIT_H
35
+ #define GRPC_CORE_LIB_SURFACE_INIT_H
36
36
 
37
+ void grpc_register_security_filters(void);
37
38
  void grpc_security_pre_init(void);
38
39
  int grpc_is_initialized(void);
39
40
 
40
- #endif /* GRPC_INTERNAL_CORE_SURFACE_INIT_H */
41
+ #endif /* GRPC_CORE_LIB_SURFACE_INIT_H */
@@ -0,0 +1,89 @@
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/lib/surface/init.h"
35
+
36
+ #include <limits.h>
37
+ #include <string.h>
38
+
39
+ #include "src/core/lib/debug/trace.h"
40
+ #include "src/core/lib/security/auth_filters.h"
41
+ #include "src/core/lib/security/credentials.h"
42
+ #include "src/core/lib/security/secure_endpoint.h"
43
+ #include "src/core/lib/security/security_connector.h"
44
+ #include "src/core/lib/surface/channel_init.h"
45
+ #include "src/core/lib/tsi/transport_security_interface.h"
46
+
47
+ void grpc_security_pre_init(void) {
48
+ grpc_register_tracer("secure_endpoint", &grpc_trace_secure_endpoint);
49
+ grpc_register_tracer("transport_security", &tsi_tracing_enabled);
50
+ }
51
+
52
+ static bool maybe_prepend_client_auth_filter(
53
+ grpc_channel_stack_builder *builder, void *arg) {
54
+ const grpc_channel_args *args =
55
+ grpc_channel_stack_builder_get_channel_arguments(builder);
56
+ if (args) {
57
+ for (size_t i = 0; i < args->num_args; i++) {
58
+ if (0 == strcmp(GRPC_SECURITY_CONNECTOR_ARG, args->args[i].key)) {
59
+ return grpc_channel_stack_builder_prepend_filter(
60
+ builder, &grpc_client_auth_filter, NULL, NULL);
61
+ }
62
+ }
63
+ }
64
+ return true;
65
+ }
66
+
67
+ static bool maybe_prepend_server_auth_filter(
68
+ grpc_channel_stack_builder *builder, void *arg) {
69
+ const grpc_channel_args *args =
70
+ grpc_channel_stack_builder_get_channel_arguments(builder);
71
+ if (args) {
72
+ for (size_t i = 0; i < args->num_args; i++) {
73
+ if (0 == strcmp(GRPC_SERVER_CREDENTIALS_ARG, args->args[i].key)) {
74
+ return grpc_channel_stack_builder_prepend_filter(
75
+ builder, &grpc_server_auth_filter, NULL, NULL);
76
+ }
77
+ }
78
+ }
79
+ return true;
80
+ }
81
+
82
+ void grpc_register_security_filters(void) {
83
+ grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL, INT_MAX,
84
+ maybe_prepend_client_auth_filter, NULL);
85
+ grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL, INT_MAX,
86
+ maybe_prepend_client_auth_filter, NULL);
87
+ grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX,
88
+ maybe_prepend_server_auth_filter, NULL);
89
+ }
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2015-2016, Google Inc.
3
+ * Copyright 2015, Google Inc.
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -31,17 +31,19 @@
31
31
  *
32
32
  */
33
33
 
34
+ #include "src/core/lib/surface/lame_client.h"
35
+
34
36
  #include <grpc/grpc.h>
35
37
 
36
38
  #include <string.h>
37
39
 
38
- #include "src/core/channel/channel_stack.h"
39
- #include "src/core/support/string.h"
40
- #include "src/core/surface/api_trace.h"
41
- #include "src/core/surface/channel.h"
42
- #include "src/core/surface/call.h"
43
40
  #include <grpc/support/alloc.h>
44
41
  #include <grpc/support/log.h>
42
+ #include "src/core/lib/channel/channel_stack.h"
43
+ #include "src/core/lib/support/string.h"
44
+ #include "src/core/lib/surface/api_trace.h"
45
+ #include "src/core/lib/surface/call.h"
46
+ #include "src/core/lib/surface/channel.h"
45
47
 
46
48
  typedef struct {
47
49
  grpc_linked_mdelem status;
@@ -97,13 +99,18 @@ static void lame_start_transport_op(grpc_exec_ctx *exec_ctx,
97
99
  if (op->on_consumed != NULL) {
98
100
  op->on_consumed->cb(exec_ctx, op->on_consumed->cb_arg, 1);
99
101
  }
102
+ if (op->send_ping != NULL) {
103
+ op->send_ping->cb(exec_ctx, op->send_ping->cb_arg, 0);
104
+ }
100
105
  }
101
106
 
102
107
  static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
103
108
  grpc_call_element_args *args) {}
104
109
 
105
- static void destroy_call_elem(grpc_exec_ctx *exec_ctx,
106
- grpc_call_element *elem) {}
110
+ static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
111
+ void *and_free_memory) {
112
+ gpr_free(and_free_memory);
113
+ }
107
114
 
108
115
  static void init_channel_elem(grpc_exec_ctx *exec_ctx,
109
116
  grpc_channel_element *elem,
@@ -115,11 +122,18 @@ static void init_channel_elem(grpc_exec_ctx *exec_ctx,
115
122
  static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
116
123
  grpc_channel_element *elem) {}
117
124
 
118
- static const grpc_channel_filter lame_filter = {
119
- lame_start_transport_stream_op, lame_start_transport_op, sizeof(call_data),
120
- init_call_elem, grpc_call_stack_ignore_set_pollset, destroy_call_elem,
121
- sizeof(channel_data), init_channel_elem, destroy_channel_elem,
122
- lame_get_peer, "lame-client",
125
+ const grpc_channel_filter grpc_lame_filter = {
126
+ lame_start_transport_stream_op,
127
+ lame_start_transport_op,
128
+ sizeof(call_data),
129
+ init_call_elem,
130
+ grpc_call_stack_ignore_set_pollset,
131
+ destroy_call_elem,
132
+ sizeof(channel_data),
133
+ init_channel_elem,
134
+ destroy_channel_elem,
135
+ lame_get_peer,
136
+ "lame-client",
123
137
  };
124
138
 
125
139
  #define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack *)((c) + 1))
@@ -127,19 +141,17 @@ static const grpc_channel_filter lame_filter = {
127
141
  grpc_channel *grpc_lame_client_channel_create(const char *target,
128
142
  grpc_status_code error_code,
129
143
  const char *error_message) {
130
- grpc_channel *channel;
144
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
131
145
  grpc_channel_element *elem;
132
146
  channel_data *chand;
133
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
134
- static const grpc_channel_filter *filters[] = {&lame_filter};
135
- channel =
136
- grpc_channel_create_from_filters(&exec_ctx, target, filters, 1, NULL, 1);
147
+ grpc_channel *channel = grpc_channel_create(&exec_ctx, target, NULL,
148
+ GRPC_CLIENT_LAME_CHANNEL, NULL);
137
149
  elem = grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
138
150
  GRPC_API_TRACE(
139
151
  "grpc_lame_client_channel_create(target=%s, error_code=%d, "
140
152
  "error_message=%s)",
141
153
  3, (target, (int)error_code, error_message));
142
- GPR_ASSERT(elem->filter == &lame_filter);
154
+ GPR_ASSERT(elem->filter == &grpc_lame_filter);
143
155
  chand = (channel_data *)elem->channel_data;
144
156
  chand->error_code = error_code;
145
157
  chand->error_message = error_message;
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2015-2016, Google Inc.
3
+ * Copyright 2016, Google Inc.
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,11 @@
31
31
  *
32
32
  */
33
33
 
34
- #ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_SET_WINDOWS_H
35
- #define GRPC_INTERNAL_CORE_IOMGR_POLLSET_SET_WINDOWS_H
34
+ #ifndef GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H
35
+ #define GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H
36
36
 
37
- #include "src/core/iomgr/pollset_set.h"
37
+ #include "src/core/lib/channel/channel_stack.h"
38
38
 
39
- #endif /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_WINDOWS_H */
39
+ extern const grpc_channel_filter grpc_lame_filter;
40
+
41
+ #endif /* GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H */
@@ -36,7 +36,7 @@
36
36
 
37
37
  #include <string.h>
38
38
 
39
- #include "src/core/surface/api_trace.h"
39
+ #include "src/core/lib/surface/api_trace.h"
40
40
 
41
41
  void grpc_metadata_array_init(grpc_metadata_array* array) {
42
42
  GRPC_API_TRACE("grpc_metadata_array_init(array=%p)", 1, (array));
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2015-2016, Google Inc.
3
+ * Copyright 2015, Google Inc.
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -31,7 +31,7 @@
31
31
  *
32
32
  */
33
33
 
34
- #include "src/core/surface/server.h"
34
+ #include "src/core/lib/surface/server.h"
35
35
 
36
36
  #include <limits.h>
37
37
  #include <stdlib.h>
@@ -42,19 +42,18 @@
42
42
  #include <grpc/support/string_util.h>
43
43
  #include <grpc/support/useful.h>
44
44
 
45
- #include "src/core/census/grpc_filter.h"
46
- #include "src/core/channel/channel_args.h"
47
- #include "src/core/channel/connected_channel.h"
48
- #include "src/core/iomgr/iomgr.h"
49
- #include "src/core/support/stack_lockfree.h"
50
- #include "src/core/support/string.h"
51
- #include "src/core/surface/api_trace.h"
52
- #include "src/core/surface/call.h"
53
- #include "src/core/surface/channel.h"
54
- #include "src/core/surface/completion_queue.h"
55
- #include "src/core/surface/init.h"
56
- #include "src/core/transport/metadata.h"
57
- #include "src/core/transport/static_metadata.h"
45
+ #include "src/core/lib/channel/channel_args.h"
46
+ #include "src/core/lib/channel/connected_channel.h"
47
+ #include "src/core/lib/iomgr/iomgr.h"
48
+ #include "src/core/lib/support/stack_lockfree.h"
49
+ #include "src/core/lib/support/string.h"
50
+ #include "src/core/lib/surface/api_trace.h"
51
+ #include "src/core/lib/surface/call.h"
52
+ #include "src/core/lib/surface/channel.h"
53
+ #include "src/core/lib/surface/completion_queue.h"
54
+ #include "src/core/lib/surface/init.h"
55
+ #include "src/core/lib/transport/metadata.h"
56
+ #include "src/core/lib/transport/static_metadata.h"
58
57
 
59
58
  typedef struct listener {
60
59
  void *arg;
@@ -96,11 +95,11 @@ typedef struct requested_call {
96
95
  grpc_byte_buffer **optional_payload;
97
96
  } registered;
98
97
  } data;
99
- grpc_closure publish;
100
98
  } requested_call;
101
99
 
102
100
  typedef struct channel_registered_method {
103
101
  registered_method *server_registered_method;
102
+ uint32_t flags;
104
103
  grpc_mdstr *method;
105
104
  grpc_mdstr *host;
106
105
  } channel_registered_method;
@@ -153,17 +152,24 @@ struct call_data {
153
152
  grpc_completion_queue *cq_new;
154
153
 
155
154
  grpc_metadata_batch *recv_initial_metadata;
155
+ bool recv_idempotent_request;
156
156
  grpc_metadata_array initial_metadata;
157
157
 
158
+ request_matcher *request_matcher;
159
+ grpc_byte_buffer *payload;
160
+
158
161
  grpc_closure got_initial_metadata;
159
162
  grpc_closure server_on_recv_initial_metadata;
160
163
  grpc_closure kill_zombie_closure;
161
164
  grpc_closure *on_done_recv_initial_metadata;
162
165
 
166
+ grpc_closure publish;
167
+
163
168
  call_data *pending_next;
164
169
  };
165
170
 
166
171
  struct request_matcher {
172
+ grpc_server *server;
167
173
  call_data *pending_head;
168
174
  call_data *pending_tail;
169
175
  gpr_stack_lockfree *requests;
@@ -172,6 +178,8 @@ struct request_matcher {
172
178
  struct registered_method {
173
179
  char *method;
174
180
  char *host;
181
+ grpc_server_register_method_payload_handling payload_handling;
182
+ uint32_t flags;
175
183
  request_matcher request_matcher;
176
184
  registered_method *next;
177
185
  };
@@ -182,8 +190,6 @@ typedef struct {
182
190
  } channel_broadcaster;
183
191
 
184
192
  struct grpc_server {
185
- size_t channel_filter_count;
186
- grpc_channel_filter const **channel_filters;
187
193
  grpc_channel_args *channel_args;
188
194
 
189
195
  grpc_completion_queue **cqs;
@@ -226,8 +232,7 @@ struct grpc_server {
226
232
  #define SERVER_FROM_CALL_ELEM(elem) \
227
233
  (((channel_data *)(elem)->channel_data)->server)
228
234
 
229
- static void begin_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
230
- call_data *calld, requested_call *rc);
235
+ static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *calld, bool success);
231
236
  static void fail_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
232
237
  requested_call *rc);
233
238
  /* Before calling maybe_finish_shutdown, we must hold mu_global and not
@@ -303,8 +308,10 @@ static void channel_broadcaster_shutdown(grpc_exec_ctx *exec_ctx,
303
308
  * request_matcher
304
309
  */
305
310
 
306
- static void request_matcher_init(request_matcher *rm, size_t entries) {
311
+ static void request_matcher_init(request_matcher *rm, size_t entries,
312
+ grpc_server *server) {
307
313
  memset(rm, 0, sizeof(*rm));
314
+ rm->server = server;
308
315
  rm->requests = gpr_stack_lockfree_create(entries);
309
316
  }
310
317
 
@@ -355,7 +362,6 @@ static void server_delete(grpc_exec_ctx *exec_ctx, grpc_server *server) {
355
362
  grpc_channel_args_destroy(server->channel_args);
356
363
  gpr_mu_destroy(&server->mu_global);
357
364
  gpr_mu_destroy(&server->mu_call);
358
- gpr_free((void *)server->channel_filters);
359
365
  while ((rm = server->registered_methods) != NULL) {
360
366
  server->registered_methods = rm->next;
361
367
  request_matcher_destroy(&rm->request_matcher);
@@ -418,21 +424,90 @@ static void destroy_channel(grpc_exec_ctx *exec_ctx, channel_data *chand) {
418
424
  &op);
419
425
  }
420
426
 
421
- static void finish_start_new_rpc(grpc_exec_ctx *exec_ctx, grpc_server *server,
422
- grpc_call_element *elem, request_matcher *rm) {
423
- call_data *calld = elem->call_data;
424
- int request_id;
427
+ static void cpstr(char **dest, size_t *capacity, grpc_mdstr *value) {
428
+ gpr_slice slice = value->slice;
429
+ size_t len = GPR_SLICE_LENGTH(slice);
425
430
 
426
- if (gpr_atm_acq_load(&server->shutdown_flag)) {
431
+ if (len + 1 > *capacity) {
432
+ *capacity = GPR_MAX(len + 1, *capacity * 2);
433
+ *dest = gpr_realloc(*dest, *capacity);
434
+ }
435
+ memcpy(*dest, grpc_mdstr_as_c_string(value), len + 1);
436
+ }
437
+
438
+ static void done_request_event(grpc_exec_ctx *exec_ctx, void *req,
439
+ grpc_cq_completion *c) {
440
+ requested_call *rc = req;
441
+ grpc_server *server = rc->server;
442
+
443
+ if (rc >= server->requested_calls &&
444
+ rc < server->requested_calls + server->max_requested_calls) {
445
+ GPR_ASSERT(rc - server->requested_calls <= INT_MAX);
446
+ gpr_stack_lockfree_push(server->request_freelist,
447
+ (int)(rc - server->requested_calls));
448
+ } else {
449
+ gpr_free(req);
450
+ }
451
+
452
+ server_unref(exec_ctx, server);
453
+ }
454
+
455
+ static void publish_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
456
+ call_data *calld, requested_call *rc) {
457
+ grpc_call_set_completion_queue(exec_ctx, calld->call, rc->cq_bound_to_call);
458
+ grpc_call *call = calld->call;
459
+ *rc->call = call;
460
+ calld->cq_new = rc->cq_for_notification;
461
+ GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, calld->initial_metadata);
462
+ switch (rc->type) {
463
+ case BATCH_CALL:
464
+ GPR_ASSERT(calld->host != NULL);
465
+ GPR_ASSERT(calld->path != NULL);
466
+ cpstr(&rc->data.batch.details->host,
467
+ &rc->data.batch.details->host_capacity, calld->host);
468
+ cpstr(&rc->data.batch.details->method,
469
+ &rc->data.batch.details->method_capacity, calld->path);
470
+ rc->data.batch.details->deadline = calld->deadline;
471
+ rc->data.batch.details->flags =
472
+ 0 | (calld->recv_idempotent_request
473
+ ? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST
474
+ : 0);
475
+ break;
476
+ case REGISTERED_CALL:
477
+ *rc->data.registered.deadline = calld->deadline;
478
+ if (rc->data.registered.optional_payload) {
479
+ *rc->data.registered.optional_payload = calld->payload;
480
+ }
481
+ break;
482
+ default:
483
+ GPR_UNREACHABLE_CODE(return );
484
+ }
485
+
486
+ grpc_call_element *elem =
487
+ grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
488
+ channel_data *chand = elem->channel_data;
489
+ server_ref(chand->server);
490
+ grpc_cq_end_op(exec_ctx, calld->cq_new, rc->tag, true, done_request_event, rc,
491
+ &rc->completion);
492
+ }
493
+
494
+ static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
495
+ call_data *calld = arg;
496
+ request_matcher *rm = calld->request_matcher;
497
+ grpc_server *server = rm->server;
498
+
499
+ if (!success || gpr_atm_acq_load(&server->shutdown_flag)) {
427
500
  gpr_mu_lock(&calld->mu_state);
428
501
  calld->state = ZOMBIED;
429
502
  gpr_mu_unlock(&calld->mu_state);
430
- grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem);
503
+ grpc_closure_init(
504
+ &calld->kill_zombie_closure, kill_zombie,
505
+ grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0));
431
506
  grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, NULL);
432
507
  return;
433
508
  }
434
509
 
435
- request_id = gpr_stack_lockfree_pop(rm->requests);
510
+ int request_id = gpr_stack_lockfree_pop(rm->requests);
436
511
  if (request_id == -1) {
437
512
  gpr_mu_lock(&server->mu_call);
438
513
  gpr_mu_lock(&calld->mu_state);
@@ -450,7 +525,41 @@ static void finish_start_new_rpc(grpc_exec_ctx *exec_ctx, grpc_server *server,
450
525
  gpr_mu_lock(&calld->mu_state);
451
526
  calld->state = ACTIVATED;
452
527
  gpr_mu_unlock(&calld->mu_state);
453
- begin_call(exec_ctx, server, calld, &server->requested_calls[request_id]);
528
+ publish_call(exec_ctx, server, calld, &server->requested_calls[request_id]);
529
+ }
530
+ }
531
+
532
+ static void finish_start_new_rpc(
533
+ grpc_exec_ctx *exec_ctx, grpc_server *server, grpc_call_element *elem,
534
+ request_matcher *rm,
535
+ grpc_server_register_method_payload_handling payload_handling) {
536
+ call_data *calld = elem->call_data;
537
+
538
+ if (gpr_atm_acq_load(&server->shutdown_flag)) {
539
+ gpr_mu_lock(&calld->mu_state);
540
+ calld->state = ZOMBIED;
541
+ gpr_mu_unlock(&calld->mu_state);
542
+ grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem);
543
+ grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, NULL);
544
+ return;
545
+ }
546
+
547
+ calld->request_matcher = rm;
548
+
549
+ switch (payload_handling) {
550
+ case GRPC_SRM_PAYLOAD_NONE:
551
+ publish_new_rpc(exec_ctx, calld, true);
552
+ break;
553
+ case GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER: {
554
+ grpc_op op;
555
+ memset(&op, 0, sizeof(op));
556
+ op.op = GRPC_OP_RECV_MESSAGE;
557
+ op.data.recv_message = &calld->payload;
558
+ grpc_closure_init(&calld->publish, publish_new_rpc, calld);
559
+ grpc_call_start_batch_and_execute(exec_ctx, calld->call, &op, 1,
560
+ &calld->publish);
561
+ break;
562
+ }
454
563
  }
455
564
  }
456
565
 
@@ -472,8 +581,12 @@ static void start_new_rpc(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
472
581
  if (!rm) break;
473
582
  if (rm->host != calld->host) continue;
474
583
  if (rm->method != calld->path) continue;
584
+ if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
585
+ !calld->recv_idempotent_request)
586
+ continue;
475
587
  finish_start_new_rpc(exec_ctx, server, elem,
476
- &rm->server_registered_method->request_matcher);
588
+ &rm->server_registered_method->request_matcher,
589
+ rm->server_registered_method->payload_handling);
477
590
  return;
478
591
  }
479
592
  /* check for a wildcard method definition (no host set) */
@@ -484,13 +597,18 @@ static void start_new_rpc(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
484
597
  if (!rm) break;
485
598
  if (rm->host != NULL) continue;
486
599
  if (rm->method != calld->path) continue;
600
+ if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
601
+ !calld->recv_idempotent_request)
602
+ continue;
487
603
  finish_start_new_rpc(exec_ctx, server, elem,
488
- &rm->server_registered_method->request_matcher);
604
+ &rm->server_registered_method->request_matcher,
605
+ rm->server_registered_method->payload_handling);
489
606
  return;
490
607
  }
491
608
  }
492
609
  finish_start_new_rpc(exec_ctx, server, elem,
493
- &server->unregistered_request_matcher);
610
+ &server->unregistered_request_matcher,
611
+ GRPC_SRM_PAYLOAD_NONE);
494
612
  }
495
613
 
496
614
  static int num_listeners(grpc_server *server) {
@@ -567,10 +685,14 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) {
567
685
  grpc_call_element *elem = user_data;
568
686
  call_data *calld = elem->call_data;
569
687
  if (md->key == GRPC_MDSTR_PATH) {
570
- calld->path = GRPC_MDSTR_REF(md->value);
688
+ if (calld->path == NULL) {
689
+ calld->path = GRPC_MDSTR_REF(md->value);
690
+ }
571
691
  return NULL;
572
692
  } else if (md->key == GRPC_MDSTR_AUTHORITY) {
573
- calld->host = GRPC_MDSTR_REF(md->value);
693
+ if (calld->host == NULL) {
694
+ calld->host = GRPC_MDSTR_REF(md->value);
695
+ }
574
696
  return NULL;
575
697
  }
576
698
  return md;
@@ -602,9 +724,11 @@ static void server_mutate_op(grpc_call_element *elem,
602
724
  call_data *calld = elem->call_data;
603
725
 
604
726
  if (op->recv_initial_metadata != NULL) {
727
+ GPR_ASSERT(op->recv_idempotent_request == NULL);
605
728
  calld->recv_initial_metadata = op->recv_initial_metadata;
606
729
  calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready;
607
730
  op->recv_initial_metadata_ready = &calld->server_on_recv_initial_metadata;
731
+ op->recv_idempotent_request = &calld->recv_idempotent_request;
608
732
  }
609
733
  }
610
734
 
@@ -696,8 +820,8 @@ static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
696
820
  server_ref(chand->server);
697
821
  }
698
822
 
699
- static void destroy_call_elem(grpc_exec_ctx *exec_ctx,
700
- grpc_call_element *elem) {
823
+ static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
824
+ void *ignored) {
701
825
  channel_data *chand = elem->channel_data;
702
826
  call_data *calld = elem->call_data;
703
827
 
@@ -757,11 +881,18 @@ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
757
881
  }
758
882
  }
759
883
 
760
- static const grpc_channel_filter server_surface_filter = {
761
- server_start_transport_stream_op, grpc_channel_next_op, sizeof(call_data),
762
- init_call_elem, grpc_call_stack_ignore_set_pollset, destroy_call_elem,
763
- sizeof(channel_data), init_channel_elem, destroy_channel_elem,
764
- grpc_call_next_get_peer, "server",
884
+ const grpc_channel_filter grpc_server_top_filter = {
885
+ server_start_transport_stream_op,
886
+ grpc_channel_next_op,
887
+ sizeof(call_data),
888
+ init_call_elem,
889
+ grpc_call_stack_ignore_set_pollset,
890
+ destroy_call_elem,
891
+ sizeof(channel_data),
892
+ init_channel_elem,
893
+ destroy_channel_elem,
894
+ grpc_call_next_get_peer,
895
+ "server",
765
896
  };
766
897
 
767
898
  void grpc_server_register_completion_queue(grpc_server *server,
@@ -783,11 +914,10 @@ void grpc_server_register_completion_queue(grpc_server *server,
783
914
  server->cqs[n] = cq;
784
915
  }
785
916
 
786
- grpc_server *grpc_server_create_from_filters(
787
- const grpc_channel_filter **filters, size_t filter_count,
788
- const grpc_channel_args *args) {
917
+ grpc_server *grpc_server_create(const grpc_channel_args *args, void *reserved) {
789
918
  size_t i;
790
- int census_enabled = grpc_channel_args_is_census_enabled(args);
919
+
920
+ GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
791
921
 
792
922
  grpc_server *server = gpr_malloc(sizeof(grpc_server));
793
923
 
@@ -811,27 +941,10 @@ grpc_server *grpc_server_create_from_filters(
811
941
  gpr_stack_lockfree_push(server->request_freelist, (int)i);
812
942
  }
813
943
  request_matcher_init(&server->unregistered_request_matcher,
814
- server->max_requested_calls);
944
+ server->max_requested_calls, server);
815
945
  server->requested_calls = gpr_malloc(server->max_requested_calls *
816
946
  sizeof(*server->requested_calls));
817
947
 
818
- /* Server filter stack is:
819
-
820
- server_surface_filter - for making surface API calls
821
- grpc_server_census_filter (optional) - for stats collection and tracing
822
- {passed in filter stack}
823
- grpc_connected_channel_filter - for interfacing with transports */
824
- server->channel_filter_count = filter_count + 1u + (census_enabled ? 1u : 0u);
825
- server->channel_filters =
826
- gpr_malloc(server->channel_filter_count * sizeof(grpc_channel_filter *));
827
- server->channel_filters[0] = &server_surface_filter;
828
- if (census_enabled) {
829
- server->channel_filters[1] = &grpc_server_census_filter;
830
- }
831
- for (i = 0; i < filter_count; i++) {
832
- server->channel_filters[i + 1u + (census_enabled ? 1u : 0u)] = filters[i];
833
- }
834
-
835
948
  server->channel_args = grpc_channel_args_copy(args);
836
949
 
837
950
  return server;
@@ -844,11 +957,15 @@ static int streq(const char *a, const char *b) {
844
957
  return 0 == strcmp(a, b);
845
958
  }
846
959
 
847
- void *grpc_server_register_method(grpc_server *server, const char *method,
848
- const char *host) {
960
+ void *grpc_server_register_method(
961
+ grpc_server *server, const char *method, const char *host,
962
+ grpc_server_register_method_payload_handling payload_handling,
963
+ uint32_t flags) {
849
964
  registered_method *m;
850
- GRPC_API_TRACE("grpc_server_register_method(server=%p, method=%s, host=%s)",
851
- 3, (server, method, host));
965
+ GRPC_API_TRACE(
966
+ "grpc_server_register_method(server=%p, method=%s, host=%s, "
967
+ "flags=0x%08x)",
968
+ 4, (server, method, host, flags));
852
969
  if (!method) {
853
970
  gpr_log(GPR_ERROR,
854
971
  "grpc_server_register_method method string cannot be NULL");
@@ -861,12 +978,20 @@ void *grpc_server_register_method(grpc_server *server, const char *method,
861
978
  return NULL;
862
979
  }
863
980
  }
981
+ if ((flags & ~GRPC_INITIAL_METADATA_USED_MASK) != 0) {
982
+ gpr_log(GPR_ERROR, "grpc_server_register_method invalid flags 0x%08x",
983
+ flags);
984
+ return NULL;
985
+ }
864
986
  m = gpr_malloc(sizeof(registered_method));
865
987
  memset(m, 0, sizeof(*m));
866
- request_matcher_init(&m->request_matcher, server->max_requested_calls);
988
+ request_matcher_init(&m->request_matcher, server->max_requested_calls,
989
+ server);
867
990
  m->method = gpr_strdup(method);
868
991
  m->host = gpr_strdup(host);
869
992
  m->next = server->registered_methods;
993
+ m->payload_handling = payload_handling;
994
+ m->flags = flags;
870
995
  server->registered_methods = m;
871
996
  return m;
872
997
  }
@@ -892,12 +1017,7 @@ void grpc_server_start(grpc_server *server) {
892
1017
 
893
1018
  void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
894
1019
  grpc_transport *transport,
895
- grpc_channel_filter const **extra_filters,
896
- size_t num_extra_filters,
897
1020
  const grpc_channel_args *args) {
898
- size_t num_filters = s->channel_filter_count + num_extra_filters + 1;
899
- grpc_channel_filter const **filters =
900
- gpr_malloc(sizeof(grpc_channel_filter *) * num_filters);
901
1021
  size_t i;
902
1022
  size_t num_registered_methods;
903
1023
  size_t alloc;
@@ -913,24 +1033,17 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
913
1033
  uint32_t max_probes = 0;
914
1034
  grpc_transport_op op;
915
1035
 
916
- for (i = 0; i < s->channel_filter_count; i++) {
917
- filters[i] = s->channel_filters[i];
918
- }
919
- for (; i < s->channel_filter_count + num_extra_filters; i++) {
920
- filters[i] = extra_filters[i - s->channel_filter_count];
921
- }
922
- filters[i] = &grpc_connected_channel_filter;
923
-
924
1036
  for (i = 0; i < s->cq_count; i++) {
925
1037
  memset(&op, 0, sizeof(op));
926
1038
  op.bind_pollset = grpc_cq_pollset(s->cqs[i]);
927
1039
  grpc_transport_perform_op(exec_ctx, transport, &op);
928
1040
  }
929
1041
 
930
- channel = grpc_channel_create_from_filters(exec_ctx, NULL, filters,
931
- num_filters, args, 0);
1042
+ channel =
1043
+ grpc_channel_create(exec_ctx, NULL, args, GRPC_SERVER_CHANNEL, transport);
932
1044
  chand = (channel_data *)grpc_channel_stack_element(
933
- grpc_channel_get_channel_stack(channel), 0)->channel_data;
1045
+ grpc_channel_get_channel_stack(channel), 0)
1046
+ ->channel_data;
934
1047
  chand->server = s;
935
1048
  server_ref(s);
936
1049
  chand->channel = channel;
@@ -951,12 +1064,13 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
951
1064
  method = grpc_mdstr_from_string(rm->method);
952
1065
  hash = GRPC_MDSTR_KV_HASH(host ? host->hash : 0, method->hash);
953
1066
  for (probes = 0; chand->registered_methods[(hash + probes) % slots]
954
- .server_registered_method != NULL;
1067
+ .server_registered_method != NULL;
955
1068
  probes++)
956
1069
  ;
957
1070
  if (probes > max_probes) max_probes = probes;
958
1071
  crm = &chand->registered_methods[(hash + probes) % slots];
959
1072
  crm->server_registered_method = rm;
1073
+ crm->flags = rm->flags;
960
1074
  crm->host = host;
961
1075
  crm->method = method;
962
1076
  }
@@ -965,17 +1079,12 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
965
1079
  chand->registered_method_max_probes = max_probes;
966
1080
  }
967
1081
 
968
- grpc_connected_channel_bind_transport(grpc_channel_get_channel_stack(channel),
969
- transport);
970
-
971
1082
  gpr_mu_lock(&s->mu_global);
972
1083
  chand->next = &s->root_channel_data;
973
1084
  chand->prev = chand->next->prev;
974
1085
  chand->next->prev = chand->prev->next = chand;
975
1086
  gpr_mu_unlock(&s->mu_global);
976
1087
 
977
- gpr_free((void *)filters);
978
-
979
1088
  GRPC_CHANNEL_INTERNAL_REF(channel, "connectivity");
980
1089
  memset(&op, 0, sizeof(op));
981
1090
  op.set_accept_stream = true;
@@ -1155,8 +1264,8 @@ static grpc_call_error queue_call_request(grpc_exec_ctx *exec_ctx,
1155
1264
  GPR_ASSERT(calld->state == PENDING);
1156
1265
  calld->state = ACTIVATED;
1157
1266
  gpr_mu_unlock(&calld->mu_state);
1158
- begin_call(exec_ctx, server, calld,
1159
- &server->requested_calls[request_id]);
1267
+ publish_call(exec_ctx, server, calld,
1268
+ &server->requested_calls[request_id]);
1160
1269
  }
1161
1270
  gpr_mu_lock(&server->mu_call);
1162
1271
  }
@@ -1221,6 +1330,12 @@ grpc_call_error grpc_server_request_registered_call(
1221
1330
  error = GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE;
1222
1331
  goto done;
1223
1332
  }
1333
+ if ((optional_payload == NULL) !=
1334
+ (rm->payload_handling == GRPC_SRM_PAYLOAD_NONE)) {
1335
+ gpr_free(rc);
1336
+ error = GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH;
1337
+ goto done;
1338
+ }
1224
1339
  grpc_cq_begin_op(cq_for_notification, tag);
1225
1340
  rc->type = REGISTERED_CALL;
1226
1341
  rc->server = server;
@@ -1238,82 +1353,6 @@ done:
1238
1353
  return error;
1239
1354
  }
1240
1355
 
1241
- static void publish_registered_or_batch(grpc_exec_ctx *exec_ctx,
1242
- void *user_data, bool success);
1243
-
1244
- static void cpstr(char **dest, size_t *capacity, grpc_mdstr *value) {
1245
- gpr_slice slice = value->slice;
1246
- size_t len = GPR_SLICE_LENGTH(slice);
1247
-
1248
- if (len + 1 > *capacity) {
1249
- *capacity = GPR_MAX(len + 1, *capacity * 2);
1250
- *dest = gpr_realloc(*dest, *capacity);
1251
- }
1252
- memcpy(*dest, grpc_mdstr_as_c_string(value), len + 1);
1253
- }
1254
-
1255
- static void begin_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
1256
- call_data *calld, requested_call *rc) {
1257
- grpc_op ops[1];
1258
- grpc_op *op = ops;
1259
-
1260
- memset(ops, 0, sizeof(ops));
1261
-
1262
- /* called once initial metadata has been read by the call, but BEFORE
1263
- the ioreq to fetch it out of the call has been executed.
1264
- This means metadata related fields can be relied on in calld, but to
1265
- fill in the metadata array passed by the client, we need to perform
1266
- an ioreq op, that should complete immediately. */
1267
-
1268
- grpc_call_set_completion_queue(exec_ctx, calld->call, rc->cq_bound_to_call);
1269
- grpc_closure_init(&rc->publish, publish_registered_or_batch, rc);
1270
- *rc->call = calld->call;
1271
- calld->cq_new = rc->cq_for_notification;
1272
- GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, calld->initial_metadata);
1273
- switch (rc->type) {
1274
- case BATCH_CALL:
1275
- GPR_ASSERT(calld->host != NULL);
1276
- GPR_ASSERT(calld->path != NULL);
1277
- cpstr(&rc->data.batch.details->host,
1278
- &rc->data.batch.details->host_capacity, calld->host);
1279
- cpstr(&rc->data.batch.details->method,
1280
- &rc->data.batch.details->method_capacity, calld->path);
1281
- rc->data.batch.details->deadline = calld->deadline;
1282
- break;
1283
- case REGISTERED_CALL:
1284
- *rc->data.registered.deadline = calld->deadline;
1285
- if (rc->data.registered.optional_payload) {
1286
- op->op = GRPC_OP_RECV_MESSAGE;
1287
- op->data.recv_message = rc->data.registered.optional_payload;
1288
- op++;
1289
- }
1290
- break;
1291
- default:
1292
- GPR_UNREACHABLE_CODE(return );
1293
- }
1294
-
1295
- GRPC_CALL_INTERNAL_REF(calld->call, "server");
1296
- grpc_call_start_batch_and_execute(exec_ctx, calld->call, ops,
1297
- (size_t)(op - ops), &rc->publish);
1298
- }
1299
-
1300
- static void done_request_event(grpc_exec_ctx *exec_ctx, void *req,
1301
- grpc_cq_completion *c) {
1302
- requested_call *rc = req;
1303
- grpc_server *server = rc->server;
1304
-
1305
- if (rc >= server->requested_calls &&
1306
- rc < server->requested_calls + server->max_requested_calls) {
1307
- GPR_ASSERT(rc - server->requested_calls <= INT_MAX);
1308
- gpr_stack_lockfree_push(server->request_freelist,
1309
- (int)(rc - server->requested_calls));
1310
- } else {
1311
- gpr_free(req);
1312
- }
1313
-
1314
- server_unref(exec_ctx, server);
1315
- }
1316
-
1317
1356
  static void fail_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
1318
1357
  requested_call *rc) {
1319
1358
  *rc->call = NULL;
@@ -1324,20 +1363,6 @@ static void fail_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
1324
1363
  done_request_event, rc, &rc->completion);
1325
1364
  }
1326
1365
 
1327
- static void publish_registered_or_batch(grpc_exec_ctx *exec_ctx, void *prc,
1328
- bool success) {
1329
- requested_call *rc = prc;
1330
- grpc_call *call = *rc->call;
1331
- grpc_call_element *elem =
1332
- grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
1333
- call_data *calld = elem->call_data;
1334
- channel_data *chand = elem->channel_data;
1335
- server_ref(chand->server);
1336
- grpc_cq_end_op(exec_ctx, calld->cq_new, rc->tag, success, done_request_event,
1337
- rc, &rc->completion);
1338
- GRPC_CALL_INTERNAL_UNREF(exec_ctx, call, "server");
1339
- }
1340
-
1341
1366
  const grpc_channel_args *grpc_server_get_channel_args(grpc_server *server) {
1342
1367
  return server->channel_args;
1343
1368
  }