3
* Copyright 2015, Google Inc.
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions are
10
* * Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* * Redistributions in binary form must reproduce the above
13
* copyright notice, this list of conditions and the following disclaimer
14
* in the documentation and/or other materials provided with the
16
* * Neither the name of Google Inc. nor the names of its
17
* contributors may be used to endorse or promote products derived from
18
* this software without specific prior written permission.
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
#include <grpc++/client_context.h>
36
#include <grpc/grpc.h>
37
#include <grpc++/credentials.h>
38
#include <grpc++/time.h>
39
#include "src/cpp/common/create_auth_context.h"
43
ClientContext::ClientContext()
44
: initial_metadata_received_(false),
47
deadline_(gpr_inf_future) {}
49
ClientContext::~ClientContext() {
51
grpc_call_destroy(call_);
55
grpc_completion_queue_shutdown(cq_);
56
while (grpc_completion_queue_next(cq_, gpr_inf_future).type !=
59
grpc_completion_queue_destroy(cq_);
63
void ClientContext::AddMetadata(const grpc::string& meta_key,
64
const grpc::string& meta_value) {
65
send_initial_metadata_.insert(std::make_pair(meta_key, meta_value));
68
void ClientContext::set_call(grpc_call* call,
69
const std::shared_ptr<ChannelInterface>& channel) {
70
GPR_ASSERT(call_ == nullptr);
73
if (creds_ && !creds_->ApplyToCall(call_)) {
74
grpc_call_cancel_with_status(call, GRPC_STATUS_CANCELLED,
75
"Failed to set credentials to rpc.");
79
std::shared_ptr<const AuthContext> ClientContext::auth_context() const {
80
if (auth_context_.get() == nullptr) {
81
auth_context_ = CreateAuthContext(call_);
86
void ClientContext::TryCancel() {
88
grpc_call_cancel(call_);