xref: /aosp_15_r20/external/grpc-grpc/include/grpcpp/impl/intercepted_channel.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker //
2*cc02d7e2SAndroid Build Coastguard Worker //
3*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2018 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker //
5*cc02d7e2SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker // You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker //
9*cc02d7e2SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker //
11*cc02d7e2SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker // limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker //
17*cc02d7e2SAndroid Build Coastguard Worker //
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker #ifndef GRPCPP_IMPL_INTERCEPTED_CHANNEL_H
20*cc02d7e2SAndroid Build Coastguard Worker #define GRPCPP_IMPL_INTERCEPTED_CHANNEL_H
21*cc02d7e2SAndroid Build Coastguard Worker 
22*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/impl/channel_interface.h>
23*cc02d7e2SAndroid Build Coastguard Worker 
24*cc02d7e2SAndroid Build Coastguard Worker namespace grpc {
25*cc02d7e2SAndroid Build Coastguard Worker class CompletionQueue;
26*cc02d7e2SAndroid Build Coastguard Worker 
27*cc02d7e2SAndroid Build Coastguard Worker namespace internal {
28*cc02d7e2SAndroid Build Coastguard Worker 
29*cc02d7e2SAndroid Build Coastguard Worker class InterceptorBatchMethodsImpl;
30*cc02d7e2SAndroid Build Coastguard Worker 
31*cc02d7e2SAndroid Build Coastguard Worker /// An InterceptedChannel is available to client Interceptors. An
32*cc02d7e2SAndroid Build Coastguard Worker /// InterceptedChannel is unique to an interceptor, and when an RPC is started
33*cc02d7e2SAndroid Build Coastguard Worker /// on this channel, only those interceptors that come after this interceptor
34*cc02d7e2SAndroid Build Coastguard Worker /// see the RPC.
35*cc02d7e2SAndroid Build Coastguard Worker class InterceptedChannel : public ChannelInterface {
36*cc02d7e2SAndroid Build Coastguard Worker  public:
~InterceptedChannel()37*cc02d7e2SAndroid Build Coastguard Worker   ~InterceptedChannel() override { channel_ = nullptr; }
38*cc02d7e2SAndroid Build Coastguard Worker 
39*cc02d7e2SAndroid Build Coastguard Worker   /// Get the current channel state. If the channel is in IDLE and
40*cc02d7e2SAndroid Build Coastguard Worker   /// \a try_to_connect is set to true, try to connect.
GetState(bool try_to_connect)41*cc02d7e2SAndroid Build Coastguard Worker   grpc_connectivity_state GetState(bool try_to_connect) override {
42*cc02d7e2SAndroid Build Coastguard Worker     return channel_->GetState(try_to_connect);
43*cc02d7e2SAndroid Build Coastguard Worker   }
44*cc02d7e2SAndroid Build Coastguard Worker 
45*cc02d7e2SAndroid Build Coastguard Worker  private:
InterceptedChannel(ChannelInterface * channel,size_t pos)46*cc02d7e2SAndroid Build Coastguard Worker   InterceptedChannel(ChannelInterface* channel, size_t pos)
47*cc02d7e2SAndroid Build Coastguard Worker       : channel_(channel), interceptor_pos_(pos) {}
48*cc02d7e2SAndroid Build Coastguard Worker 
CreateCall(const RpcMethod & method,grpc::ClientContext * context,grpc::CompletionQueue * cq)49*cc02d7e2SAndroid Build Coastguard Worker   Call CreateCall(const RpcMethod& method, grpc::ClientContext* context,
50*cc02d7e2SAndroid Build Coastguard Worker                   grpc::CompletionQueue* cq) override {
51*cc02d7e2SAndroid Build Coastguard Worker     return channel_->CreateCallInternal(method, context, cq, interceptor_pos_);
52*cc02d7e2SAndroid Build Coastguard Worker   }
53*cc02d7e2SAndroid Build Coastguard Worker 
PerformOpsOnCall(CallOpSetInterface * ops,Call * call)54*cc02d7e2SAndroid Build Coastguard Worker   void PerformOpsOnCall(CallOpSetInterface* ops, Call* call) override {
55*cc02d7e2SAndroid Build Coastguard Worker     return channel_->PerformOpsOnCall(ops, call);
56*cc02d7e2SAndroid Build Coastguard Worker   }
RegisterMethod(const char * method)57*cc02d7e2SAndroid Build Coastguard Worker   void* RegisterMethod(const char* method) override {
58*cc02d7e2SAndroid Build Coastguard Worker     return channel_->RegisterMethod(method);
59*cc02d7e2SAndroid Build Coastguard Worker   }
60*cc02d7e2SAndroid Build Coastguard Worker 
NotifyOnStateChangeImpl(grpc_connectivity_state last_observed,gpr_timespec deadline,grpc::CompletionQueue * cq,void * tag)61*cc02d7e2SAndroid Build Coastguard Worker   void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed,
62*cc02d7e2SAndroid Build Coastguard Worker                                gpr_timespec deadline, grpc::CompletionQueue* cq,
63*cc02d7e2SAndroid Build Coastguard Worker                                void* tag) override {
64*cc02d7e2SAndroid Build Coastguard Worker     return channel_->NotifyOnStateChangeImpl(last_observed, deadline, cq, tag);
65*cc02d7e2SAndroid Build Coastguard Worker   }
WaitForStateChangeImpl(grpc_connectivity_state last_observed,gpr_timespec deadline)66*cc02d7e2SAndroid Build Coastguard Worker   bool WaitForStateChangeImpl(grpc_connectivity_state last_observed,
67*cc02d7e2SAndroid Build Coastguard Worker                               gpr_timespec deadline) override {
68*cc02d7e2SAndroid Build Coastguard Worker     return channel_->WaitForStateChangeImpl(last_observed, deadline);
69*cc02d7e2SAndroid Build Coastguard Worker   }
70*cc02d7e2SAndroid Build Coastguard Worker 
CallbackCQ()71*cc02d7e2SAndroid Build Coastguard Worker   grpc::CompletionQueue* CallbackCQ() override {
72*cc02d7e2SAndroid Build Coastguard Worker     return channel_->CallbackCQ();
73*cc02d7e2SAndroid Build Coastguard Worker   }
74*cc02d7e2SAndroid Build Coastguard Worker 
75*cc02d7e2SAndroid Build Coastguard Worker   ChannelInterface* channel_;
76*cc02d7e2SAndroid Build Coastguard Worker   size_t interceptor_pos_;
77*cc02d7e2SAndroid Build Coastguard Worker 
78*cc02d7e2SAndroid Build Coastguard Worker   friend class InterceptorBatchMethodsImpl;
79*cc02d7e2SAndroid Build Coastguard Worker };
80*cc02d7e2SAndroid Build Coastguard Worker }  // namespace internal
81*cc02d7e2SAndroid Build Coastguard Worker }  // namespace grpc
82*cc02d7e2SAndroid Build Coastguard Worker 
83*cc02d7e2SAndroid Build Coastguard Worker #endif  // GRPCPP_IMPL_INTERCEPTED_CHANNEL_H
84