| 
					
				 | 
			
			
				@@ -45,17 +45,31 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 namespace grpc { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class DefaultGlobalClientCallbacks GRPC_FINAL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    : public ClientContext::GlobalCallbacks { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void DefaultConstructor(ClientContext* context) GRPC_OVERRIDE {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  void Destructor(ClientContext* context) GRPC_OVERRIDE {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static DefaultGlobalClientCallbacks g_default_client_callbacks; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static ClientContext::GlobalCallbacks* g_client_callbacks = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    &g_default_client_callbacks; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ClientContext::ClientContext() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     : initial_metadata_received_(false), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       call_(nullptr), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       call_canceled_(false), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       deadline_(gpr_inf_future(GPR_CLOCK_REALTIME)), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      propagate_from_call_(nullptr) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      propagate_from_call_(nullptr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  g_client_callbacks->DefaultConstructor(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ClientContext::~ClientContext() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (call_) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_call_destroy(call_); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  g_client_callbacks->Destructor(this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 std::unique_ptr<ClientContext> ClientContext::FromServerContext( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -124,4 +138,11 @@ grpc::string ClientContext::peer() const { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return peer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ClientContext::SetGlobalCallbacks(GlobalCallbacks* client_callbacks) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(g_client_callbacks == &g_default_client_callbacks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(client_callbacks != NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GPR_ASSERT(client_callbacks != &g_default_client_callbacks); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  g_client_callbacks = client_callbacks; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }  // namespace grpc 
			 |