diff options
| author | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
|---|---|---|
| committer | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
| commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
| tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/grpc/src/cpp/client/create_channel.cc | |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/grpc/src/cpp/client/create_channel.cc')
| -rw-r--r-- | contrib/libs/grpc/src/cpp/client/create_channel.cc | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/contrib/libs/grpc/src/cpp/client/create_channel.cc b/contrib/libs/grpc/src/cpp/client/create_channel.cc new file mode 100644 index 00000000000..97327490ed2 --- /dev/null +++ b/contrib/libs/grpc/src/cpp/client/create_channel.cc @@ -0,0 +1,85 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <memory> + +#include <grpcpp/channel.h> +#include <grpcpp/create_channel.h> +#include <grpcpp/impl/grpc_library.h> +#include <grpcpp/security/credentials.h> +#include <grpcpp/support/channel_arguments.h> + +#include "src/cpp/client/create_channel_internal.h" + +namespace grpc { +std::shared_ptr<grpc::Channel> CreateChannel( + const grpc::string& target, + const std::shared_ptr<grpc::ChannelCredentials>& creds) { + return CreateCustomChannel(target, creds, grpc::ChannelArguments()); +} + +std::shared_ptr<grpc::Channel> CreateCustomChannel( + const grpc::string& target, + const std::shared_ptr<grpc::ChannelCredentials>& creds, + const grpc::ChannelArguments& args) { + grpc::GrpcLibraryCodegen + init_lib; // We need to call init in case of bad creds. + return creds ? creds->CreateChannelImpl(target, args) + : grpc::CreateChannelInternal( + "", + grpc_lame_client_channel_create( + nullptr, GRPC_STATUS_INVALID_ARGUMENT, + "Invalid credentials."), + std::vector<std::unique_ptr< + grpc::experimental:: + ClientInterceptorFactoryInterface>>()); +} + +namespace experimental { +/// Create a new \em custom \a Channel pointing to \a target with \a +/// interceptors being invoked per call. +/// +/// \warning For advanced use and testing ONLY. Override default channel +/// arguments only if necessary. +/// +/// \param target The URI of the endpoint to connect to. +/// \param creds Credentials to use for the created channel. If it does not +/// hold an object or is invalid, a lame channel (one on which all operations +/// fail) is returned. +/// \param args Options for channel creation. +std::shared_ptr<grpc::Channel> CreateCustomChannelWithInterceptors( + const TString& target, + const std::shared_ptr<grpc::ChannelCredentials>& creds, + const grpc::ChannelArguments& args, + std::vector< + std::unique_ptr<grpc::experimental::ClientInterceptorFactoryInterface>> + interceptor_creators) { + grpc::GrpcLibraryCodegen + init_lib; // We need to call init in case of bad creds. + return creds ? creds->CreateChannelWithInterceptors( + target, args, std::move(interceptor_creators)) + : grpc::CreateChannelInternal( + "", + grpc_lame_client_channel_create( + nullptr, GRPC_STATUS_INVALID_ARGUMENT, + "Invalid credentials."), + std::move(interceptor_creators)); +} +} // namespace experimental + +} // namespace grpc |
