|  | @@ -292,134 +292,6 @@ void Server::PerformOpsOnCall(CallOpSetInterface* ops, Call* call) {
 | 
	
		
			
				|  |  |               grpc_call_start_batch(call->call(), cops, nops, ops));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -#if 0
 | 
	
		
			
				|  |  | -class Server::AsyncRequest GRPC_FINAL : public CompletionQueueTag {
 | 
	
		
			
				|  |  | - public:
 | 
	
		
			
				|  |  | -  AsyncRequest(Server* server, void* registered_method, ServerContext* ctx,
 | 
	
		
			
				|  |  | -               grpc::protobuf::Message* request,
 | 
	
		
			
				|  |  | -               ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq,
 | 
	
		
			
				|  |  | -               ServerCompletionQueue* notification_cq, void* tag)
 | 
	
		
			
				|  |  | -      : tag_(tag),
 | 
	
		
			
				|  |  | -        request_(request),
 | 
	
		
			
				|  |  | -        stream_(stream),
 | 
	
		
			
				|  |  | -        call_cq_(call_cq),
 | 
	
		
			
				|  |  | -        ctx_(ctx),
 | 
	
		
			
				|  |  | -        generic_ctx_(nullptr),
 | 
	
		
			
				|  |  | -        server_(server),
 | 
	
		
			
				|  |  | -        call_(nullptr),
 | 
	
		
			
				|  |  | -        payload_(nullptr) {
 | 
	
		
			
				|  |  | -    memset(&array_, 0, sizeof(array_));
 | 
	
		
			
				|  |  | -    grpc_call_details_init(&call_details_);
 | 
	
		
			
				|  |  | -    GPR_ASSERT(notification_cq);
 | 
	
		
			
				|  |  | -    GPR_ASSERT(call_cq);
 | 
	
		
			
				|  |  | -    grpc_server_request_registered_call(
 | 
	
		
			
				|  |  | -        server->server_, registered_method, &call_, &call_details_.deadline,
 | 
	
		
			
				|  |  | -        &array_, request ? &payload_ : nullptr, call_cq->cq(),
 | 
	
		
			
				|  |  | -        notification_cq->cq(), this);
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  AsyncRequest()
 | 
	
		
			
				|  |  | -      : tag_(tag),
 | 
	
		
			
				|  |  | -        request_(nullptr),
 | 
	
		
			
				|  |  | -        stream_(stream),
 | 
	
		
			
				|  |  | -        call_cq_(call_cq),
 | 
	
		
			
				|  |  | -        ctx_(nullptr),
 | 
	
		
			
				|  |  | -        generic_ctx_(ctx),
 | 
	
		
			
				|  |  | -        server_(server),
 | 
	
		
			
				|  |  | -        call_(nullptr),
 | 
	
		
			
				|  |  | -        payload_(nullptr) {
 | 
	
		
			
				|  |  | -    memset(&array_, 0, sizeof(array_));
 | 
	
		
			
				|  |  | -    grpc_call_details_init(&call_details_);
 | 
	
		
			
				|  |  | -    GPR_ASSERT(notification_cq);
 | 
	
		
			
				|  |  | -    GPR_ASSERT(call_cq);
 | 
	
		
			
				|  |  | -    grpc_server_request_call(server->server_, &call_, &call_details_, &array_,
 | 
	
		
			
				|  |  | -                             call_cq->cq(), notification_cq->cq(), this);
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  ~AsyncRequest() {
 | 
	
		
			
				|  |  | -    if (payload_) {
 | 
	
		
			
				|  |  | -      grpc_byte_buffer_destroy(payload_);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    grpc_metadata_array_destroy(&array_);
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE {
 | 
	
		
			
				|  |  | -    *tag = tag_;
 | 
	
		
			
				|  |  | -    bool orig_status = *status;
 | 
	
		
			
				|  |  | -    if (*status && request_) {
 | 
	
		
			
				|  |  | -      if (payload_) {
 | 
	
		
			
				|  |  | -        GRPC_TIMER_BEGIN(GRPC_PTAG_PROTO_DESERIALIZE, call_);
 | 
	
		
			
				|  |  | -        *status =
 | 
	
		
			
				|  |  | -            DeserializeProto(payload_, request_, server_->max_message_size_);
 | 
	
		
			
				|  |  | -        GRPC_TIMER_END(GRPC_PTAG_PROTO_DESERIALIZE, call_);
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        *status = false;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    ServerContext* ctx = ctx_ ? ctx_ : generic_ctx_;
 | 
	
		
			
				|  |  | -    GPR_ASSERT(ctx);
 | 
	
		
			
				|  |  | -    if (*status) {
 | 
	
		
			
				|  |  | -      ctx->deadline_ = call_details_.deadline;
 | 
	
		
			
				|  |  | -      for (size_t i = 0; i < array_.count; i++) {
 | 
	
		
			
				|  |  | -        ctx->client_metadata_.insert(std::make_pair(
 | 
	
		
			
				|  |  | -            grpc::string(array_.metadata[i].key),
 | 
	
		
			
				|  |  | -            grpc::string(
 | 
	
		
			
				|  |  | -                array_.metadata[i].value,
 | 
	
		
			
				|  |  | -                array_.metadata[i].value + array_.metadata[i].value_length)));
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      if (generic_ctx_) {
 | 
	
		
			
				|  |  | -        // TODO(yangg) remove the copy here.
 | 
	
		
			
				|  |  | -        generic_ctx_->method_ = call_details_.method;
 | 
	
		
			
				|  |  | -        generic_ctx_->host_ = call_details_.host;
 | 
	
		
			
				|  |  | -        gpr_free(call_details_.method);
 | 
	
		
			
				|  |  | -        gpr_free(call_details_.host);
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    ctx->call_ = call_;
 | 
	
		
			
				|  |  | -    ctx->cq_ = call_cq_;
 | 
	
		
			
				|  |  | -    Call call(call_, server_, call_cq_, server_->max_message_size_);
 | 
	
		
			
				|  |  | -    if (orig_status && call_) {
 | 
	
		
			
				|  |  | -      ctx->BeginCompletionOp(&call);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    // just the pointers inside call are copied here
 | 
	
		
			
				|  |  | -    stream_->BindCall(&call);
 | 
	
		
			
				|  |  | -    delete this;
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | - private:
 | 
	
		
			
				|  |  | -  void* const tag_;
 | 
	
		
			
				|  |  | -  grpc::protobuf::Message* const request_;
 | 
	
		
			
				|  |  | -  ServerAsyncStreamingInterface* const stream_;
 | 
	
		
			
				|  |  | -  CompletionQueue* const call_cq_;
 | 
	
		
			
				|  |  | -  ServerContext* const ctx_;
 | 
	
		
			
				|  |  | -  GenericServerContext* const generic_ctx_;
 | 
	
		
			
				|  |  | -  Server* const server_;
 | 
	
		
			
				|  |  | -  grpc_call* call_;
 | 
	
		
			
				|  |  | -  grpc_call_details call_details_;
 | 
	
		
			
				|  |  | -  grpc_metadata_array array_;
 | 
	
		
			
				|  |  | -  grpc_byte_buffer* payload_;
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void Server::RequestAsyncCall(void* registered_method, ServerContext* context,
 | 
	
		
			
				|  |  | -                              grpc::protobuf::Message* request,
 | 
	
		
			
				|  |  | -                              ServerAsyncStreamingInterface* stream,
 | 
	
		
			
				|  |  | -                              CompletionQueue* call_cq,
 | 
	
		
			
				|  |  | -                              ServerCompletionQueue* notification_cq,
 | 
	
		
			
				|  |  | -                              void* tag) {
 | 
	
		
			
				|  |  | -  new AsyncRequest(this, registered_method, context, request, stream, call_cq,
 | 
	
		
			
				|  |  | -                   notification_cq, tag);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -void Server::RequestAsyncGenericCall(GenericServerContext* context,
 | 
	
		
			
				|  |  | -                                     ServerAsyncStreamingInterface* stream,
 | 
	
		
			
				|  |  | -                                     CompletionQueue* call_cq,
 | 
	
		
			
				|  |  | -                                     ServerCompletionQueue* notification_cq,
 | 
	
		
			
				|  |  | -                                     void* tag) {
 | 
	
		
			
				|  |  | -  new AsyncRequest(this, context, stream, call_cq, notification_cq, tag);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -#endif
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  Server::BaseAsyncRequest::BaseAsyncRequest(
 | 
	
		
			
				|  |  |      Server* server, ServerContext* context,
 | 
	
		
			
				|  |  |      ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq, void* tag)
 |