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.
- checksums.yaml +4 -4
- data/Makefile +1398 -817
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +10 -1
- data/include/grpc/grpc_cronet.h +51 -0
- data/include/grpc/grpc_posix.h +70 -0
- data/include/grpc/impl/codegen/atm.h +2 -2
- data/include/grpc/impl/codegen/{atm_win32.h → atm_windows.h} +3 -3
- data/include/grpc/impl/codegen/compression_types.h +39 -5
- data/include/grpc/impl/codegen/connectivity_state.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +10 -0
- data/include/grpc/impl/codegen/log.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +30 -12
- data/include/grpc/impl/codegen/slice_buffer.h +2 -3
- data/include/grpc/impl/codegen/sync.h +2 -2
- data/include/grpc/impl/codegen/{sync_win32.h → sync_windows.h} +3 -3
- data/include/grpc/support/{sync_win32.h → atm_windows.h} +4 -4
- data/include/grpc/support/avl.h +5 -0
- data/include/grpc/support/{log_win32.h → log_windows.h} +3 -3
- data/include/grpc/support/string_util.h +2 -1
- data/include/grpc/support/{atm_win32.h → sync_windows.h} +4 -4
- data/src/core/ext/census/gen/census.pb.c +179 -0
- data/src/core/ext/census/gen/census.pb.h +294 -0
- data/src/core/ext/census/grpc_filter.c +11 -7
- data/src/core/ext/client_config/channel_connectivity.c +28 -14
- data/src/core/ext/client_config/client_channel.c +77 -53
- data/src/core/ext/client_config/connector.h +1 -1
- data/src/core/ext/client_config/lb_policy.c +9 -6
- data/src/core/ext/client_config/lb_policy.h +9 -5
- data/src/core/ext/client_config/subchannel.c +58 -39
- data/src/core/ext/client_config/subchannel.h +3 -2
- data/src/core/ext/client_config/subchannel_call_holder.c +34 -19
- data/src/core/ext/client_config/subchannel_call_holder.h +2 -1
- data/src/core/ext/client_config/subchannel_index.c +20 -9
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +7 -7
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +5 -5
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/{v0 → v1}/load_balancer.pb.c +29 -30
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +178 -0
- data/src/core/ext/lb_policy/pick_first/pick_first.c +65 -45
- data/src/core/ext/lb_policy/round_robin/round_robin.c +84 -43
- data/src/core/ext/load_reporting/load_reporting.c +133 -0
- data/src/core/ext/load_reporting/load_reporting.h +75 -0
- data/src/core/ext/load_reporting/load_reporting_filter.c +151 -0
- data/src/core/ext/load_reporting/load_reporting_filter.h +41 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +22 -8
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +4 -4
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +95 -0
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +14 -18
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +49 -24
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +82 -0
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +104 -60
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +232 -0
- data/src/{ruby/ext/grpc/rb_signal.c → core/ext/transport/chttp2/transport/bin_decoder.h} +27 -31
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +481 -260
- data/src/core/ext/transport/chttp2/transport/frame.h +1 -7
- data/src/core/ext/transport/chttp2/transport/frame_data.c +44 -27
- data/src/core/ext/transport/chttp2/transport/frame_data.h +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +23 -17
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +12 -7
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +25 -12
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +23 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -9
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +365 -287
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -6
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -20
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +5 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +1 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +34 -32
- data/src/core/ext/transport/chttp2/transport/parsing.c +296 -212
- data/src/core/ext/transport/chttp2/transport/writing.c +12 -9
- data/src/core/lib/channel/channel_args.c +26 -12
- data/src/core/lib/channel/channel_args.h +1 -1
- data/src/core/lib/channel/channel_stack.c +12 -8
- data/src/core/lib/channel/channel_stack.h +27 -11
- data/src/core/lib/channel/channel_stack_builder.c +2 -2
- data/src/core/lib/channel/compress_filter.c +26 -31
- data/src/core/lib/channel/compress_filter.h +4 -4
- data/src/core/lib/channel/connected_channel.c +7 -5
- data/src/core/lib/channel/http_client_filter.c +34 -8
- data/src/core/lib/channel/http_client_filter.h +1 -1
- data/src/core/lib/channel/http_server_filter.c +21 -12
- data/src/core/lib/compression/{compression_algorithm.c → compression.c} +22 -21
- data/src/core/lib/http/httpcli.c +81 -59
- data/src/core/lib/http/httpcli.h +11 -15
- data/src/core/lib/http/httpcli_security_connector.c +5 -3
- data/src/core/lib/http/parser.c +127 -118
- data/src/core/lib/http/parser.h +11 -6
- data/src/core/lib/iomgr/closure.c +20 -16
- data/src/core/lib/iomgr/closure.h +19 -15
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_pair_posix.c +2 -2
- data/src/core/lib/iomgr/error.c +535 -0
- data/src/core/lib/iomgr/error.h +192 -0
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +190 -83
- data/src/core/lib/iomgr/ev_poll_posix.c +1267 -0
- data/src/{ruby/ext/grpc/rb_signal.h → core/lib/iomgr/ev_poll_posix.h} +7 -5
- data/src/core/lib/iomgr/ev_posix.c +104 -14
- data/src/core/lib/iomgr/ev_posix.h +17 -7
- data/src/core/lib/iomgr/exec_ctx.c +25 -7
- data/src/core/lib/iomgr/exec_ctx.h +27 -8
- data/src/core/lib/iomgr/executor.c +2 -2
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/iocp_windows.c +2 -41
- data/src/core/lib/iomgr/iocp_windows.h +0 -8
- data/src/core/lib/iomgr/iomgr.c +5 -4
- data/src/core/lib/iomgr/iomgr_posix.c +5 -1
- data/src/core/lib/iomgr/iomgr_windows.c +1 -1
- data/src/core/lib/{support → iomgr}/load_file.c +15 -17
- data/src/core/lib/{support → iomgr}/load_file.h +8 -7
- data/src/core/lib/iomgr/polling_entity.c +104 -0
- data/src/core/lib/iomgr/polling_entity.h +81 -0
- data/src/core/lib/iomgr/pollset.h +6 -5
- data/src/core/lib/iomgr/pollset_set_windows.c +4 -1
- data/src/core/lib/iomgr/pollset_windows.c +10 -6
- data/src/core/lib/iomgr/resolve_address.h +5 -9
- data/src/core/lib/iomgr/resolve_address_posix.c +55 -38
- data/src/core/lib/iomgr/resolve_address_windows.c +51 -37
- data/src/core/lib/iomgr/sockaddr.h +2 -2
- data/src/core/lib/iomgr/{sockaddr_win32.h → sockaddr_windows.h} +3 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.c +92 -45
- data/src/core/lib/iomgr/socket_utils_posix.h +19 -12
- data/src/core/lib/iomgr/socket_windows.c +61 -2
- data/src/core/lib/iomgr/socket_windows.h +13 -0
- data/src/core/lib/iomgr/tcp_client_posix.c +54 -39
- data/src/core/lib/iomgr/tcp_client_windows.c +34 -34
- data/src/core/lib/iomgr/tcp_posix.c +43 -39
- data/src/core/lib/iomgr/tcp_server.h +5 -3
- data/src/core/lib/iomgr/tcp_server_posix.c +103 -64
- data/src/core/lib/iomgr/tcp_server_windows.c +114 -101
- data/src/core/lib/iomgr/tcp_windows.c +45 -50
- data/src/core/lib/iomgr/tcp_windows.h +1 -1
- data/src/core/lib/iomgr/timer.c +26 -13
- data/src/core/lib/iomgr/udp_server.c +28 -4
- data/src/core/lib/iomgr/udp_server.h +5 -1
- data/src/core/lib/iomgr/unix_sockets_posix.c +8 -7
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -2
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +15 -5
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +13 -9
- data/src/core/lib/iomgr/wakeup_fd_posix.c +6 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.h +9 -6
- data/src/core/lib/iomgr/workqueue.h +5 -4
- data/src/core/lib/iomgr/workqueue_posix.c +40 -26
- data/src/core/lib/iomgr/workqueue_windows.c +2 -2
- data/src/core/lib/profiling/basic_timers.c +2 -2
- data/src/core/lib/security/{security_context.c → context/security_context.c} +1 -1
- data/src/core/lib/security/{security_context.h → context/security_context.h} +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.c +263 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +72 -0
- data/src/core/lib/security/credentials/credentials.c +233 -0
- data/src/core/lib/security/{credentials.h → credentials/credentials.h} +19 -157
- data/src/core/lib/security/{credentials_metadata.c → credentials/credentials_metadata.c} +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.c +139 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.h +56 -0
- data/src/core/lib/security/{credentials_posix.c → credentials/google_default/credentials_posix.c} +1 -1
- data/src/core/lib/security/{credentials_win32.c → credentials/google_default/credentials_windows.c} +3 -3
- data/src/core/lib/security/{google_default_credentials.c → credentials/google_default/google_default_credentials.c} +93 -35
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +46 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +85 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.h +44 -0
- data/src/core/lib/security/{json_token.c → credentials/jwt/json_token.c} +10 -101
- data/src/core/lib/security/{json_token.h → credentials/jwt/json_token.h} +3 -33
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +160 -0
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +62 -0
- data/src/core/lib/security/{jwt_verifier.c → credentials/jwt/jwt_verifier.c} +35 -15
- data/src/core/lib/security/{jwt_verifier.h → credentials/jwt/jwt_verifier.h} +3 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +433 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +109 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +129 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +45 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +240 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +48 -0
- data/src/core/lib/security/{auth_filters.h → transport/auth_filters.h} +3 -3
- data/src/core/lib/security/{client_auth_filter.c → transport/client_auth_filter.c} +27 -20
- data/src/core/lib/security/{handshake.c → transport/handshake.c} +77 -45
- data/src/core/lib/security/{handshake.h → transport/handshake.h} +9 -11
- data/src/core/lib/security/{secure_endpoint.c → transport/secure_endpoint.c} +19 -12
- data/src/core/lib/security/{secure_endpoint.h → transport/secure_endpoint.h} +3 -3
- data/src/core/lib/security/{security_connector.c → transport/security_connector.c} +26 -17
- data/src/core/lib/security/{security_connector.h → transport/security_connector.h} +8 -8
- data/src/core/lib/security/{server_auth_filter.c → transport/server_auth_filter.c} +24 -16
- data/src/core/lib/security/transport/tsi_error.c +40 -0
- data/src/core/lib/security/transport/tsi_error.h +42 -0
- data/src/core/lib/security/{b64.c → util/b64.c} +1 -1
- data/src/core/lib/security/{b64.h → util/b64.h} +3 -3
- data/src/core/lib/security/util/json_util.c +61 -0
- data/src/core/lib/security/util/json_util.h +55 -0
- data/src/core/lib/support/avl.c +11 -0
- data/src/core/lib/support/cpu_windows.c +2 -2
- data/src/core/lib/support/{env_win32.c → env_windows.c} +3 -3
- data/src/core/lib/support/log.c +3 -1
- data/src/core/lib/support/log_linux.c +2 -2
- data/src/core/lib/support/{log_win32.c → log_windows.c} +4 -4
- data/src/core/lib/support/murmur_hash.c +3 -5
- data/src/core/lib/support/string.c +10 -0
- data/src/core/lib/support/string.h +4 -0
- data/src/core/lib/support/{string_util_win32.c → string_util_windows.c} +3 -3
- data/src/core/lib/support/{string_win32.c → string_windows.c} +2 -2
- data/src/core/lib/support/{string_win32.h → string_windows.h} +5 -5
- data/src/core/lib/support/subprocess_windows.c +1 -1
- data/src/core/lib/support/{sync_win32.c → sync_windows.c} +2 -2
- data/src/core/lib/support/{thd_win32.c → thd_windows.c} +2 -2
- data/src/core/lib/support/{time_win32.c → time_windows.c} +2 -2
- data/src/core/lib/support/tmpfile_msys.c +1 -1
- data/src/core/lib/support/{tmpfile_win32.c → tmpfile_windows.c} +3 -3
- data/src/core/lib/surface/alarm.c +2 -2
- data/src/core/lib/surface/byte_buffer_reader.c +13 -6
- data/src/core/lib/surface/call.c +323 -123
- data/src/core/lib/surface/call.h +2 -0
- data/src/core/lib/surface/call_log_batch.c +1 -1
- data/src/core/lib/surface/channel.c +64 -15
- data/src/core/lib/surface/channel.h +9 -0
- data/src/core/lib/surface/channel_ping.c +3 -3
- data/src/core/lib/surface/completion_queue.c +75 -19
- data/src/core/lib/surface/completion_queue.h +7 -2
- data/src/core/lib/surface/init.c +2 -1
- data/src/core/lib/surface/init_secure.c +4 -4
- data/src/core/lib/surface/lame_client.c +12 -8
- data/src/core/lib/surface/server.c +213 -120
- data/src/core/lib/surface/server.h +1 -0
- data/src/core/lib/surface/version.c +1 -1
- data/src/core/lib/transport/connectivity_state.c +40 -18
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/metadata.c +23 -23
- data/src/core/lib/transport/metadata.h +4 -0
- data/src/core/lib/transport/metadata_batch.c +9 -0
- data/src/core/lib/transport/metadata_batch.h +3 -0
- data/src/core/lib/transport/static_metadata.c +6 -5
- data/src/core/lib/transport/static_metadata.h +64 -60
- data/src/core/lib/transport/transport.c +24 -12
- data/src/core/lib/transport/transport.h +6 -5
- data/src/core/lib/transport/transport_impl.h +4 -0
- data/src/core/lib/transport/transport_op_string.c +2 -2
- data/src/core/plugin_registry/grpc_plugin_registry.c +4 -0
- data/src/ruby/bin/math_services.rb +41 -2
- data/src/ruby/ext/grpc/rb_call.c +42 -40
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_completion_queue.c +59 -6
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +21 -5
- data/src/ruby/ext/grpc/rb_loader.c +1 -1
- data/src/ruby/ext/grpc/rb_server.c +5 -3
- data/src/ruby/lib/grpc.rb +0 -3
- data/src/ruby/lib/grpc/errors.rb +3 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +32 -42
- data/src/ruby/lib/grpc/generic/bidi_call.rb +20 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +31 -54
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +4 -4
- data/src/ruby/lib/grpc/generic/rpc_server.rb +12 -23
- data/src/ruby/lib/grpc/generic/service.rb +8 -8
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services.rb +30 -2
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +34 -4
- data/src/ruby/pb/grpc/testing/metrics_services.rb +39 -2
- data/src/ruby/pb/src/proto/grpc/testing/empty.rb +15 -0
- data/src/ruby/pb/src/proto/grpc/testing/messages.rb +84 -0
- data/src/ruby/pb/src/proto/grpc/testing/test.rb +14 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services.rb +110 -0
- data/src/ruby/pb/test/client.rb +5 -2
- data/src/ruby/spec/generic/active_call_spec.rb +3 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +27 -24
- data/src/ruby/spec/generic/rpc_desc_spec.rb +11 -11
- data/src/ruby/spec/generic/rpc_server_spec.rb +42 -61
- data/src/ruby/spec/pb/health/checker_spec.rb +3 -5
- metadata +86 -48
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v0/load_balancer.pb.h +0 -182
- data/src/core/lib/security/credentials.c +0 -1296
- data/src/ruby/lib/grpc/signals.rb +0 -69
@@ -0,0 +1,109 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_OAUTH2_OAUTH2_CREDENTIALS_H
|
35
|
+
#define GRPC_CORE_LIB_SECURITY_CREDENTIALS_OAUTH2_OAUTH2_CREDENTIALS_H
|
36
|
+
|
37
|
+
#include "src/core/lib/json/json.h"
|
38
|
+
#include "src/core/lib/security/credentials/credentials.h"
|
39
|
+
|
40
|
+
// auth_refresh_token parsing.
|
41
|
+
typedef struct {
|
42
|
+
const char *type;
|
43
|
+
char *client_id;
|
44
|
+
char *client_secret;
|
45
|
+
char *refresh_token;
|
46
|
+
} grpc_auth_refresh_token;
|
47
|
+
|
48
|
+
/// Returns 1 if the object is valid, 0 otherwise.
|
49
|
+
int grpc_auth_refresh_token_is_valid(
|
50
|
+
const grpc_auth_refresh_token *refresh_token);
|
51
|
+
|
52
|
+
/// Creates a refresh token object from string. Returns an invalid object if a
|
53
|
+
/// parsing error has been encountered.
|
54
|
+
grpc_auth_refresh_token grpc_auth_refresh_token_create_from_string(
|
55
|
+
const char *json_string);
|
56
|
+
|
57
|
+
/// Creates a refresh token object from parsed json. Returns an invalid object
|
58
|
+
/// if a parsing error has been encountered.
|
59
|
+
grpc_auth_refresh_token grpc_auth_refresh_token_create_from_json(
|
60
|
+
const grpc_json *json);
|
61
|
+
|
62
|
+
/// Destructs the object.
|
63
|
+
void grpc_auth_refresh_token_destruct(grpc_auth_refresh_token *refresh_token);
|
64
|
+
|
65
|
+
// -- Oauth2 Token Fetcher credentials --
|
66
|
+
//
|
67
|
+
// This object is a base for credentials that need to acquire an oauth2 token
|
68
|
+
// from an http service.
|
69
|
+
|
70
|
+
typedef void (*grpc_fetch_oauth2_func)(grpc_exec_ctx *exec_ctx,
|
71
|
+
grpc_credentials_metadata_request *req,
|
72
|
+
grpc_httpcli_context *http_context,
|
73
|
+
grpc_polling_entity *pollent,
|
74
|
+
grpc_iomgr_cb_func cb,
|
75
|
+
gpr_timespec deadline);
|
76
|
+
typedef struct {
|
77
|
+
grpc_call_credentials base;
|
78
|
+
gpr_mu mu;
|
79
|
+
grpc_credentials_md_store *access_token_md;
|
80
|
+
gpr_timespec token_expiration;
|
81
|
+
grpc_httpcli_context httpcli_context;
|
82
|
+
grpc_fetch_oauth2_func fetch_func;
|
83
|
+
} grpc_oauth2_token_fetcher_credentials;
|
84
|
+
|
85
|
+
// Google refresh token credentials.
|
86
|
+
typedef struct {
|
87
|
+
grpc_oauth2_token_fetcher_credentials base;
|
88
|
+
grpc_auth_refresh_token refresh_token;
|
89
|
+
} grpc_google_refresh_token_credentials;
|
90
|
+
|
91
|
+
// Access token credentials.
|
92
|
+
typedef struct {
|
93
|
+
grpc_call_credentials base;
|
94
|
+
grpc_credentials_md_store *access_token_md;
|
95
|
+
} grpc_access_token_credentials;
|
96
|
+
|
97
|
+
// Private constructor for refresh token credentials from an already parsed
|
98
|
+
// refresh token. Takes ownership of the refresh token.
|
99
|
+
grpc_call_credentials *
|
100
|
+
grpc_refresh_token_credentials_create_from_auth_refresh_token(
|
101
|
+
grpc_auth_refresh_token token);
|
102
|
+
|
103
|
+
// Exposed for testing only.
|
104
|
+
grpc_credentials_status
|
105
|
+
grpc_oauth2_token_fetcher_credentials_parse_server_response(
|
106
|
+
const struct grpc_http_response *response,
|
107
|
+
grpc_credentials_md_store **token_md, gpr_timespec *token_lifetime);
|
108
|
+
|
109
|
+
#endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_OAUTH2_OAUTH2_CREDENTIALS_H */
|
@@ -0,0 +1,129 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016, 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/plugin/plugin_credentials.h"
|
35
|
+
|
36
|
+
#include <string.h>
|
37
|
+
|
38
|
+
#include "src/core/lib/surface/api_trace.h"
|
39
|
+
|
40
|
+
#include <grpc/support/alloc.h>
|
41
|
+
#include <grpc/support/log.h>
|
42
|
+
#include <grpc/support/string_util.h>
|
43
|
+
#include <grpc/support/sync.h>
|
44
|
+
|
45
|
+
typedef struct {
|
46
|
+
void *user_data;
|
47
|
+
grpc_credentials_metadata_cb cb;
|
48
|
+
} grpc_metadata_plugin_request;
|
49
|
+
|
50
|
+
static void plugin_destruct(grpc_call_credentials *creds) {
|
51
|
+
grpc_plugin_credentials *c = (grpc_plugin_credentials *)creds;
|
52
|
+
if (c->plugin.state != NULL && c->plugin.destroy != NULL) {
|
53
|
+
c->plugin.destroy(c->plugin.state);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
static void plugin_md_request_metadata_ready(void *request,
|
58
|
+
const grpc_metadata *md,
|
59
|
+
size_t num_md,
|
60
|
+
grpc_status_code status,
|
61
|
+
const char *error_details) {
|
62
|
+
/* called from application code */
|
63
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
64
|
+
grpc_metadata_plugin_request *r = (grpc_metadata_plugin_request *)request;
|
65
|
+
if (status != GRPC_STATUS_OK) {
|
66
|
+
if (error_details != NULL) {
|
67
|
+
gpr_log(GPR_ERROR, "Getting metadata from plugin failed with error: %s",
|
68
|
+
error_details);
|
69
|
+
}
|
70
|
+
r->cb(&exec_ctx, r->user_data, NULL, 0, GRPC_CREDENTIALS_ERROR);
|
71
|
+
} else {
|
72
|
+
size_t i;
|
73
|
+
grpc_credentials_md *md_array = NULL;
|
74
|
+
if (num_md > 0) {
|
75
|
+
md_array = gpr_malloc(num_md * sizeof(grpc_credentials_md));
|
76
|
+
for (i = 0; i < num_md; i++) {
|
77
|
+
md_array[i].key = gpr_slice_from_copied_string(md[i].key);
|
78
|
+
md_array[i].value =
|
79
|
+
gpr_slice_from_copied_buffer(md[i].value, md[i].value_length);
|
80
|
+
}
|
81
|
+
}
|
82
|
+
r->cb(&exec_ctx, r->user_data, md_array, num_md, GRPC_CREDENTIALS_OK);
|
83
|
+
if (md_array != NULL) {
|
84
|
+
for (i = 0; i < num_md; i++) {
|
85
|
+
gpr_slice_unref(md_array[i].key);
|
86
|
+
gpr_slice_unref(md_array[i].value);
|
87
|
+
}
|
88
|
+
gpr_free(md_array);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
gpr_free(r);
|
92
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
93
|
+
}
|
94
|
+
|
95
|
+
static void plugin_get_request_metadata(grpc_exec_ctx *exec_ctx,
|
96
|
+
grpc_call_credentials *creds,
|
97
|
+
grpc_polling_entity *pollent,
|
98
|
+
grpc_auth_metadata_context context,
|
99
|
+
grpc_credentials_metadata_cb cb,
|
100
|
+
void *user_data) {
|
101
|
+
grpc_plugin_credentials *c = (grpc_plugin_credentials *)creds;
|
102
|
+
if (c->plugin.get_metadata != NULL) {
|
103
|
+
grpc_metadata_plugin_request *request = gpr_malloc(sizeof(*request));
|
104
|
+
memset(request, 0, sizeof(*request));
|
105
|
+
request->user_data = user_data;
|
106
|
+
request->cb = cb;
|
107
|
+
c->plugin.get_metadata(c->plugin.state, context,
|
108
|
+
plugin_md_request_metadata_ready, request);
|
109
|
+
} else {
|
110
|
+
cb(exec_ctx, user_data, NULL, 0, GRPC_CREDENTIALS_OK);
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
static grpc_call_credentials_vtable plugin_vtable = {
|
115
|
+
plugin_destruct, plugin_get_request_metadata};
|
116
|
+
|
117
|
+
grpc_call_credentials *grpc_metadata_credentials_create_from_plugin(
|
118
|
+
grpc_metadata_credentials_plugin plugin, void *reserved) {
|
119
|
+
grpc_plugin_credentials *c = gpr_malloc(sizeof(*c));
|
120
|
+
GRPC_API_TRACE("grpc_metadata_credentials_create_from_plugin(reserved=%p)", 1,
|
121
|
+
(reserved));
|
122
|
+
GPR_ASSERT(reserved == NULL);
|
123
|
+
memset(c, 0, sizeof(*c));
|
124
|
+
c->base.type = plugin.type;
|
125
|
+
c->base.vtable = &plugin_vtable;
|
126
|
+
gpr_ref_init(&c->base.refcount, 1);
|
127
|
+
c->plugin = plugin;
|
128
|
+
return &c->base;
|
129
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_PLUGIN_PLUGIN_CREDENTIALS_H
|
35
|
+
#define GRPC_CORE_LIB_SECURITY_CREDENTIALS_PLUGIN_PLUGIN_CREDENTIALS_H
|
36
|
+
|
37
|
+
#include "src/core/lib/security/credentials/credentials.h"
|
38
|
+
|
39
|
+
typedef struct {
|
40
|
+
grpc_call_credentials base;
|
41
|
+
grpc_metadata_credentials_plugin plugin;
|
42
|
+
grpc_credentials_md_store *plugin_md;
|
43
|
+
} grpc_plugin_credentials;
|
44
|
+
|
45
|
+
#endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_PLUGIN_PLUGIN_CREDENTIALS_H */
|
@@ -0,0 +1,240 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016, 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/ssl/ssl_credentials.h"
|
35
|
+
|
36
|
+
#include <string.h>
|
37
|
+
|
38
|
+
#include "src/core/lib/channel/channel_args.h"
|
39
|
+
#include "src/core/lib/channel/http_client_filter.h"
|
40
|
+
#include "src/core/lib/surface/api_trace.h"
|
41
|
+
|
42
|
+
#include <grpc/support/alloc.h>
|
43
|
+
#include <grpc/support/log.h>
|
44
|
+
|
45
|
+
//
|
46
|
+
// Utils
|
47
|
+
//
|
48
|
+
|
49
|
+
static void ssl_copy_key_material(const char *input, unsigned char **output,
|
50
|
+
size_t *output_size) {
|
51
|
+
*output_size = strlen(input);
|
52
|
+
*output = gpr_malloc(*output_size);
|
53
|
+
memcpy(*output, input, *output_size);
|
54
|
+
}
|
55
|
+
|
56
|
+
//
|
57
|
+
// SSL Channel Credentials.
|
58
|
+
//
|
59
|
+
|
60
|
+
static void ssl_destruct(grpc_channel_credentials *creds) {
|
61
|
+
grpc_ssl_credentials *c = (grpc_ssl_credentials *)creds;
|
62
|
+
if (c->config.pem_root_certs != NULL) gpr_free(c->config.pem_root_certs);
|
63
|
+
if (c->config.pem_private_key != NULL) gpr_free(c->config.pem_private_key);
|
64
|
+
if (c->config.pem_cert_chain != NULL) gpr_free(c->config.pem_cert_chain);
|
65
|
+
}
|
66
|
+
|
67
|
+
static grpc_security_status ssl_create_security_connector(
|
68
|
+
grpc_channel_credentials *creds, grpc_call_credentials *call_creds,
|
69
|
+
const char *target, const grpc_channel_args *args,
|
70
|
+
grpc_channel_security_connector **sc, grpc_channel_args **new_args) {
|
71
|
+
grpc_ssl_credentials *c = (grpc_ssl_credentials *)creds;
|
72
|
+
grpc_security_status status = GRPC_SECURITY_OK;
|
73
|
+
size_t i = 0;
|
74
|
+
const char *overridden_target_name = NULL;
|
75
|
+
grpc_arg new_arg;
|
76
|
+
|
77
|
+
for (i = 0; args && i < args->num_args; i++) {
|
78
|
+
grpc_arg *arg = &args->args[i];
|
79
|
+
if (strcmp(arg->key, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG) == 0 &&
|
80
|
+
arg->type == GRPC_ARG_STRING) {
|
81
|
+
overridden_target_name = arg->value.string;
|
82
|
+
break;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
status = grpc_ssl_channel_security_connector_create(
|
86
|
+
call_creds, &c->config, target, overridden_target_name, sc);
|
87
|
+
if (status != GRPC_SECURITY_OK) {
|
88
|
+
return status;
|
89
|
+
}
|
90
|
+
new_arg.type = GRPC_ARG_STRING;
|
91
|
+
new_arg.key = GRPC_ARG_HTTP2_SCHEME;
|
92
|
+
new_arg.value.string = "https";
|
93
|
+
*new_args = grpc_channel_args_copy_and_add(args, &new_arg, 1);
|
94
|
+
return status;
|
95
|
+
}
|
96
|
+
|
97
|
+
static grpc_channel_credentials_vtable ssl_vtable = {
|
98
|
+
ssl_destruct, ssl_create_security_connector};
|
99
|
+
|
100
|
+
static void ssl_build_config(const char *pem_root_certs,
|
101
|
+
grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
|
102
|
+
grpc_ssl_config *config) {
|
103
|
+
if (pem_root_certs != NULL) {
|
104
|
+
ssl_copy_key_material(pem_root_certs, &config->pem_root_certs,
|
105
|
+
&config->pem_root_certs_size);
|
106
|
+
}
|
107
|
+
if (pem_key_cert_pair != NULL) {
|
108
|
+
GPR_ASSERT(pem_key_cert_pair->private_key != NULL);
|
109
|
+
GPR_ASSERT(pem_key_cert_pair->cert_chain != NULL);
|
110
|
+
ssl_copy_key_material(pem_key_cert_pair->private_key,
|
111
|
+
&config->pem_private_key,
|
112
|
+
&config->pem_private_key_size);
|
113
|
+
ssl_copy_key_material(pem_key_cert_pair->cert_chain,
|
114
|
+
&config->pem_cert_chain,
|
115
|
+
&config->pem_cert_chain_size);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
grpc_channel_credentials *grpc_ssl_credentials_create(
|
120
|
+
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
|
121
|
+
void *reserved) {
|
122
|
+
grpc_ssl_credentials *c = gpr_malloc(sizeof(grpc_ssl_credentials));
|
123
|
+
GRPC_API_TRACE(
|
124
|
+
"grpc_ssl_credentials_create(pem_root_certs=%s, "
|
125
|
+
"pem_key_cert_pair=%p, "
|
126
|
+
"reserved=%p)",
|
127
|
+
3, (pem_root_certs, pem_key_cert_pair, reserved));
|
128
|
+
GPR_ASSERT(reserved == NULL);
|
129
|
+
memset(c, 0, sizeof(grpc_ssl_credentials));
|
130
|
+
c->base.type = GRPC_CHANNEL_CREDENTIALS_TYPE_SSL;
|
131
|
+
c->base.vtable = &ssl_vtable;
|
132
|
+
gpr_ref_init(&c->base.refcount, 1);
|
133
|
+
ssl_build_config(pem_root_certs, pem_key_cert_pair, &c->config);
|
134
|
+
return &c->base;
|
135
|
+
}
|
136
|
+
|
137
|
+
//
|
138
|
+
// SSL Server Credentials.
|
139
|
+
//
|
140
|
+
|
141
|
+
static void ssl_server_destruct(grpc_server_credentials *creds) {
|
142
|
+
grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds;
|
143
|
+
size_t i;
|
144
|
+
for (i = 0; i < c->config.num_key_cert_pairs; i++) {
|
145
|
+
if (c->config.pem_private_keys[i] != NULL) {
|
146
|
+
gpr_free(c->config.pem_private_keys[i]);
|
147
|
+
}
|
148
|
+
if (c->config.pem_cert_chains[i] != NULL) {
|
149
|
+
gpr_free(c->config.pem_cert_chains[i]);
|
150
|
+
}
|
151
|
+
}
|
152
|
+
if (c->config.pem_private_keys != NULL) gpr_free(c->config.pem_private_keys);
|
153
|
+
if (c->config.pem_private_keys_sizes != NULL) {
|
154
|
+
gpr_free(c->config.pem_private_keys_sizes);
|
155
|
+
}
|
156
|
+
if (c->config.pem_cert_chains != NULL) gpr_free(c->config.pem_cert_chains);
|
157
|
+
if (c->config.pem_cert_chains_sizes != NULL) {
|
158
|
+
gpr_free(c->config.pem_cert_chains_sizes);
|
159
|
+
}
|
160
|
+
if (c->config.pem_root_certs != NULL) gpr_free(c->config.pem_root_certs);
|
161
|
+
}
|
162
|
+
|
163
|
+
static grpc_security_status ssl_server_create_security_connector(
|
164
|
+
grpc_server_credentials *creds, grpc_server_security_connector **sc) {
|
165
|
+
grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds;
|
166
|
+
return grpc_ssl_server_security_connector_create(&c->config, sc);
|
167
|
+
}
|
168
|
+
|
169
|
+
static grpc_server_credentials_vtable ssl_server_vtable = {
|
170
|
+
ssl_server_destruct, ssl_server_create_security_connector};
|
171
|
+
|
172
|
+
static void ssl_build_server_config(
|
173
|
+
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
|
174
|
+
size_t num_key_cert_pairs,
|
175
|
+
grpc_ssl_client_certificate_request_type client_certificate_request,
|
176
|
+
grpc_ssl_server_config *config) {
|
177
|
+
size_t i;
|
178
|
+
config->client_certificate_request = client_certificate_request;
|
179
|
+
if (pem_root_certs != NULL) {
|
180
|
+
ssl_copy_key_material(pem_root_certs, &config->pem_root_certs,
|
181
|
+
&config->pem_root_certs_size);
|
182
|
+
}
|
183
|
+
if (num_key_cert_pairs > 0) {
|
184
|
+
GPR_ASSERT(pem_key_cert_pairs != NULL);
|
185
|
+
config->pem_private_keys =
|
186
|
+
gpr_malloc(num_key_cert_pairs * sizeof(unsigned char *));
|
187
|
+
config->pem_cert_chains =
|
188
|
+
gpr_malloc(num_key_cert_pairs * sizeof(unsigned char *));
|
189
|
+
config->pem_private_keys_sizes =
|
190
|
+
gpr_malloc(num_key_cert_pairs * sizeof(size_t));
|
191
|
+
config->pem_cert_chains_sizes =
|
192
|
+
gpr_malloc(num_key_cert_pairs * sizeof(size_t));
|
193
|
+
}
|
194
|
+
config->num_key_cert_pairs = num_key_cert_pairs;
|
195
|
+
for (i = 0; i < num_key_cert_pairs; i++) {
|
196
|
+
GPR_ASSERT(pem_key_cert_pairs[i].private_key != NULL);
|
197
|
+
GPR_ASSERT(pem_key_cert_pairs[i].cert_chain != NULL);
|
198
|
+
ssl_copy_key_material(pem_key_cert_pairs[i].private_key,
|
199
|
+
&config->pem_private_keys[i],
|
200
|
+
&config->pem_private_keys_sizes[i]);
|
201
|
+
ssl_copy_key_material(pem_key_cert_pairs[i].cert_chain,
|
202
|
+
&config->pem_cert_chains[i],
|
203
|
+
&config->pem_cert_chains_sizes[i]);
|
204
|
+
}
|
205
|
+
}
|
206
|
+
|
207
|
+
grpc_server_credentials *grpc_ssl_server_credentials_create(
|
208
|
+
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
|
209
|
+
size_t num_key_cert_pairs, int force_client_auth, void *reserved) {
|
210
|
+
return grpc_ssl_server_credentials_create_ex(
|
211
|
+
pem_root_certs, pem_key_cert_pairs, num_key_cert_pairs,
|
212
|
+
force_client_auth
|
213
|
+
? GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
|
214
|
+
: GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE,
|
215
|
+
reserved);
|
216
|
+
}
|
217
|
+
|
218
|
+
grpc_server_credentials *grpc_ssl_server_credentials_create_ex(
|
219
|
+
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
|
220
|
+
size_t num_key_cert_pairs,
|
221
|
+
grpc_ssl_client_certificate_request_type client_certificate_request,
|
222
|
+
void *reserved) {
|
223
|
+
grpc_ssl_server_credentials *c =
|
224
|
+
gpr_malloc(sizeof(grpc_ssl_server_credentials));
|
225
|
+
GRPC_API_TRACE(
|
226
|
+
"grpc_ssl_server_credentials_create_ex("
|
227
|
+
"pem_root_certs=%s, pem_key_cert_pairs=%p, num_key_cert_pairs=%lu, "
|
228
|
+
"client_certificate_request=%d, reserved=%p)",
|
229
|
+
5, (pem_root_certs, pem_key_cert_pairs, (unsigned long)num_key_cert_pairs,
|
230
|
+
client_certificate_request, reserved));
|
231
|
+
GPR_ASSERT(reserved == NULL);
|
232
|
+
memset(c, 0, sizeof(grpc_ssl_server_credentials));
|
233
|
+
c->base.type = GRPC_CHANNEL_CREDENTIALS_TYPE_SSL;
|
234
|
+
gpr_ref_init(&c->base.refcount, 1);
|
235
|
+
c->base.vtable = &ssl_server_vtable;
|
236
|
+
ssl_build_server_config(pem_root_certs, pem_key_cert_pairs,
|
237
|
+
num_key_cert_pairs, client_certificate_request,
|
238
|
+
&c->config);
|
239
|
+
return &c->base;
|
240
|
+
}
|