channel_stack_builder.h
Go to the documentation of this file.
1 // Copyright 2016 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_BUILDER_H
16 #define GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_BUILDER_H
17 
19 
20 #include <string>
21 #include <vector>
22 
23 #include "absl/status/statusor.h"
24 #include "absl/strings/string_view.h"
25 
26 #include <grpc/support/log.h>
27 
33 
34 namespace grpc_core {
35 
36 // Build a channel stack.
37 // Allows interested parties to add filters to the stack, and to query an
38 // in-progress build.
39 // Carries some useful context for the channel stack, such as a target string
40 // and a transport.
42  public:
43  // Initialize with a name.
45  : name_(name), type_(type) {}
46 
47  const char* name() const { return name_; }
48 
49  // Set the target string.
50  ChannelStackBuilder& SetTarget(const char* target);
51 
52  // Query the target.
53  absl::string_view target() const { return target_; }
54 
55  // Set the transport.
57  GPR_ASSERT(transport_ == nullptr);
59  return *this;
60  }
61 
62  // Query the transport.
63  grpc_transport* transport() const { return transport_; }
64 
65  // Set channel args (takes a copy of them).
67 
68  // Query the channel args.
69  const ChannelArgs& channel_args() const { return args_; }
70 
71  // Mutable vector of proposed stack entries.
72  std::vector<const grpc_channel_filter*>* mutable_stack() { return &stack_; }
73 
74  // The type of channel stack being built.
76 
77  // Helper to add a filter to the front of the stack.
78  void PrependFilter(const grpc_channel_filter* filter);
79 
80  // Helper to add a filter to the end of the stack.
81  void AppendFilter(const grpc_channel_filter* filter);
82 
83  // Build the channel stack.
84  // After success, *result holds the new channel stack,
85  // prefix_bytes are allocated before the channel stack,
86  // destroy is as per grpc_channel_stack_init
87  // On failure, *result is nullptr.
89 
90  protected:
92 
93  private:
94  static std::string unknown_target() { return "unknown"; }
95 
96  // The name of the stack
97  const char* const name_;
98  // The type of stack being built
100  // The target
102  // The transport
104  // Channel args
106  // The in-progress stack
107  std::vector<const grpc_channel_filter*> stack_;
108 };
109 
110 } // namespace grpc_core
111 
112 #endif // GRPC_CORE_LIB_CHANNEL_CHANNEL_STACK_BUILDER_H
log.h
channel_fwd.h
grpc_core::ChannelStackBuilder::args_
ChannelArgs args_
Definition: channel_stack_builder.h:105
grpc_core::ChannelStackBuilder::name_
const char *const name_
Definition: channel_stack_builder.h:97
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::ChannelStackBuilder::~ChannelStackBuilder
~ChannelStackBuilder()
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
grpc_core::ChannelStackBuilder::name
const char * name() const
Definition: channel_stack_builder.h:47
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc_core::ChannelStackBuilder::PrependFilter
void PrependFilter(const grpc_channel_filter *filter)
Definition: channel_stack_builder.cc:46
grpc_core::ChannelStackBuilder::SetTransport
ChannelStackBuilder & SetTransport(grpc_transport *transport)
Definition: channel_stack_builder.h:56
grpc_core::ChannelStackBuilder
Definition: channel_stack_builder.h:41
grpc_core::ChannelStackBuilder::ChannelStackBuilder
ChannelStackBuilder(const char *name, grpc_channel_stack_type type)
Definition: channel_stack_builder.h:44
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc_core::ChannelStackBuilder::channel_args
const ChannelArgs & channel_args() const
Definition: channel_stack_builder.h:69
grpc_core::ChannelStackBuilder::mutable_stack
std::vector< const grpc_channel_filter * > * mutable_stack()
Definition: channel_stack_builder.h:72
grpc_core::ChannelStackBuilder::SetTarget
ChannelStackBuilder & SetTarget(const char *target)
Definition: channel_stack_builder.cc:32
grpc_core::ChannelStackBuilder::channel_stack_type
grpc_channel_stack_type channel_stack_type() const
Definition: channel_stack_builder.h:75
grpc_core::ChannelStackBuilder::AppendFilter
void AppendFilter(const grpc_channel_filter *filter)
Definition: channel_stack_builder.cc:50
channel_stack_type.h
grpc_core::ChannelStackBuilder::Build
virtual absl::StatusOr< RefCountedPtr< grpc_channel_stack > > Build()=0
transport_fwd.h
grpc_channel_filter
Definition: channel_stack.h:111
grpc_core::ChannelStackBuilder::SetChannelArgs
ChannelStackBuilder & SetChannelArgs(ChannelArgs args)
Definition: channel_stack_builder.cc:41
grpc_core::ChannelStackBuilder::target_
std::string target_
Definition: channel_stack_builder.h:101
grpc_core::ChannelStackBuilder::transport_
grpc_transport * transport_
Definition: channel_stack_builder.h:103
grpc_core::ChannelStackBuilder::transport
grpc_transport * transport() const
Definition: channel_stack_builder.h:63
grpc_core::ChannelStackBuilder::stack_
std::vector< const grpc_channel_filter * > stack_
Definition: channel_stack_builder.h:107
grpc_channel_stack_type
grpc_channel_stack_type
Definition: channel_stack_type.h:24
grpc_core::ChannelStackBuilder::type_
const grpc_channel_stack_type type_
Definition: channel_stack_builder.h:99
grpc_core::ChannelArgs
Definition: channel_args.h:111
ref_counted_ptr.h
grpc_transport
Definition: transport_impl.h:89
channel_args.h
absl::StatusOr
Definition: abseil-cpp/absl/status/statusor.h:187
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
grpc_core::ChannelStackBuilder::target
absl::string_view target() const
Definition: channel_stack_builder.h:53
grpc_core::ChannelStackBuilder::unknown_target
static std::string unknown_target()
Definition: channel_stack_builder.h:94
port_platform.h


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:44