aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/grpc++/impl
diff options
context:
space:
mode:
authorGravatar yang-g <yangg@google.com>2015-08-13 11:15:53 -0700
committerGravatar yang-g <yangg@google.com>2015-08-13 11:15:53 -0700
commit9b7757dd356dae2549433d5b2686ce9a902c7bcc (patch)
tree73156a3771c071957f0c0cf8fd245ef84ec45061 /include/grpc++/impl
parentabfa427d654529dec5ad0dad790f5bf7f991ac85 (diff)
Use a sync service to handle requests to unknown services
Diffstat (limited to 'include/grpc++/impl')
-rw-r--r--include/grpc++/impl/rpc_service_method.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/grpc++/impl/rpc_service_method.h b/include/grpc++/impl/rpc_service_method.h
index 3cfbef7806..925801e1ce 100644
--- a/include/grpc++/impl/rpc_service_method.h
+++ b/include/grpc++/impl/rpc_service_method.h
@@ -208,6 +208,21 @@ class BidiStreamingHandler : public MethodHandler {
ServiceType* service_;
};
+// Handle unknown method by returning UNIMPLEMENTED error.
+class UnknownMethodHandler : public MethodHandler {
+ public:
+ void RunHandler(const HandlerParameter& param) GRPC_FINAL {
+ Status status(StatusCode::UNIMPLEMENTED, "");
+ CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
+ if (!param.server_context->sent_initial_metadata_) {
+ ops.SendInitialMetadata(param.server_context->initial_metadata_);
+ }
+ ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
+ param.call->PerformOps(&ops);
+ param.call->cq()->Pluck(&ops);
+ }
+};
+
// Server side rpc method class
class RpcServiceMethod : public RpcMethod {
public: