composite_credentials.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015-2016 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
20 
22 
23 #include <cstring>
24 #include <vector>
25 
26 #include "absl/strings/str_cat.h"
27 #include "absl/strings/str_join.h"
28 #include "absl/strings/string_view.h"
29 
30 #include <grpc/support/log.h>
31 
39 
40 //
41 // grpc_composite_channel_credentials
42 //
43 
45  static grpc_core::UniqueTypeName::Factory kFactory("Composite");
46  return kFactory.Create();
47 }
48 
49 /* -- Composite call credentials. -- */
50 
53  grpc_core::ClientMetadataHandle initial_metadata,
55  auto self = Ref();
56  return TrySeqIter(
57  inner_.begin(), inner_.end(), std::move(initial_metadata),
59  grpc_core::ClientMetadataHandle initial_metadata) {
60  return creds->GetRequestMetadata(std::move(initial_metadata), args);
61  });
62 }
63 
65  static grpc_core::UniqueTypeName::Factory kFactory("Composite");
66  return kFactory.Create();
67 }
68 
70  std::vector<std::string> outputs;
71  for (auto& inner_cred : inner_) {
72  outputs.emplace_back(inner_cred->debug_string());
73  }
74  return absl::StrCat("CompositeCallCredentials{", absl::StrJoin(outputs, ","),
75  "}");
76 }
77 
78 static size_t get_creds_array_size(const grpc_call_credentials* creds,
79  bool is_composite) {
80  return is_composite
81  ? static_cast<const grpc_composite_call_credentials*>(creds)
82  ->inner()
83  .size()
84  : 1;
85 }
86 
88  grpc_core::RefCountedPtr<grpc_call_credentials> creds, bool is_composite) {
89  if (!is_composite) {
90  inner_.push_back(std::move(creds));
91  return;
92  }
93  auto composite_creds =
94  static_cast<grpc_composite_call_credentials*>(creds.get());
95  for (size_t i = 0; i < composite_creds->inner().size(); ++i) {
96  inner_.push_back(composite_creds->inner_[i]);
97  }
98 }
99 
103  const bool creds1_is_composite =
105  const bool creds2_is_composite =
107  const size_t size = get_creds_array_size(creds1.get(), creds1_is_composite) +
108  get_creds_array_size(creds2.get(), creds2_is_composite);
109  inner_.reserve(size);
110  push_to_inner(std::move(creds1), creds1_is_composite);
111  push_to_inner(std::move(creds2), creds2_is_composite);
113  for (size_t i = 0; i < inner_.size(); ++i) {
114  if (static_cast<int>(min_security_level_) <
115  static_cast<int>(inner_[i]->min_security_level())) {
116  min_security_level_ = inner_[i]->min_security_level();
117  }
118  }
119 }
120 
125  return grpc_core::MakeRefCounted<grpc_composite_call_credentials>(
126  std::move(creds1), std::move(creds2));
127 }
128 
131  void* reserved) {
133  "grpc_composite_call_credentials_create(creds1=%p, creds2=%p, "
134  "reserved=%p)",
135  3, (creds1, creds2, reserved));
136  GPR_ASSERT(reserved == nullptr);
137  GPR_ASSERT(creds1 != nullptr);
138  GPR_ASSERT(creds2 != nullptr);
139 
140  return composite_call_credentials_create(creds1->Ref(), creds2->Ref())
141  .release();
142 }
143 
144 /* -- Composite channel credentials. -- */
145 
149  const char* target, const grpc_channel_args* args,
150  grpc_channel_args** new_args) {
151  GPR_ASSERT(inner_creds_ != nullptr && call_creds_ != nullptr);
152  /* If we are passed a call_creds, create a call composite to pass it
153  downstream. */
154  if (call_creds != nullptr) {
157  target, args, new_args);
158  } else {
160  new_args);
161  }
162 }
163 
166  void* reserved) {
167  GPR_ASSERT(channel_creds != nullptr && call_creds != nullptr &&
168  reserved == nullptr);
170  "grpc_composite_channel_credentials_create(channel_creds=%p, "
171  "call_creds=%p, reserved=%p)",
172  3, (channel_creds, call_creds, reserved));
173  return new grpc_composite_channel_credentials(channel_creds->Ref(),
174  call_creds->Ref());
175 }
trace.h
grpc_core::UniqueTypeName::Factory::Create
UniqueTypeName Create()
Definition: unique_type_name.h:67
grpc_call_credentials::GetRequestMetadataArgs
Definition: src/core/lib/security/credentials/credentials.h:196
log.h
absl::StrCat
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
Definition: abseil-cpp/absl/strings/str_cat.cc:98
grpc_composite_call_credentials::push_to_inner
void push_to_inner(grpc_core::RefCountedPtr< grpc_call_credentials > creds, bool is_composite)
Definition: composite_credentials.cc:87
grpc_composite_channel_credentials::type
grpc_core::UniqueTypeName type() const override
Definition: composite_credentials.cc:44
grpc_core::RefCountedPtr::get
T * get() const
Definition: ref_counted_ptr.h:146
grpc_composite_channel_credentials::create_security_connector
grpc_core::RefCountedPtr< grpc_channel_security_connector > create_security_connector(grpc_core::RefCountedPtr< grpc_call_credentials > call_creds, const char *target, const grpc_channel_args *args, grpc_channel_args **new_args) override
Definition: composite_credentials.cc:147
grpc_call_credentials::type
virtual grpc_core::UniqueTypeName type() const =0
grpc_composite_channel_credentials_create
grpc_channel_credentials * grpc_composite_channel_credentials_create(grpc_channel_credentials *channel_creds, grpc_call_credentials *call_creds, void *reserved)
Definition: composite_credentials.cc:164
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc_composite_call_credentials::min_security_level_
grpc_security_level min_security_level_
Definition: composite_credentials.h:129
grpc_composite_channel_credentials
Definition: composite_credentials.h:47
grpc_call_credentials
Definition: src/core/lib/security/credentials/credentials.h:189
grpc_core::RefCountedPtr::release
T * release()
Definition: ref_counted_ptr.h:140
grpc_channel_args
Definition: grpc_types.h:132
grpc_composite_call_credentials::debug_string
std::string debug_string() override
Definition: composite_credentials.cc:69
grpc_composite_call_credentials::min_security_level
grpc_security_level min_security_level() const override
Definition: composite_credentials.h:109
grpc_composite_channel_credentials::call_creds
const grpc_call_credentials * call_creds() const
Definition: composite_credentials.h:78
try_seq.h
GRPC_SECURITY_NONE
@ GRPC_SECURITY_NONE
Definition: grpc_security_constants.h:133
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
composite_call_credentials_create
static grpc_core::RefCountedPtr< grpc_call_credentials > composite_call_credentials_create(grpc_core::RefCountedPtr< grpc_call_credentials > creds1, grpc_core::RefCountedPtr< grpc_call_credentials > creds2)
Definition: composite_credentials.cc:122
grpc_core::RefCountedPtr< grpc_call_credentials >
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
absl::StrJoin
std::string StrJoin(Iterator start, Iterator end, absl::string_view sep, Formatter &&fmt)
Definition: abseil-cpp/absl/strings/str_join.h:239
grpc_composite_call_credentials::inner_
CallCredentialsList inner_
Definition: composite_credentials.h:130
grpc_composite_call_credentials::Type
static grpc_core::UniqueTypeName Type()
Definition: composite_credentials.cc:64
grpc_composite_channel_credentials::inner_creds_
grpc_core::RefCountedPtr< grpc_channel_credentials > inner_creds_
Definition: composite_credentials.h:89
call_creds
void call_creds(grpc_end2end_test_config config)
Definition: call_creds.cc:523
grpc_composite_call_credentials::grpc_composite_call_credentials
grpc_composite_call_credentials(grpc_core::RefCountedPtr< grpc_call_credentials > creds1, grpc_core::RefCountedPtr< grpc_call_credentials > creds2)
Definition: composite_credentials.cc:100
grpc_core::TrySeqIter
promise_detail::BasicSeqIter< promise_detail::TrySeqTraits, Factory, Argument, Iter > TrySeqIter(Iter begin, Iter end, Argument argument, Factory factory)
Definition: try_seq.h:149
grpc_core::MetadataHandle< ClientMetadata >
grpc_composite_call_credentials
Definition: composite_credentials.h:95
grpc_core::UniqueTypeName
Definition: unique_type_name.h:56
grpc_core::ArenaPromise
Definition: arena_promise.h:152
poll.h
grpc_composite_call_credentials_create
grpc_call_credentials * grpc_composite_call_credentials_create(grpc_call_credentials *creds1, grpc_call_credentials *creds2, void *reserved)
Definition: composite_credentials.cc:129
composite_credentials.h
get_creds_array_size
static size_t get_creds_array_size(const grpc_call_credentials *creds, bool is_composite)
Definition: composite_credentials.cc:78
grpc_composite_call_credentials::GetRequestMetadata
grpc_core::ArenaPromise< absl::StatusOr< grpc_core::ClientMetadataHandle > > GetRequestMetadata(grpc_core::ClientMetadataHandle initial_metadata, const GetRequestMetadataArgs *args) override
Definition: composite_credentials.cc:52
grpc_composite_channel_credentials::call_creds_
grpc_core::RefCountedPtr< grpc_call_credentials > call_creds_
Definition: composite_credentials.h:90
ref_counted_ptr.h
transport.h
api_trace.h
size
voidpf void uLong size
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
grpc_channel_credentials::create_security_connector
virtual grpc_core::RefCountedPtr< grpc_channel_security_connector > create_security_connector(grpc_core::RefCountedPtr< grpc_call_credentials > call_creds, const char *target, const grpc_channel_args *args, grpc_channel_args **new_args)=0
grpc_core::UniqueTypeName::Factory
Definition: unique_type_name.h:60
setup.target
target
Definition: third_party/bloaty/third_party/protobuf/python/setup.py:179
grpc_channel_credentials
Definition: src/core/lib/security/credentials/credentials.h:96
basic_seq.h
grpc_core::RefCounted< grpc_call_credentials >::Ref
RefCountedPtr< grpc_call_credentials > Ref() GRPC_MUST_USE_RESULT
Definition: ref_counted.h:287
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
GRPC_API_TRACE
#define GRPC_API_TRACE(fmt, nargs, args)
Definition: api_trace.h:48
port_platform.h


grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:00