|
|
|
@ -187,6 +187,7 @@ |
|
|
|
|
grpc_slice _details; |
|
|
|
|
size_t _detailsCapacity; |
|
|
|
|
grpc_metadata_array _trailers; |
|
|
|
|
const char *_errorString; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
- (instancetype)init { |
|
|
|
@ -200,6 +201,7 @@ |
|
|
|
|
_op.data.recv_status_on_client.status_details = &_details; |
|
|
|
|
grpc_metadata_array_init(&_trailers); |
|
|
|
|
_op.data.recv_status_on_client.trailing_metadata = &_trailers; |
|
|
|
|
_op.data.recv_status_on_client.error_string = &_errorString; |
|
|
|
|
if (handler) { |
|
|
|
|
// Prevent reference cycle with _handler |
|
|
|
|
__weak typeof(self) weakSelf = self; |
|
|
|
@ -207,8 +209,9 @@ |
|
|
|
|
__strong typeof(self) strongSelf = weakSelf; |
|
|
|
|
if (strongSelf) { |
|
|
|
|
char *details = grpc_slice_to_c_string(strongSelf->_details); |
|
|
|
|
NSError *error = |
|
|
|
|
[NSError grpc_errorFromStatusCode:strongSelf->_statusCode details:details]; |
|
|
|
|
NSError *error = [NSError grpc_errorFromStatusCode:strongSelf->_statusCode |
|
|
|
|
details:details |
|
|
|
|
errorString:strongSelf->_errorString]; |
|
|
|
|
NSDictionary *trailers = |
|
|
|
|
[NSDictionary grpc_dictionaryFromMetadataArray:strongSelf->_trailers]; |
|
|
|
|
handler(error, trailers); |
|
|
|
@ -223,6 +226,7 @@ |
|
|
|
|
- (void)dealloc { |
|
|
|
|
grpc_metadata_array_destroy(&_trailers); |
|
|
|
|
grpc_slice_unref(_details); |
|
|
|
|
gpr_free((void *)_errorString); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@end |
|
|
|
|