grpc 0.14.1 → 0.15.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 (277) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1398 -817
  3. data/include/grpc/compression.h +2 -1
  4. data/include/grpc/grpc.h +10 -1
  5. data/include/grpc/grpc_cronet.h +51 -0
  6. data/include/grpc/grpc_posix.h +70 -0
  7. data/include/grpc/impl/codegen/atm.h +2 -2
  8. data/include/grpc/impl/codegen/{atm_win32.h → atm_windows.h} +3 -3
  9. data/include/grpc/impl/codegen/compression_types.h +39 -5
  10. data/include/grpc/impl/codegen/connectivity_state.h +1 -1
  11. data/include/grpc/impl/codegen/grpc_types.h +10 -0
  12. data/include/grpc/impl/codegen/log.h +2 -1
  13. data/include/grpc/impl/codegen/port_platform.h +30 -12
  14. data/include/grpc/impl/codegen/slice_buffer.h +2 -3
  15. data/include/grpc/impl/codegen/sync.h +2 -2
  16. data/include/grpc/impl/codegen/{sync_win32.h → sync_windows.h} +3 -3
  17. data/include/grpc/support/{sync_win32.h → atm_windows.h} +4 -4
  18. data/include/grpc/support/avl.h +5 -0
  19. data/include/grpc/support/{log_win32.h → log_windows.h} +3 -3
  20. data/include/grpc/support/string_util.h +2 -1
  21. data/include/grpc/support/{atm_win32.h → sync_windows.h} +4 -4
  22. data/src/core/ext/census/gen/census.pb.c +179 -0
  23. data/src/core/ext/census/gen/census.pb.h +294 -0
  24. data/src/core/ext/census/grpc_filter.c +11 -7
  25. data/src/core/ext/client_config/channel_connectivity.c +28 -14
  26. data/src/core/ext/client_config/client_channel.c +77 -53
  27. data/src/core/ext/client_config/connector.h +1 -1
  28. data/src/core/ext/client_config/lb_policy.c +9 -6
  29. data/src/core/ext/client_config/lb_policy.h +9 -5
  30. data/src/core/ext/client_config/subchannel.c +58 -39
  31. data/src/core/ext/client_config/subchannel.h +3 -2
  32. data/src/core/ext/client_config/subchannel_call_holder.c +34 -19
  33. data/src/core/ext/client_config/subchannel_call_holder.h +2 -1
  34. data/src/core/ext/client_config/subchannel_index.c +20 -9
  35. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +7 -7
  36. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +5 -5
  37. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/{v0 → v1}/load_balancer.pb.c +29 -30
  38. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +178 -0
  39. data/src/core/ext/lb_policy/pick_first/pick_first.c +65 -45
  40. data/src/core/ext/lb_policy/round_robin/round_robin.c +84 -43
  41. data/src/core/ext/load_reporting/load_reporting.c +133 -0
  42. data/src/core/ext/load_reporting/load_reporting.h +75 -0
  43. data/src/core/ext/load_reporting/load_reporting_filter.c +151 -0
  44. data/src/core/ext/load_reporting/load_reporting_filter.h +41 -0
  45. data/src/core/ext/resolver/dns/native/dns_resolver.c +22 -8
  46. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +2 -2
  47. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +4 -4
  48. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +95 -0
  49. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +14 -18
  50. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +49 -24
  51. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +82 -0
  52. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +104 -60
  53. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +232 -0
  54. data/src/{ruby/ext/grpc/rb_signal.c → core/ext/transport/chttp2/transport/bin_decoder.h} +27 -31
  55. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +481 -260
  56. data/src/core/ext/transport/chttp2/transport/frame.h +1 -7
  57. data/src/core/ext/transport/chttp2/transport/frame_data.c +44 -27
  58. data/src/core/ext/transport/chttp2/transport/frame_data.h +6 -5
  59. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +23 -17
  60. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -2
  61. data/src/core/ext/transport/chttp2/transport/frame_ping.c +12 -7
  62. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -3
  63. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +25 -12
  64. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -2
  65. data/src/core/ext/transport/chttp2/transport/frame_settings.c +23 -21
  66. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -2
  67. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -9
  68. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -2
  69. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +365 -287
  70. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -6
  71. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -20
  72. data/src/core/ext/transport/chttp2/transport/hpack_table.h +5 -4
  73. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +1 -0
  74. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -0
  75. data/src/core/ext/transport/chttp2/transport/internal.h +34 -32
  76. data/src/core/ext/transport/chttp2/transport/parsing.c +296 -212
  77. data/src/core/ext/transport/chttp2/transport/writing.c +12 -9
  78. data/src/core/lib/channel/channel_args.c +26 -12
  79. data/src/core/lib/channel/channel_args.h +1 -1
  80. data/src/core/lib/channel/channel_stack.c +12 -8
  81. data/src/core/lib/channel/channel_stack.h +27 -11
  82. data/src/core/lib/channel/channel_stack_builder.c +2 -2
  83. data/src/core/lib/channel/compress_filter.c +26 -31
  84. data/src/core/lib/channel/compress_filter.h +4 -4
  85. data/src/core/lib/channel/connected_channel.c +7 -5
  86. data/src/core/lib/channel/http_client_filter.c +34 -8
  87. data/src/core/lib/channel/http_client_filter.h +1 -1
  88. data/src/core/lib/channel/http_server_filter.c +21 -12
  89. data/src/core/lib/compression/{compression_algorithm.c → compression.c} +22 -21
  90. data/src/core/lib/http/httpcli.c +81 -59
  91. data/src/core/lib/http/httpcli.h +11 -15
  92. data/src/core/lib/http/httpcli_security_connector.c +5 -3
  93. data/src/core/lib/http/parser.c +127 -118
  94. data/src/core/lib/http/parser.h +11 -6
  95. data/src/core/lib/iomgr/closure.c +20 -16
  96. data/src/core/lib/iomgr/closure.h +19 -15
  97. data/src/core/lib/iomgr/endpoint.h +1 -1
  98. data/src/core/lib/iomgr/endpoint_pair_posix.c +2 -2
  99. data/src/core/lib/iomgr/error.c +535 -0
  100. data/src/core/lib/iomgr/error.h +192 -0
  101. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +190 -83
  102. data/src/core/lib/iomgr/ev_poll_posix.c +1267 -0
  103. data/src/{ruby/ext/grpc/rb_signal.h → core/lib/iomgr/ev_poll_posix.h} +7 -5
  104. data/src/core/lib/iomgr/ev_posix.c +104 -14
  105. data/src/core/lib/iomgr/ev_posix.h +17 -7
  106. data/src/core/lib/iomgr/exec_ctx.c +25 -7
  107. data/src/core/lib/iomgr/exec_ctx.h +27 -8
  108. data/src/core/lib/iomgr/executor.c +2 -2
  109. data/src/core/lib/iomgr/executor.h +1 -1
  110. data/src/core/lib/iomgr/iocp_windows.c +2 -41
  111. data/src/core/lib/iomgr/iocp_windows.h +0 -8
  112. data/src/core/lib/iomgr/iomgr.c +5 -4
  113. data/src/core/lib/iomgr/iomgr_posix.c +5 -1
  114. data/src/core/lib/iomgr/iomgr_windows.c +1 -1
  115. data/src/core/lib/{support → iomgr}/load_file.c +15 -17
  116. data/src/core/lib/{support → iomgr}/load_file.h +8 -7
  117. data/src/core/lib/iomgr/polling_entity.c +104 -0
  118. data/src/core/lib/iomgr/polling_entity.h +81 -0
  119. data/src/core/lib/iomgr/pollset.h +6 -5
  120. data/src/core/lib/iomgr/pollset_set_windows.c +4 -1
  121. data/src/core/lib/iomgr/pollset_windows.c +10 -6
  122. data/src/core/lib/iomgr/resolve_address.h +5 -9
  123. data/src/core/lib/iomgr/resolve_address_posix.c +55 -38
  124. data/src/core/lib/iomgr/resolve_address_windows.c +51 -37
  125. data/src/core/lib/iomgr/sockaddr.h +2 -2
  126. data/src/core/lib/iomgr/{sockaddr_win32.h → sockaddr_windows.h} +3 -3
  127. data/src/core/lib/iomgr/socket_utils_common_posix.c +92 -45
  128. data/src/core/lib/iomgr/socket_utils_posix.h +19 -12
  129. data/src/core/lib/iomgr/socket_windows.c +61 -2
  130. data/src/core/lib/iomgr/socket_windows.h +13 -0
  131. data/src/core/lib/iomgr/tcp_client_posix.c +54 -39
  132. data/src/core/lib/iomgr/tcp_client_windows.c +34 -34
  133. data/src/core/lib/iomgr/tcp_posix.c +43 -39
  134. data/src/core/lib/iomgr/tcp_server.h +5 -3
  135. data/src/core/lib/iomgr/tcp_server_posix.c +103 -64
  136. data/src/core/lib/iomgr/tcp_server_windows.c +114 -101
  137. data/src/core/lib/iomgr/tcp_windows.c +45 -50
  138. data/src/core/lib/iomgr/tcp_windows.h +1 -1
  139. data/src/core/lib/iomgr/timer.c +26 -13
  140. data/src/core/lib/iomgr/udp_server.c +28 -4
  141. data/src/core/lib/iomgr/udp_server.h +5 -1
  142. data/src/core/lib/iomgr/unix_sockets_posix.c +8 -7
  143. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -1
  144. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -2
  145. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +15 -5
  146. data/src/core/lib/iomgr/wakeup_fd_pipe.c +13 -9
  147. data/src/core/lib/iomgr/wakeup_fd_posix.c +6 -6
  148. data/src/core/lib/iomgr/wakeup_fd_posix.h +9 -6
  149. data/src/core/lib/iomgr/workqueue.h +5 -4
  150. data/src/core/lib/iomgr/workqueue_posix.c +40 -26
  151. data/src/core/lib/iomgr/workqueue_windows.c +2 -2
  152. data/src/core/lib/profiling/basic_timers.c +2 -2
  153. data/src/core/lib/security/{security_context.c → context/security_context.c} +1 -1
  154. data/src/core/lib/security/{security_context.h → context/security_context.h} +4 -4
  155. data/src/core/lib/security/credentials/composite/composite_credentials.c +263 -0
  156. data/src/core/lib/security/credentials/composite/composite_credentials.h +72 -0
  157. data/src/core/lib/security/credentials/credentials.c +233 -0
  158. data/src/core/lib/security/{credentials.h → credentials/credentials.h} +19 -157
  159. data/src/core/lib/security/{credentials_metadata.c → credentials/credentials_metadata.c} +1 -1
  160. data/src/core/lib/security/credentials/fake/fake_credentials.c +139 -0
  161. data/src/core/lib/security/credentials/fake/fake_credentials.h +56 -0
  162. data/src/core/lib/security/{credentials_posix.c → credentials/google_default/credentials_posix.c} +1 -1
  163. data/src/core/lib/security/{credentials_win32.c → credentials/google_default/credentials_windows.c} +3 -3
  164. data/src/core/lib/security/{google_default_credentials.c → credentials/google_default/google_default_credentials.c} +93 -35
  165. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +46 -0
  166. data/src/core/lib/security/credentials/iam/iam_credentials.c +85 -0
  167. data/src/core/lib/security/credentials/iam/iam_credentials.h +44 -0
  168. data/src/core/lib/security/{json_token.c → credentials/jwt/json_token.c} +10 -101
  169. data/src/core/lib/security/{json_token.h → credentials/jwt/json_token.h} +3 -33
  170. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +160 -0
  171. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +62 -0
  172. data/src/core/lib/security/{jwt_verifier.c → credentials/jwt/jwt_verifier.c} +35 -15
  173. data/src/core/lib/security/{jwt_verifier.h → credentials/jwt/jwt_verifier.h} +3 -3
  174. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +433 -0
  175. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +109 -0
  176. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +129 -0
  177. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +45 -0
  178. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +240 -0
  179. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +48 -0
  180. data/src/core/lib/security/{auth_filters.h → transport/auth_filters.h} +3 -3
  181. data/src/core/lib/security/{client_auth_filter.c → transport/client_auth_filter.c} +27 -20
  182. data/src/core/lib/security/{handshake.c → transport/handshake.c} +77 -45
  183. data/src/core/lib/security/{handshake.h → transport/handshake.h} +9 -11
  184. data/src/core/lib/security/{secure_endpoint.c → transport/secure_endpoint.c} +19 -12
  185. data/src/core/lib/security/{secure_endpoint.h → transport/secure_endpoint.h} +3 -3
  186. data/src/core/lib/security/{security_connector.c → transport/security_connector.c} +26 -17
  187. data/src/core/lib/security/{security_connector.h → transport/security_connector.h} +8 -8
  188. data/src/core/lib/security/{server_auth_filter.c → transport/server_auth_filter.c} +24 -16
  189. data/src/core/lib/security/transport/tsi_error.c +40 -0
  190. data/src/core/lib/security/transport/tsi_error.h +42 -0
  191. data/src/core/lib/security/{b64.c → util/b64.c} +1 -1
  192. data/src/core/lib/security/{b64.h → util/b64.h} +3 -3
  193. data/src/core/lib/security/util/json_util.c +61 -0
  194. data/src/core/lib/security/util/json_util.h +55 -0
  195. data/src/core/lib/support/avl.c +11 -0
  196. data/src/core/lib/support/cpu_windows.c +2 -2
  197. data/src/core/lib/support/{env_win32.c → env_windows.c} +3 -3
  198. data/src/core/lib/support/log.c +3 -1
  199. data/src/core/lib/support/log_linux.c +2 -2
  200. data/src/core/lib/support/{log_win32.c → log_windows.c} +4 -4
  201. data/src/core/lib/support/murmur_hash.c +3 -5
  202. data/src/core/lib/support/string.c +10 -0
  203. data/src/core/lib/support/string.h +4 -0
  204. data/src/core/lib/support/{string_util_win32.c → string_util_windows.c} +3 -3
  205. data/src/core/lib/support/{string_win32.c → string_windows.c} +2 -2
  206. data/src/core/lib/support/{string_win32.h → string_windows.h} +5 -5
  207. data/src/core/lib/support/subprocess_windows.c +1 -1
  208. data/src/core/lib/support/{sync_win32.c → sync_windows.c} +2 -2
  209. data/src/core/lib/support/{thd_win32.c → thd_windows.c} +2 -2
  210. data/src/core/lib/support/{time_win32.c → time_windows.c} +2 -2
  211. data/src/core/lib/support/tmpfile_msys.c +1 -1
  212. data/src/core/lib/support/{tmpfile_win32.c → tmpfile_windows.c} +3 -3
  213. data/src/core/lib/surface/alarm.c +2 -2
  214. data/src/core/lib/surface/byte_buffer_reader.c +13 -6
  215. data/src/core/lib/surface/call.c +323 -123
  216. data/src/core/lib/surface/call.h +2 -0
  217. data/src/core/lib/surface/call_log_batch.c +1 -1
  218. data/src/core/lib/surface/channel.c +64 -15
  219. data/src/core/lib/surface/channel.h +9 -0
  220. data/src/core/lib/surface/channel_ping.c +3 -3
  221. data/src/core/lib/surface/completion_queue.c +75 -19
  222. data/src/core/lib/surface/completion_queue.h +7 -2
  223. data/src/core/lib/surface/init.c +2 -1
  224. data/src/core/lib/surface/init_secure.c +4 -4
  225. data/src/core/lib/surface/lame_client.c +12 -8
  226. data/src/core/lib/surface/server.c +213 -120
  227. data/src/core/lib/surface/server.h +1 -0
  228. data/src/core/lib/surface/version.c +1 -1
  229. data/src/core/lib/transport/connectivity_state.c +40 -18
  230. data/src/core/lib/transport/connectivity_state.h +4 -1
  231. data/src/core/lib/transport/metadata.c +23 -23
  232. data/src/core/lib/transport/metadata.h +4 -0
  233. data/src/core/lib/transport/metadata_batch.c +9 -0
  234. data/src/core/lib/transport/metadata_batch.h +3 -0
  235. data/src/core/lib/transport/static_metadata.c +6 -5
  236. data/src/core/lib/transport/static_metadata.h +64 -60
  237. data/src/core/lib/transport/transport.c +24 -12
  238. data/src/core/lib/transport/transport.h +6 -5
  239. data/src/core/lib/transport/transport_impl.h +4 -0
  240. data/src/core/lib/transport/transport_op_string.c +2 -2
  241. data/src/core/plugin_registry/grpc_plugin_registry.c +4 -0
  242. data/src/ruby/bin/math_services.rb +41 -2
  243. data/src/ruby/ext/grpc/rb_call.c +42 -40
  244. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  245. data/src/ruby/ext/grpc/rb_completion_queue.c +59 -6
  246. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -1
  247. data/src/ruby/ext/grpc/rb_grpc.c +1 -3
  248. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -2
  249. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +21 -5
  250. data/src/ruby/ext/grpc/rb_loader.c +1 -1
  251. data/src/ruby/ext/grpc/rb_server.c +5 -3
  252. data/src/ruby/lib/grpc.rb +0 -3
  253. data/src/ruby/lib/grpc/errors.rb +3 -2
  254. data/src/ruby/lib/grpc/generic/active_call.rb +32 -42
  255. data/src/ruby/lib/grpc/generic/bidi_call.rb +20 -0
  256. data/src/ruby/lib/grpc/generic/client_stub.rb +31 -54
  257. data/src/ruby/lib/grpc/generic/rpc_desc.rb +4 -4
  258. data/src/ruby/lib/grpc/generic/rpc_server.rb +12 -23
  259. data/src/ruby/lib/grpc/generic/service.rb +8 -8
  260. data/src/ruby/lib/grpc/version.rb +1 -1
  261. data/src/ruby/pb/grpc/health/v1/health_services.rb +30 -2
  262. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +34 -4
  263. data/src/ruby/pb/grpc/testing/metrics_services.rb +39 -2
  264. data/src/ruby/pb/src/proto/grpc/testing/empty.rb +15 -0
  265. data/src/ruby/pb/src/proto/grpc/testing/messages.rb +84 -0
  266. data/src/ruby/pb/src/proto/grpc/testing/test.rb +14 -0
  267. data/src/ruby/pb/src/proto/grpc/testing/test_services.rb +110 -0
  268. data/src/ruby/pb/test/client.rb +5 -2
  269. data/src/ruby/spec/generic/active_call_spec.rb +3 -2
  270. data/src/ruby/spec/generic/client_stub_spec.rb +27 -24
  271. data/src/ruby/spec/generic/rpc_desc_spec.rb +11 -11
  272. data/src/ruby/spec/generic/rpc_server_spec.rb +42 -61
  273. data/src/ruby/spec/pb/health/checker_spec.rb +3 -5
  274. metadata +86 -48
  275. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h +0 -182
  276. data/src/core/lib/security/credentials.c +0 -1296
  277. data/src/ruby/lib/grpc/signals.rb +0 -69
