1 // 2 // 3 // Copyright 2018 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 19 #ifndef GRPCPP_IMPL_CALL_OP_SET_INTERFACE_H 20 #define GRPCPP_IMPL_CALL_OP_SET_INTERFACE_H 21 22 // IWYU pragma: private 23 24 #include <grpcpp/impl/completion_queue_tag.h> 25 26 namespace grpc { 27 namespace internal { 28 29 class Call; 30 31 /// An abstract collection of call ops, used to generate the 32 /// grpc_call_op structure to pass down to the lower layers, 33 /// and as it is-a CompletionQueueTag, also massages the final 34 /// completion into the correct form for consumption in the C++ 35 /// API. 36 class CallOpSetInterface : public CompletionQueueTag { 37 public: 38 /// Fills in grpc_op, starting from ops[*nops] and moving 39 /// upwards. 40 virtual void FillOps(internal::Call* call) = 0; 41 42 /// Get the tag to be used at the core completion queue. Generally, the 43 /// value of core_cq_tag will be "this". However, it can be overridden if we 44 /// want core to process the tag differently (e.g., as a core callback) 45 virtual void* core_cq_tag() = 0; 46 47 // This will be called while interceptors are run if the RPC is a hijacked 48 // RPC. This should set hijacking state for each of the ops. 49 virtual void SetHijackingState() = 0; 50 51 // Should be called after interceptors are done running 52 virtual void ContinueFillOpsAfterInterception() = 0; 53 54 // Should be called after interceptors are done running on the finalize result 55 // path 56 virtual void ContinueFinalizeResultAfterInterception() = 0; 57 }; 58 } // namespace internal 59 } // namespace grpc 60 61 #endif // GRPCPP_IMPL_CALL_OP_SET_INTERFACE_H 62