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