Merge branch 'master' of github.com:vjpai/grpc
diff --git a/include/grpc++/server_context.h b/include/grpc++/server_context.h
index 36cbae8..9e3b80c 100644
--- a/include/grpc++/server_context.h
+++ b/include/grpc++/server_context.h
@@ -78,6 +78,8 @@
   void AddInitialMetadata(const grpc::string& key, const grpc::string& value);
   void AddTrailingMetadata(const grpc::string& key, const grpc::string& value);
 
+  bool IsCancelled();
+
   const std::multimap<grpc::string, grpc::string>& client_metadata() {
     return client_metadata_;
   }
@@ -110,6 +112,7 @@
 
   std::chrono::system_clock::time_point deadline_;
   grpc_call* call_;
+  CompletionQueue* cq_;
   bool sent_initial_metadata_;
   std::multimap<grpc::string, grpc::string> client_metadata_;
   std::multimap<grpc::string, grpc::string> initial_metadata_;
diff --git a/src/cpp/server/server_context.cc b/src/cpp/server/server_context.cc
index 435a060..bb3c2d1 100644
--- a/src/cpp/server/server_context.cc
+++ b/src/cpp/server/server_context.cc
@@ -94,6 +94,7 @@
 ServerContext::ServerContext()
     : completion_op_(nullptr),
       call_(nullptr),
+      cq_(nullptr),
       sent_initial_metadata_(false) {}
 
 ServerContext::ServerContext(gpr_timespec deadline, grpc_metadata* metadata,
@@ -101,6 +102,7 @@
     : completion_op_(nullptr),
       deadline_(Timespec2Timepoint(deadline)),
       call_(nullptr),
+      cq_(nullptr),
       sent_initial_metadata_(false) {
   for (size_t i = 0; i < metadata_count; i++) {
     client_metadata_.insert(std::make_pair(
@@ -135,4 +137,8 @@
   trailing_metadata_.insert(std::make_pair(key, value));
 }
 
+bool ServerContext::IsCancelled() {
+  return completion_op_ && completion_op_->CheckCancelled(cq_);
+}
+
 }  // namespace grpc