Send initial metadata

pull/501/head
Craig Tiller 10 years ago
parent 7418d01de4
commit 9dcb0f8e1d
  1. 8
      include/grpc++/server_context.h
  2. 5
      src/cpp/server/server.cc
  3. 11
      src/cpp/server/server_context.cc

@ -53,12 +53,18 @@ class ServerContext {
std::chrono::system_clock::time_point absolute_deadline() { return deadline_; }
void AddInitialMetadata(const grpc::string& key, const grpc::string& value);
void AddTrailingMetadata(const grpc::string& key, const grpc::string& value);
private:
friend class ::grpc::Server;
ServerContext(gpr_timespec deadline, grpc_metadata *metadata, size_t metadata_count);
const std::chrono::system_clock::time_point deadline_;
std::multimap<grpc::string, grpc::string> metadata_;
bool sent_initial_metadata_ = false;
std::multimap<grpc::string, grpc::string> client_metadata_;
std::multimap<grpc::string, grpc::string> initial_metadata_;
std::multimap<grpc::string, grpc::string> trailing_metadata_;
};
} // namespace grpc

@ -172,10 +172,13 @@ class Server::MethodRequestData final : public CompletionQueueTag {
auto status = method_->handler()->RunHandler(
MethodHandler::HandlerParameter(&call_, &ctx_, req.get(), res.get()));
CallOpBuffer buf;
buf.AddServerSendStatus(nullptr, status);
if (!ctx_.sent_initial_metadata_) {
buf.AddSendInitialMetadata(&ctx_.initial_metadata_);
}
if (has_response_payload_) {
buf.AddSendMessage(*res);
}
buf.AddServerSendStatus(&ctx_.trailing_metadata_, status);
call_.PerformOps(&buf);
GPR_ASSERT(cq_.Pluck(&buf));
}

@ -37,11 +37,14 @@
namespace grpc {
ServerContext::ServerContext(gpr_timespec deadline, grpc_metadata *metadata, size_t metadata_count)
: deadline_(Timespec2Timepoint(deadline)) {
ServerContext::ServerContext(gpr_timespec deadline, grpc_metadata *metadata,
size_t metadata_count)
: deadline_(Timespec2Timepoint(deadline)) {
for (size_t i = 0; i < metadata_count; i++) {
metadata_.insert(std::make_pair(grpc::string(metadata[i].key),
grpc::string(metadata[i].value, metadata[i].value + metadata[i].value_length)));
client_metadata_.insert(std::make_pair(
grpc::string(metadata[i].key),
grpc::string(metadata[i].value,
metadata[i].value + metadata[i].value_length)));
}
}

Loading…
Cancel
Save