@@ -0,0 +1,233 @@
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/security/credentials/credentials.h"
35
+
36
+ #include <stdio.h>
37
+ #include <string.h>
38
+
39
+ #include "src/core/lib/channel/channel_args.h"
40
+ #include "src/core/lib/channel/http_client_filter.h"
41
+ #include "src/core/lib/http/httpcli.h"
42
+ #include "src/core/lib/http/parser.h"
43
+ #include "src/core/lib/iomgr/executor.h"
44
+ #include "src/core/lib/json/json.h"
45
+ #include "src/core/lib/support/string.h"
46
+ #include "src/core/lib/surface/api_trace.h"
47
+
48
+ #include <grpc/support/alloc.h>
49
+ #include <grpc/support/log.h>
50
+ #include <grpc/support/string_util.h>
51
+ #include <grpc/support/sync.h>
52
+ #include <grpc/support/time.h>
53
+
54
+ /* -- Common. -- */
55
+
56
+ grpc_credentials_metadata_request *grpc_credentials_metadata_request_create(
57
+ grpc_call_credentials *creds, grpc_credentials_metadata_cb cb,
58
+ void *user_data) {
59
+ grpc_credentials_metadata_request *r =
60
+ gpr_malloc(sizeof(grpc_credentials_metadata_request));
61
+ memset(&r->response, 0, sizeof(r->response));
62
+ r->creds = grpc_call_credentials_ref(creds);
63
+ r->cb = cb;
64
+ r->user_data = user_data;
65
+ return r;
66
+ }
67
+
68
+ void grpc_credentials_metadata_request_destroy(
69
+ grpc_credentials_metadata_request *r) {
70
+ grpc_call_credentials_unref(r->creds);
71
+ grpc_http_response_destroy(&r->response);
72
+ gpr_free(r);
73
+ }
74
+
75
+ grpc_channel_credentials *grpc_channel_credentials_ref(
76
+ grpc_channel_credentials *creds) {
77
+ if (creds == NULL) return NULL;
78
+ gpr_ref(&creds->refcount);
79
+ return creds;
80
+ }
81
+
82
+ void grpc_channel_credentials_unref(grpc_channel_credentials *creds) {
83
+ if (creds == NULL) return;
84
+ if (gpr_unref(&creds->refcount)) {
85
+ if (creds->vtable->destruct != NULL) creds->vtable->destruct(creds);
86
+ gpr_free(creds);
87
+ }
88
+ }
89
+
90
+ void grpc_channel_credentials_release(grpc_channel_credentials *creds) {
91
+ GRPC_API_TRACE("grpc_channel_credentials_release(creds=%p)", 1, (creds));
92
+ grpc_channel_credentials_unref(creds);
93
+ }
94
+
95
+ grpc_call_credentials *grpc_call_credentials_ref(grpc_call_credentials *creds) {
96
+ if (creds == NULL) return NULL;
97
+ gpr_ref(&creds->refcount);
98
+ return creds;
99
+ }
100
+
101
+ void grpc_call_credentials_unref(grpc_call_credentials *creds) {
102
+ if (creds == NULL) return;
103
+ if (gpr_unref(&creds->refcount)) {
104
+ if (creds->vtable->destruct != NULL) creds->vtable->destruct(creds);
105
+ gpr_free(creds);
106
+ }
107
+ }
108
+
109
+ void grpc_call_credentials_release(grpc_call_credentials *creds) {
110
+ GRPC_API_TRACE("grpc_call_credentials_release(creds=%p)", 1, (creds));
111
+ grpc_call_credentials_unref(creds);
112
+ }
113
+
114
+ void grpc_call_credentials_get_request_metadata(
115
+ grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds,
116
+ grpc_polling_entity *pollent, grpc_auth_metadata_context context,
117
+ grpc_credentials_metadata_cb cb, void *user_data) {
118
+ if (creds == NULL || creds->vtable->get_request_metadata == NULL) {
119
+ if (cb != NULL) {
120
+ cb(exec_ctx, user_data, NULL, 0, GRPC_CREDENTIALS_OK);
121
+ }
122
+ return;
123
+ }
124
+ creds->vtable->get_request_metadata(exec_ctx, creds, pollent, context, cb,
125
+ user_data);
126
+ }
127
+
128
+ grpc_security_status grpc_channel_credentials_create_security_connector(
129
+ grpc_channel_credentials *channel_creds, const char *target,
130
+ const grpc_channel_args *args, grpc_channel_security_connector **sc,
131
+ grpc_channel_args **new_args) {
132
+ *new_args = NULL;
133
+ if (channel_creds == NULL) {
134
+ return GRPC_SECURITY_ERROR;
135
+ }
136
+ GPR_ASSERT(channel_creds->vtable->create_security_connector != NULL);
137
+ return channel_creds->vtable->create_security_connector(
138
+ channel_creds, NULL, target, args, sc, new_args);
139
+ }
140
+
141
+ grpc_server_credentials *grpc_server_credentials_ref(
142
+ grpc_server_credentials *creds) {
143
+ if (creds == NULL) return NULL;
144
+ gpr_ref(&creds->refcount);
145
+ return creds;
146
+ }
147
+
148
+ void grpc_server_credentials_unref(grpc_server_credentials *creds) {
149
+ if (creds == NULL) return;
150
+ if (gpr_unref(&creds->refcount)) {
151
+ if (creds->vtable->destruct != NULL) creds->vtable->destruct(creds);
152
+ if (creds->processor.destroy != NULL && creds->processor.state != NULL) {
153
+ creds->processor.destroy(creds->processor.state);
154
+ }
155
+ gpr_free(creds);
156
+ }
157
+ }
158
+
159
+ void grpc_server_credentials_release(grpc_server_credentials *creds) {
160
+ GRPC_API_TRACE("grpc_server_credentials_release(creds=%p)", 1, (creds));
161
+ grpc_server_credentials_unref(creds);
162
+ }
163
+
164
+ grpc_security_status grpc_server_credentials_create_security_connector(
165
+ grpc_server_credentials *creds, grpc_server_security_connector **sc) {
166
+ if (creds == NULL || creds->vtable->create_security_connector == NULL) {
167
+ gpr_log(GPR_ERROR, "Server credentials cannot create security context.");
168
+ return GRPC_SECURITY_ERROR;
169
+ }
170
+ return creds->vtable->create_security_connector(creds, sc);
171
+ }
172
+
173
+ void grpc_server_credentials_set_auth_metadata_processor(
174
+ grpc_server_credentials *creds, grpc_auth_metadata_processor processor) {
175
+ GRPC_API_TRACE(
176
+ "grpc_server_credentials_set_auth_metadata_processor("
177
+ "creds=%p, "
178
+ "processor=grpc_auth_metadata_processor { process: %p, state: %p })",
179
+ 3, (creds, (void *)(intptr_t)processor.process, processor.state));
180
+ if (creds == NULL) return;
181
+ if (creds->processor.destroy != NULL && creds->processor.state != NULL) {
182
+ creds->processor.destroy(creds->processor.state);
183
+ }
184
+ creds->processor = processor;
185
+ }
186
+
187
+ static void server_credentials_pointer_arg_destroy(void *p) {
188
+ grpc_server_credentials_unref(p);
189
+ }
190
+
191
+ static void *server_credentials_pointer_arg_copy(void *p) {
192
+ return grpc_server_credentials_ref(p);
193
+ }
194
+
195
+ static int server_credentials_pointer_cmp(void *a, void *b) {
196
+ return GPR_ICMP(a, b);
197
+ }
198
+
199
+ static const grpc_arg_pointer_vtable cred_ptr_vtable = {
200
+ server_credentials_pointer_arg_copy, server_credentials_pointer_arg_destroy,
201
+ server_credentials_pointer_cmp};
202
+
203
+ grpc_arg grpc_server_credentials_to_arg(grpc_server_credentials *p) {
204
+ grpc_arg arg;
205
+ memset(&arg, 0, sizeof(grpc_arg));
206
+ arg.type = GRPC_ARG_POINTER;
207
+ arg.key = GRPC_SERVER_CREDENTIALS_ARG;
208
+ arg.value.pointer.p = p;
209
+ arg.value.pointer.vtable = &cred_ptr_vtable;
210
+ return arg;
211
+ }
212
+
213
+ grpc_server_credentials *grpc_server_credentials_from_arg(const grpc_arg *arg) {
214
+ if (strcmp(arg->key, GRPC_SERVER_CREDENTIALS_ARG) != 0) return NULL;
215
+ if (arg->type != GRPC_ARG_POINTER) {
216
+ gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type,
217
+ GRPC_SERVER_CREDENTIALS_ARG);
218
+ return NULL;
219
+ }
220
+ return arg->value.pointer.p;
221
+ }
222
+
223
+ grpc_server_credentials *grpc_find_server_credentials_in_args(
224
+ const grpc_channel_args *args) {
225
+ size_t i;
226
+ if (args == NULL) return NULL;
227
+ for (i = 0; i < args->num_args; i++) {
228
+ grpc_server_credentials *p =
229
+ grpc_server_credentials_from_arg(&args->args[i]);
230
+ if (p != NULL) return p;
231
+ }
232
+ return NULL;
233
+ }
@@ -31,8 +31,8 @@
31
31
  *
32
32
  */
33
33
 
34
- #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_H
35
- #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_H
34
+ #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_CREDENTIALS_H
35
+ #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_CREDENTIALS_H
36
36
 
37
37
  #include <grpc/grpc.h>
38
38
  #include <grpc/grpc_security.h>
@@ -41,8 +41,8 @@
41
41
 
42
42
  #include "src/core/lib/http/httpcli.h"
43
43
  #include "src/core/lib/http/parser.h"
44
- #include "src/core/lib/security/json_token.h"
45
- #include "src/core/lib/security/security_connector.h"
44
+ #include "src/core/lib/iomgr/polling_entity.h"
45
+ #include "src/core/lib/security/transport/security_connector.h"
46
46
 
47
47
  struct grpc_http_response;
48
48
 
@@ -69,10 +69,6 @@ typedef enum {
69
69
  "x-goog-iam-authorization-token"
70
70
  #define GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY "x-goog-iam-authority-selector"
71
71
 
72
- #define GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY "gcloud"
73
- #define GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE \
74
- "application_default_credentials.json"
75
-
76
72
  #define GRPC_SECURE_TOKEN_REFRESH_THRESHOLD_SECS 60
77
73
 
78
74
  #define GRPC_COMPUTE_ENGINE_METADATA_HOST "metadata"
@@ -169,7 +165,8 @@ typedef void (*grpc_credentials_metadata_cb)(grpc_exec_ctx *exec_ctx,
169
165
  typedef struct {
170
166
  void (*destruct)(grpc_call_credentials *c);
171
167
  void (*get_request_metadata)(grpc_exec_ctx *exec_ctx,
172
- grpc_call_credentials *c, grpc_pollset *pollset,
168
+ grpc_call_credentials *c,
169
+ grpc_polling_entity *pollent,
173
170
  grpc_auth_metadata_context context,
174
171
  grpc_credentials_metadata_cb cb,
175
172
  void *user_data);
@@ -185,51 +182,14 @@ grpc_call_credentials *grpc_call_credentials_ref(grpc_call_credentials *creds);
185
182
  void grpc_call_credentials_unref(grpc_call_credentials *creds);
186
183
  void grpc_call_credentials_get_request_metadata(
187
184
  grpc_exec_ctx *exec_ctx, grpc_call_credentials *creds,
188
- grpc_pollset *pollset, grpc_auth_metadata_context context,
185
+ grpc_polling_entity *pollent, grpc_auth_metadata_context context,
189
186
  grpc_credentials_metadata_cb cb, void *user_data);
190
187
 
191
- typedef struct {
192
- grpc_call_credentials **creds_array;
193
- size_t num_creds;
194
- } grpc_call_credentials_array;
195
-
196
- const grpc_call_credentials_array *
197
- grpc_composite_call_credentials_get_credentials(
198
- grpc_call_credentials *composite_creds);
199
-
200
- /* Returns creds if creds is of the specified type or the inner creds of the
201
- specified type (if found), if the creds is of type COMPOSITE.
202
- If composite_creds is not NULL, *composite_creds will point to creds if of
203
- type COMPOSITE in case of success. */
204
- grpc_call_credentials *grpc_credentials_contains_type(
205
- grpc_call_credentials *creds, const char *type,
206
- grpc_call_credentials **composite_creds);
207
-
208
- /* Exposed for testing only. */
209
- grpc_credentials_status
210
- grpc_oauth2_token_fetcher_credentials_parse_server_response(
211
- const struct grpc_http_response *response,
212
- grpc_credentials_md_store **token_md, gpr_timespec *token_lifetime);
213
-
214
- void grpc_flush_cached_google_default_credentials(void);
215
-
216
188
  /* Metadata-only credentials with the specified key and value where
217
189
  asynchronicity can be simulated for testing. */
218
190
  grpc_call_credentials *grpc_md_only_test_credentials_create(
219
191
  const char *md_key, const char *md_value, int is_async);
220
192
 
221
- /* Private constructor for jwt credentials from an already parsed json key.
222
- Takes ownership of the key. */
223
- grpc_call_credentials *
224
- grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
225
- grpc_auth_json_key key, gpr_timespec token_lifetime);
226
-
227
- /* Private constructor for refresh token credentials from an already parsed
228
- refresh token. Takes ownership of the refresh token. */
229
- grpc_call_credentials *
230
- grpc_refresh_token_credentials_create_from_auth_refresh_token(
231
- grpc_auth_refresh_token token);
232
-
233
193
  /* --- grpc_server_credentials. --- */
234
194
 
235
195
  typedef struct {
@@ -260,118 +220,20 @@ grpc_server_credentials *grpc_server_credentials_from_arg(const grpc_arg *arg);
260
220
  grpc_server_credentials *grpc_find_server_credentials_in_args(
261
221
  const grpc_channel_args *args);
262
222
 
263
- /* -- Fake transport security credentials. -- */
264
-
265
- /* Creates a fake transport security credentials object for testing. */
266
- grpc_channel_credentials *grpc_fake_transport_security_credentials_create(void);
267
- /* Creates a fake server transport security credentials object for testing. */
268
- grpc_server_credentials *grpc_fake_transport_security_server_credentials_create(
269
- void);
270
-
271
- /* -- Ssl credentials. -- */
272
-
273
- typedef struct {
274
- grpc_channel_credentials base;
275
- grpc_ssl_config config;
276
- } grpc_ssl_credentials;
277
-
278
- typedef struct {
279
- grpc_server_credentials base;
280
- grpc_ssl_server_config config;
281
- } grpc_ssl_server_credentials;
282
-
283
- /* -- Channel composite credentials. -- */
284
-
285
- typedef struct {
286
- grpc_channel_credentials base;
287
- grpc_channel_credentials *inner_creds;
288
- grpc_call_credentials *call_creds;
289
- } grpc_composite_channel_credentials;
290
-
291
- /* -- Jwt credentials -- */
223
+ /* -- Credentials Metadata Request. -- */
292
224
 
293
225
  typedef struct {
294
- grpc_call_credentials base;
295
-
296
- /* Have a simple cache for now with just 1 entry. We could have a map based on
297
- the service_url for a more sophisticated one. */
298
- gpr_mu cache_mu;
299
- struct {
300
- grpc_credentials_md_store *jwt_md;
301
- char *service_url;
302
- gpr_timespec jwt_expiration;
303
- } cached;
304
-
305
- grpc_auth_json_key key;
306
- gpr_timespec jwt_lifetime;
307
- } grpc_service_account_jwt_access_credentials;
308
-
309
- /* -- Oauth2TokenFetcher credentials --
310
-
311
- This object is a base for credentials that need to acquire an oauth2 token
312
- from an http service. */
313
-
314
- typedef struct grpc_credentials_metadata_request
315
- grpc_credentials_metadata_request;
226
+ grpc_call_credentials *creds;
227
+ grpc_credentials_metadata_cb cb;
228
+ grpc_http_response response;
229
+ void *user_data;
230
+ } grpc_credentials_metadata_request;
316
231
 
317
- typedef void (*grpc_fetch_oauth2_func)(grpc_exec_ctx *exec_ctx,
318
- grpc_credentials_metadata_request *req,
319
- grpc_httpcli_context *http_context,
320
- grpc_pollset *pollset,
321
- grpc_httpcli_response_cb response_cb,
322
- gpr_timespec deadline);
232
+ grpc_credentials_metadata_request *grpc_credentials_metadata_request_create(
233
+ grpc_call_credentials *creds, grpc_credentials_metadata_cb cb,
234
+ void *user_data);
323
235
 
324
- typedef struct {
325
- grpc_call_credentials base;
326
- gpr_mu mu;
327
- grpc_credentials_md_store *access_token_md;
328
- gpr_timespec token_expiration;
329
- grpc_httpcli_context httpcli_context;
330
- grpc_fetch_oauth2_func fetch_func;
331
- } grpc_oauth2_token_fetcher_credentials;
332
-
333
- /* -- GoogleRefreshToken credentials. -- */
334
-
335
- typedef struct {
336
- grpc_oauth2_token_fetcher_credentials base;
337
- grpc_auth_refresh_token refresh_token;
338
- } grpc_google_refresh_token_credentials;
339
-
340
- /* -- Oauth2 Access Token credentials. -- */
341
-
342
- typedef struct {
343
- grpc_call_credentials base;
344
- grpc_credentials_md_store *access_token_md;
345
- } grpc_access_token_credentials;
346
-
347
- /* -- Metadata-only Test credentials. -- */
348
-
349
- typedef struct {
350
- grpc_call_credentials base;
351
- grpc_credentials_md_store *md_store;
352
- int is_async;
353
- } grpc_md_only_test_credentials;
354
-
355
- /* -- GoogleIAM credentials. -- */
356
-
357
- typedef struct {
358
- grpc_call_credentials base;
359
- grpc_credentials_md_store *iam_md;
360
- } grpc_google_iam_credentials;
361
-
362
- /* -- Composite credentials. -- */
363
-
364
- typedef struct {
365
- grpc_call_credentials base;
366
- grpc_call_credentials_array inner;
367
- } grpc_composite_call_credentials;
368
-
369
- /* -- Plugin credentials. -- */
370
-
371
- typedef struct {
372
- grpc_call_credentials base;
373
- grpc_metadata_credentials_plugin plugin;
374
- grpc_credentials_md_store *plugin_md;
375
- } grpc_plugin_credentials;
236
+ void grpc_credentials_metadata_request_destroy(
237
+ grpc_credentials_metadata_request *r);
376
238
 
377
- #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_H */
239
+ #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_CREDENTIALS_H */