|
|
|
@ -558,10 +558,12 @@ class CallOpRecvInitialMetadata { |
|
|
|
|
|
|
|
|
|
class CallOpClientRecvStatus { |
|
|
|
|
public: |
|
|
|
|
CallOpClientRecvStatus() : recv_status_(nullptr) {} |
|
|
|
|
CallOpClientRecvStatus() |
|
|
|
|
: recv_status_(nullptr), debug_error_string_(nullptr) {} |
|
|
|
|
|
|
|
|
|
void ClientRecvStatus(ClientContext* context, Status* status) { |
|
|
|
|
metadata_map_ = &context->trailing_metadata_; |
|
|
|
|
client_context_ = context; |
|
|
|
|
metadata_map_ = &client_context_->trailing_metadata_; |
|
|
|
|
recv_status_ = status; |
|
|
|
|
error_message_ = g_core_codegen_interface->grpc_empty_slice(); |
|
|
|
|
} |
|
|
|
@ -574,7 +576,7 @@ class CallOpClientRecvStatus { |
|
|
|
|
op->data.recv_status_on_client.trailing_metadata = metadata_map_->arr(); |
|
|
|
|
op->data.recv_status_on_client.status = &status_code_; |
|
|
|
|
op->data.recv_status_on_client.status_details = &error_message_; |
|
|
|
|
op->data.recv_status_on_client.error_string = nullptr; |
|
|
|
|
op->data.recv_status_on_client.error_string = &debug_error_string_; |
|
|
|
|
op->flags = 0; |
|
|
|
|
op->reserved = NULL; |
|
|
|
|
} |
|
|
|
@ -592,13 +594,20 @@ class CallOpClientRecvStatus { |
|
|
|
|
grpc::string(GRPC_SLICE_START_PTR(error_message_), |
|
|
|
|
GRPC_SLICE_END_PTR(error_message_)), |
|
|
|
|
binary_error_details); |
|
|
|
|
client_context_->set_debug_error_string( |
|
|
|
|
debug_error_string_ != nullptr ? debug_error_string_ : ""); |
|
|
|
|
g_core_codegen_interface->grpc_slice_unref(error_message_); |
|
|
|
|
if (debug_error_string_ != nullptr) { |
|
|
|
|
g_core_codegen_interface->gpr_free((void*)debug_error_string_); |
|
|
|
|
} |
|
|
|
|
recv_status_ = nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
ClientContext* client_context_; |
|
|
|
|
MetadataMap* metadata_map_; |
|
|
|
|
Status* recv_status_; |
|
|
|
|
const char* debug_error_string_; |
|
|
|
|
grpc_status_code status_code_; |
|
|
|
|
grpc_slice error_message_; |
|
|
|
|
}; |
|
|
|
|