GRPC C++  1.20.0
server_context.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 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_SERVER_CONTEXT_H
20 #define GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_H
21 
22 #include <map>
23 #include <memory>
24 #include <vector>
25 
27 
39 
40 struct grpc_metadata;
41 struct grpc_call;
42 struct census_context;
43 
44 namespace grpc {
45 class ClientContext;
46 class GenericServerContext;
47 class CompletionQueue;
48 class Server;
49 class ServerInterface;
50 template <class W, class R>
51 class ServerAsyncReader;
52 template <class W>
53 class ServerAsyncWriter;
54 template <class W>
55 class ServerAsyncResponseWriter;
56 template <class W, class R>
57 class ServerAsyncReaderWriter;
58 template <class R>
59 class ServerReader;
60 template <class W>
61 class ServerWriter;
62 
63 namespace internal {
64 template <class W, class R>
65 class ServerReaderWriterBody;
66 template <class ServiceType, class RequestType, class ResponseType>
67 class RpcMethodHandler;
68 template <class ServiceType, class RequestType, class ResponseType>
69 class ClientStreamingHandler;
70 template <class ServiceType, class RequestType, class ResponseType>
71 class ServerStreamingHandler;
72 template <class ServiceType, class RequestType, class ResponseType>
73 class BidiStreamingHandler;
74 template <class RequestType, class ResponseType>
75 class CallbackUnaryHandler;
76 template <class RequestType, class ResponseType>
77 class CallbackClientStreamingHandler;
78 template <class RequestType, class ResponseType>
79 class CallbackServerStreamingHandler;
80 template <class RequestType, class ResponseType>
81 class CallbackBidiHandler;
82 template <class Streamer, bool WriteNeeded>
83 class TemplatedBidiStreamingHandler;
84 template <StatusCode code>
85 class ErrorMethodHandler;
86 class Call;
87 class ServerReactor;
88 } // namespace internal
89 
90 namespace testing {
91 class InteropServerContextInspector;
92 class ServerContextTestSpouse;
93 } // namespace testing
94 
111  public:
112  ServerContext(); // for async calls
113  ~ServerContext();
114 
116  std::chrono::system_clock::time_point deadline() const {
117  return Timespec2Timepoint(deadline_);
118  }
119 
121  gpr_timespec raw_deadline() const { return deadline_; }
122 
142  void AddInitialMetadata(const grpc::string& key, const grpc::string& value);
143 
163  void AddTrailingMetadata(const grpc::string& key, const grpc::string& value);
164 
168  bool IsCancelled() const;
169 
186  void TryCancel() const;
187 
197  const std::multimap<grpc::string_ref, grpc::string_ref>& client_metadata()
198  const {
199  return *client_metadata_.map();
200  }
201 
204  return compression_level_;
205  }
206 
211  compression_level_set_ = true;
212  compression_level_ = level;
213  }
214 
218  bool compression_level_set() const { return compression_level_set_; }
219 
225  return compression_algorithm_;
226  }
230  void set_compression_algorithm(grpc_compression_algorithm algorithm);
231 
233  void SetLoadReportingCosts(const std::vector<grpc::string>& cost_data);
234 
238  std::shared_ptr<const AuthContext> auth_context() const {
239  if (auth_context_.get() == nullptr) {
240  auth_context_ = CreateAuthContext(call_);
241  }
242  return auth_context_;
243  }
244 
249  grpc::string peer() const;
250 
252  const struct census_context* census_context() const;
253 
259  void AsyncNotifyWhenDone(void* tag) {
260  has_notify_when_done_tag_ = true;
261  async_notify_when_done_tag_ = tag;
262  }
263 
266  grpc_call* c_call() { return call_; }
267 
268  private:
269  friend class ::grpc::testing::InteropServerContextInspector;
270  friend class ::grpc::testing::ServerContextTestSpouse;
271  friend class ::grpc::ServerInterface;
272  friend class ::grpc::Server;
273  template <class W, class R>
274  friend class ::grpc::ServerAsyncReader;
275  template <class W>
276  friend class ::grpc::ServerAsyncWriter;
277  template <class W>
278  friend class ::grpc::ServerAsyncResponseWriter;
279  template <class W, class R>
280  friend class ::grpc::ServerAsyncReaderWriter;
281  template <class R>
282  friend class ::grpc::ServerReader;
283  template <class W>
284  friend class ::grpc::ServerWriter;
285  template <class W, class R>
286  friend class ::grpc::internal::ServerReaderWriterBody;
287  template <class ServiceType, class RequestType, class ResponseType>
288  friend class ::grpc::internal::RpcMethodHandler;
289  template <class ServiceType, class RequestType, class ResponseType>
290  friend class ::grpc::internal::ClientStreamingHandler;
291  template <class ServiceType, class RequestType, class ResponseType>
292  friend class ::grpc::internal::ServerStreamingHandler;
293  template <class Streamer, bool WriteNeeded>
294  friend class ::grpc::internal::TemplatedBidiStreamingHandler;
295  template <class RequestType, class ResponseType>
296  friend class ::grpc::internal::CallbackUnaryHandler;
297  template <class RequestType, class ResponseType>
298  friend class ::grpc::internal::CallbackClientStreamingHandler;
299  template <class RequestType, class ResponseType>
300  friend class ::grpc::internal::CallbackServerStreamingHandler;
301  template <class RequestType, class ResponseType>
302  friend class ::grpc::internal::CallbackBidiHandler;
303  template <StatusCode code>
305  friend class ::grpc::ClientContext;
306  friend class ::grpc::GenericServerContext;
307 
310  ServerContext& operator=(const ServerContext&);
311 
312  class CompletionOp;
313 
314  void BeginCompletionOp(internal::Call* call,
315  std::function<void(bool)> callback,
316  internal::ServerReactor* reactor);
318  internal::CompletionQueueTag* GetCompletionOpTag();
319 
321 
322  void set_call(grpc_call* call) { call_ = call; }
323 
324  void BindDeadlineAndMetadata(gpr_timespec deadline, grpc_metadata_array* arr);
325 
326  void Clear();
327 
328  void Setup(gpr_timespec deadline);
329 
330  uint32_t initial_metadata_flags() const { return 0; }
331 
332  void SetCancelCallback(std::function<void()> callback);
333  void ClearCancelCallback();
334 
335  experimental::ServerRpcInfo* set_server_rpc_info(
336  const char* method, internal::RpcMethod::RpcType type,
337  const std::vector<
338  std::unique_ptr<experimental::ServerInterceptorFactoryInterface>>&
339  creators) {
340  if (creators.size() != 0) {
341  rpc_info_ = new experimental::ServerRpcInfo(this, method, type);
342  rpc_info_->RegisterInterceptors(creators);
343  }
344  return rpc_info_;
345  }
346 
347  CompletionOp* completion_op_;
348  bool has_notify_when_done_tag_;
349  void* async_notify_when_done_tag_;
350  internal::CallbackWithSuccessTag completion_tag_;
351 
352  gpr_timespec deadline_;
353  grpc_call* call_;
354  CompletionQueue* cq_;
355  bool sent_initial_metadata_;
356  mutable std::shared_ptr<const AuthContext> auth_context_;
357  mutable internal::MetadataMap client_metadata_;
358  std::multimap<grpc::string, grpc::string> initial_metadata_;
359  std::multimap<grpc::string, grpc::string> trailing_metadata_;
360 
361  bool compression_level_set_;
362  grpc_compression_level compression_level_;
363  grpc_compression_algorithm compression_algorithm_;
364 
367  pending_ops_;
368  bool has_pending_ops_;
369 
370  experimental::ServerRpcInfo* rpc_info_;
371 };
372 
373 } // namespace grpc
374 
375 #endif // GRPCPP_IMPL_CODEGEN_SERVER_CONTEXT_H
struct grpc_call grpc_call
A Call represents an RPC.
Definition: grpc_types.h:70
std::shared_ptr< const AuthContext > CreateAuthContext(grpc_call *call)
std::string string
Definition: config.h:35
An interface allowing implementors to process and filter event tags.
Definition: completion_queue_tag.h:26
Definition: metadata_map.h:33
Primary implementation of CallOpSetInterface.
Definition: call_op_set.h:828
void set_compression_level(grpc_compression_level level)
Set level to be the compression level used for the server call.
Definition: server_context.h:210
grpc_compression_algorithm compression_algorithm() const
Return the compression algorithm the server call will request be used.
Definition: server_context.h:224
void AsyncNotifyWhenDone(void *tag)
Async only.
Definition: server_context.h:259
Definition: grpc_types.h:501
grpc_compression_level
Compression levels allow a party with knowledge of its peer&#39;s accepted encodings to request compressi...
Definition: compression_types.h:71
RpcType
Definition: rpc_method.h:31
const std::multimap< grpc::string_ref, grpc::string_ref > & client_metadata() const
Return a collection of initial metadata key-value pairs sent from the client.
Definition: server_context.h:197
grpc_compression_level compression_level() const
Return the compression algorithm to be used by the server call.
Definition: server_context.h:203
std::chrono::system_clock::time_point deadline() const
Return the deadline for the server call.
Definition: server_context.h:116
bool compression_level_set() const
Return a bool indicating whether the compression level for this call has been set (either implicitly ...
Definition: server_context.h:218
Definition: call_op_set.h:224
A single metadata element.
Definition: grpc_types.h:458
Definition: call_op_set.h:294
grpc_compression_algorithm
The various compression algorithms supported by gRPC (not sorted by compression level) ...
Definition: compression_types.h:57
ServerRpcInfo represents the state of a particular RPC as it appears to an interceptor.
Definition: server_interceptor.h:58
Definition: server_callback.h:40
This header provides an object that reads bytes directly from a grpc::ByteBuffer, via the ZeroCopyInp...
Definition: alarm.h:24
A ServerContext allows the person implementing a service handler to:
Definition: server_context.h:110
gpr_timespec raw_deadline() const
Return a gpr_timespec representation of the server call&#39;s deadline.
Definition: server_context.h:121
A thin wrapper around grpc_completion_queue (see src/core/lib/surface/completion_queue.h).
Definition: completion_queue.h:97
CallbackWithSuccessTag can be reused multiple times, and will be used in this fashion for streaming o...
Definition: callback_common.h:132
std::shared_ptr< const AuthContext > auth_context() const
Return the authentication context for this server call.
Definition: server_context.h:238
General method handler class for errors that prevent real method use e.g., handle unknown method by r...
Definition: byte_buffer.h:53
Analogous to struct timespec.
Definition: gpr_types.h:47
std::chrono::system_clock::time_point Timespec2Timepoint(gpr_timespec t)
grpc_call * c_call()
Should be used for framework-level extensions only.
Definition: server_context.h:266
Straightforward wrapping of the C call object.
Definition: call.h:36