|
|
|
@ -547,11 +547,7 @@ class Server::CallbackRequest final |
|
|
|
|
grpc::internal::RpcMethod::SERVER_STREAMING), |
|
|
|
|
cq_(cq), |
|
|
|
|
tag_(this) { |
|
|
|
|
server->Ref(); |
|
|
|
|
Setup(); |
|
|
|
|
data->tag = &tag_; |
|
|
|
|
data->call = &call_; |
|
|
|
|
data->initial_metadata = &request_metadata_; |
|
|
|
|
CommonSetup(server, data); |
|
|
|
|
data->deadline = &deadline_; |
|
|
|
|
data->optional_payload = has_request_payload_ ? &request_payload_ : nullptr; |
|
|
|
|
} |
|
|
|
@ -563,22 +559,20 @@ class Server::CallbackRequest final |
|
|
|
|
: server_(server), |
|
|
|
|
method_(nullptr), |
|
|
|
|
has_request_payload_(false), |
|
|
|
|
call_details_(new grpc_call_details), |
|
|
|
|
cq_(cq), |
|
|
|
|
tag_(this) { |
|
|
|
|
server->Ref(); |
|
|
|
|
Setup(); |
|
|
|
|
data->tag = &tag_; |
|
|
|
|
data->call = &call_; |
|
|
|
|
data->initial_metadata = &request_metadata_; |
|
|
|
|
if (!call_details_) { |
|
|
|
|
call_details_ = new grpc_call_details; |
|
|
|
|
grpc_call_details_init(call_details_); |
|
|
|
|
} |
|
|
|
|
CommonSetup(server, data); |
|
|
|
|
grpc_call_details_init(call_details_); |
|
|
|
|
data->details = call_details_; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
~CallbackRequest() { |
|
|
|
|
Clear(); |
|
|
|
|
delete call_details_; |
|
|
|
|
grpc_metadata_array_destroy(&request_metadata_); |
|
|
|
|
if (has_request_payload_ && request_payload_) { |
|
|
|
|
grpc_byte_buffer_destroy(request_payload_); |
|
|
|
|
} |
|
|
|
|
server_->UnrefWithPossibleNotify(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -688,40 +682,27 @@ class Server::CallbackRequest final |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
void Clear() { |
|
|
|
|
if (call_details_) { |
|
|
|
|
delete call_details_; |
|
|
|
|
call_details_ = nullptr; |
|
|
|
|
} |
|
|
|
|
grpc_metadata_array_destroy(&request_metadata_); |
|
|
|
|
if (has_request_payload_ && request_payload_) { |
|
|
|
|
grpc_byte_buffer_destroy(request_payload_); |
|
|
|
|
} |
|
|
|
|
ctx_.Clear(); |
|
|
|
|
interceptor_methods_.ClearState(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Setup() { |
|
|
|
|
template <class CallAllocation> |
|
|
|
|
void CommonSetup(Server* server, CallAllocation* data) { |
|
|
|
|
server->Ref(); |
|
|
|
|
grpc_metadata_array_init(&request_metadata_); |
|
|
|
|
ctx_.Setup(gpr_inf_future(GPR_CLOCK_REALTIME)); |
|
|
|
|
request_payload_ = nullptr; |
|
|
|
|
request_ = nullptr; |
|
|
|
|
handler_data_ = nullptr; |
|
|
|
|
request_status_ = grpc::Status(); |
|
|
|
|
data->tag = &tag_; |
|
|
|
|
data->call = &call_; |
|
|
|
|
data->initial_metadata = &request_metadata_; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Server* const server_; |
|
|
|
|
grpc::internal::RpcServiceMethod* const method_; |
|
|
|
|
const bool has_request_payload_; |
|
|
|
|
grpc_byte_buffer* request_payload_; |
|
|
|
|
void* request_; |
|
|
|
|
void* handler_data_; |
|
|
|
|
grpc_byte_buffer* request_payload_ = nullptr; |
|
|
|
|
void* request_ = nullptr; |
|
|
|
|
void* handler_data_ = nullptr; |
|
|
|
|
grpc::Status request_status_; |
|
|
|
|
grpc_call_details* call_details_ = nullptr; |
|
|
|
|
grpc_call_details* const call_details_ = nullptr; |
|
|
|
|
grpc_call* call_; |
|
|
|
|
gpr_timespec deadline_; |
|
|
|
|
grpc_metadata_array request_metadata_; |
|
|
|
|
grpc::CompletionQueue* cq_; |
|
|
|
|
grpc::CompletionQueue* const cq_; |
|
|
|
|
CallbackCallTag tag_; |
|
|
|
|
ServerContextType ctx_; |
|
|
|
|
grpc::internal::InterceptorBatchMethodsImpl interceptor_methods_; |
|
|
|
|