19 #ifndef GRPCPP_IMPL_CODEGEN_INTERCEPTOR_COMMON_H 20 #define GRPCPP_IMPL_CODEGEN_INTERCEPTOR_COMMON_H 40 for (
auto i = static_cast<experimental::InterceptionHookPoints>(0);
43 static_cast<size_t>(i) + 1)) {
44 hooks_[
static_cast<size_t>(i)] =
false;
52 return hooks_[
static_cast<size_t>(type)];
57 return ProceedClient();
70 rpc_info->hijacked_ =
true;
71 rpc_info->hijacked_interceptor_ = current_interceptor_index_;
74 ran_hijacking_interceptor_ =
true;
75 rpc_info->RunInterceptor(
this, current_interceptor_index_);
79 hooks_[
static_cast<size_t>(type)] =
true;
85 return send_initial_metadata_;
89 return Status(static_cast<StatusCode>(*code_), *error_message_,
101 return send_trailing_metadata_;
108 return recv_initial_metadata_->
map();
115 return recv_trailing_metadata_->
map();
121 std::multimap<grpc::string, grpc::string>* metadata) {
122 send_initial_metadata_ = metadata;
128 error_details_ = error_details;
129 error_message_ = error_message;
133 std::multimap<grpc::string, grpc::string>* metadata) {
134 send_trailing_metadata_ = metadata;
140 recv_initial_metadata_ = map;
146 recv_trailing_metadata_ = map;
151 if (info ==
nullptr) {
152 return std::unique_ptr<ChannelInterface>(
nullptr);
157 info->channel(), current_interceptor_index_ + 1));
163 ran_hijacking_interceptor_ =
false;
170 ran_hijacking_interceptor_ =
false;
190 if (client_rpc_info !=
nullptr) {
191 if (client_rpc_info->interceptors_.size() == 0) {
194 RunClientInterceptors();
200 if (server_rpc_info ==
nullptr ||
201 server_rpc_info->interceptors_.size() == 0) {
204 RunServerInterceptors();
217 if (server_rpc_info ==
nullptr ||
218 server_rpc_info->interceptors_.size() == 0) {
221 callback_ = std::move(f);
222 RunServerInterceptors();
227 void RunClientInterceptors() {
230 current_interceptor_index_ = 0;
232 if (rpc_info->hijacked_) {
233 current_interceptor_index_ = rpc_info->hijacked_interceptor_;
235 current_interceptor_index_ = rpc_info->interceptors_.size() - 1;
238 rpc_info->RunInterceptor(
this, current_interceptor_index_);
241 void RunServerInterceptors() {
244 current_interceptor_index_ = 0;
246 current_interceptor_index_ = rpc_info->interceptors_.size() - 1;
248 rpc_info->RunInterceptor(
this, current_interceptor_index_);
251 void ProceedClient() {
253 if (rpc_info->hijacked_ && !reverse_ &&
254 current_interceptor_index_ == rpc_info->hijacked_interceptor_ &&
255 !ran_hijacking_interceptor_) {
259 ran_hijacking_interceptor_ =
true;
260 rpc_info->RunInterceptor(
this, current_interceptor_index_);
264 current_interceptor_index_++;
266 if (current_interceptor_index_ < rpc_info->interceptors_.size()) {
267 if (rpc_info->hijacked_ &&
268 current_interceptor_index_ > rpc_info->hijacked_interceptor_) {
272 rpc_info->RunInterceptor(
this, current_interceptor_index_);
280 if (current_interceptor_index_ > 0) {
282 current_interceptor_index_--;
283 rpc_info->RunInterceptor(
this, current_interceptor_index_);
291 void ProceedServer() {
294 current_interceptor_index_++;
295 if (current_interceptor_index_ < rpc_info->interceptors_.size()) {
296 return rpc_info->RunInterceptor(
this, current_interceptor_index_);
302 if (current_interceptor_index_ > 0) {
304 current_interceptor_index_--;
305 return rpc_info->RunInterceptor(
this, current_interceptor_index_);
314 void ClearHookPoints() {
315 for (
auto i = static_cast<experimental::InterceptionHookPoints>(0);
318 static_cast<size_t>(i) + 1)) {
319 hooks_[
static_cast<size_t>(i)] =
false;
328 size_t current_interceptor_index_ = 0;
329 bool reverse_ =
false;
330 bool ran_hijacking_interceptor_ =
false;
331 Call* call_ =
nullptr;
334 std::function<void(void)> callback_;
338 std::multimap<grpc::string, grpc::string>* send_initial_metadata_;
345 std::multimap<grpc::string, grpc::string>* send_trailing_metadata_ =
nullptr;
347 void* recv_message_ =
nullptr;
351 Status* recv_status_ =
nullptr;
378 "It is illegal to call Hijack on a method which has a " 379 "Cancel notification");
384 "It is illegal to call GetSendMessage on a method which " 385 "has a Cancel notification");
391 "It is illegal to call GetSendInitialMetadata on a " 392 "method which has a Cancel notification");
398 "It is illegal to call GetSendStatus on a method which " 399 "has a Cancel notification");
405 "It is illegal to call ModifySendStatus on a method " 406 "which has a Cancel notification");
413 "It is illegal to call GetSendTrailingMetadata on a " 414 "method which has a Cancel notification");
420 "It is illegal to call GetRecvMessage on a method which " 421 "has a Cancel notification");
428 "It is illegal to call GetRecvInitialMetadata on a " 429 "method which has a Cancel notification");
435 "It is illegal to call GetRecvStatus on a method which " 436 "has a Cancel notification");
443 "It is illegal to call GetRecvTrailingMetadata on a " 444 "method which has a Cancel notification");
450 "It is illegal to call GetInterceptedChannel on a " 451 "method which has a Cancel notification");
452 return std::unique_ptr<ChannelInterface>(
nullptr);
458 #endif // GRPCPP_IMPL_CODEGEN_INTERCEPTOR_COMMON_H bool RunInterceptors(std::function< void(void)> f)
Definition: interceptor_common.h:212
void SetRecvMessage(void *message)
Definition: interceptor_common.h:137
std::multimap< grpc::string_ref, grpc::string_ref > * GetRecvInitialMetadata() override
Definition: interceptor_common.h:425
void SetCall(Call *call)
Definition: interceptor_common.h:175
grpc_status_code
Definition: status.h:26
void ModifySendStatus(const Status &status) override
Definition: interceptor_common.h:93
#define GPR_CODEGEN_ASSERT(x)
Codegen specific version of GPR_ASSERT.
Definition: core_codegen_interface.h:141
Definition: interceptor_common.h:358
std::string string
Definition: config.h:35
Status * GetRecvStatus() override
Definition: interceptor_common.h:111
void SetSendMessage(ByteBuffer *buf)
Definition: interceptor_common.h:118
std::multimap< grpc::string, grpc::string > * GetSendInitialMetadata() override
Definition: interceptor_common.h:389
Definition: interceptor.h:69
std::multimap< grpc::string_ref, grpc::string_ref > * GetRecvTrailingMetadata() override
Definition: interceptor_common.h:440
void * GetRecvMessage() override
Definition: interceptor_common.h:418
std::multimap< grpc::string_ref, grpc::string_ref > * GetRecvInitialMetadata() override
Definition: interceptor_common.h:106
void SetReverse()
Definition: interceptor_common.h:168
void SetRecvStatus(Status *status)
Definition: interceptor_common.h:143
InterceptorBatchMethodsImpl()
Definition: interceptor_common.h:39
std::unique_ptr< ChannelInterface > GetInterceptedChannel() override
Definition: interceptor_common.h:448
std::multimap< grpc::string_ref, grpc::string_ref > * GetRecvTrailingMetadata() override
Definition: interceptor_common.h:113
void ModifySendStatus(const Status &status) override
Definition: interceptor_common.h:403
bool QueryInterceptionHookPoint(experimental::InterceptionHookPoints type) override
Definition: interceptor_common.h:50
virtual void ContinueFillOpsAfterInterception()=0
void Hijack() override
Definition: interceptor_common.h:63
ByteBuffer * GetSendMessage() override
Definition: interceptor_common.h:382
bool RunInterceptors()
Definition: interceptor_common.h:187
Status GetSendStatus() override
Definition: interceptor_common.h:396
::google::protobuf::util::Status Status
Definition: config_protobuf.h:93
InterceptionHookPoints
Definition: interceptor.h:43
Status * GetRecvStatus() override
Definition: interceptor_common.h:433
grpc::string error_message() const
Return the instance's error message.
Definition: status.h:112
ByteBuffer * GetSendMessage() override
Definition: interceptor_common.h:82
StatusCode error_code() const
Return the instance's error code.
Definition: status.h:110
void Proceed() override
Definition: interceptor_common.h:370
An InterceptedChannel is available to client Interceptors.
Definition: intercepted_channel.h:34
virtual void ContinueFinalizeResultAfterInterception()=0
void * GetRecvMessage() override
Definition: interceptor_common.h:104
experimental::ServerRpcInfo * server_rpc_info() const
Definition: call.h:79
An Alarm posts the user provided tag to its associated completion queue upon expiry or cancellation...
Definition: alarm.h:33
std::multimap< grpc::string, grpc::string > * GetSendTrailingMetadata() override
Definition: interceptor_common.h:99
Definition: interceptor_common.h:36
Status GetSendStatus() override
Definition: interceptor_common.h:88
experimental::ClientRpcInfo * client_rpc_info() const
Definition: call.h:75
std::multimap< grpc::string, grpc::string > * GetSendInitialMetadata() override
Definition: interceptor_common.h:84
virtual void SetHijackingState()=0
~InterceptorBatchMethodsImpl()
Definition: interceptor_common.h:48
bool QueryInterceptionHookPoint(experimental::InterceptionHookPoints type) override
Definition: interceptor_common.h:361
An abstract collection of call ops, used to generate the grpc_call_op structure to pass down to the l...
Definition: call_op_set_interface.h:34
void SetSendStatus(grpc_status_code *code, grpc::string *error_details, grpc::string *error_message)
Definition: interceptor_common.h:125
void SetSendTrailingMetadata(std::multimap< grpc::string, grpc::string > *metadata)
Definition: interceptor_common.h:132
void SetRecvInitialMetadata(MetadataMap *map)
Definition: interceptor_common.h:139
void ClearState()
Definition: interceptor_common.h:161
void Hijack() override
Definition: interceptor_common.h:375
std::multimap< grpc::string, grpc::string > * GetSendTrailingMetadata() override
Definition: interceptor_common.h:410
void SetSendInitialMetadata(std::multimap< grpc::string, grpc::string > *metadata)
Definition: interceptor_common.h:120
Did it work? If it didn't, why?
Definition: status.h:31
void Proceed() override
Definition: interceptor_common.h:55
void AddInterceptionHookPoint(experimental::InterceptionHookPoints type)
Definition: interceptor_common.h:78
std::unique_ptr< ChannelInterface > GetInterceptedChannel() override
Definition: interceptor_common.h:149
void SetRecvTrailingMetadata(MetadataMap *map)
Definition: interceptor_common.h:145
void SetCallOpSetInterface(CallOpSetInterface *ops)
Definition: interceptor_common.h:179
A sequence of bytes.
Definition: byte_buffer.h:62
grpc::string error_details() const
Return the (binary) error details.
Definition: status.h:115
Straightforward wrapping of the C call object.
Definition: call.h:36