@@ -598,10 +598,59 @@ - (void)captureResponseDetails:(NSData *)data
598598 request : (NSURLRequest *)request
599599 task : (NSURLSessionTask *)task
600600{
601- // TODO: Implementation
602- // 2. Create SentryNetworkBody from response data
603- // 3. Store in appropriate location for session replay
604- // 4. Handle size limits and truncation if needed
601+ NSString *url = request.URL ? request.URL .absoluteString : @" <no URL>" ;
602+ if (![self isNetworkDetailCaptureEnabledFor: url options: SentrySDK.startOption]) {
603+ return ;
604+ }
605+
606+ SentryOptions *options = SentrySDK.startOption ;
607+ if (![self isNetworkDetailCaptureEnabledFor: url options: options]) {
608+ return ;
609+ }
610+
611+ SentryNetworkRequestData *requestData
612+ = objc_getAssociatedObject (task, &SentryNetworkRequestDataKey);
613+ if (!requestData) {
614+ SENTRY_LOG_DEBUG (@" [NetworkCapture] No SentryNetworkRequestData found for %@ - "
615+ @" skipping response capture" ,
616+ url);
617+ return ;
618+ }
619+
620+ // Create response SentryReplayNetworkRequestOrResponse with headers and body
621+ NSDictionary *responseHeaders = nil ;
622+ if ([response isKindOfClass: [NSHTTPURLResponse class ]]) {
623+ NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
624+ responseHeaders = [SentryReplayNetworkRequestOrResponse
625+ extractHeaders: httpResponse.allHeaderFields
626+ configuredHeaders: options.sessionReplay.networkResponseHeaders];
627+ }
628+
629+ SentryNetworkBody *responseBody = nil ;
630+ if (data && data.length > 0 ) {
631+ NSString *contentType = nil ;
632+ if ([response isKindOfClass: [NSHTTPURLResponse class ]]) {
633+ NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
634+ contentType = httpResponse.allHeaderFields [@" Content-Type" ];
635+ }
636+ responseBody = [[SentryNetworkBody alloc ] initWithData: data contentType: contentType];
637+ }
638+
639+ NSUInteger dataLength = data ? data.length : 0 ;
640+ SentryReplayNetworkRequestOrResponse *responseData =
641+ [[SentryReplayNetworkRequestOrResponse alloc ]
642+ initWithSize: @(dataLength)
643+ body: responseBody
644+ allHeaders: ([response isKindOfClass: [NSHTTPURLResponse class ]]
645+ ? ((NSHTTPURLResponse *)response).allHeaderFields
646+ : nil )configuredHeaders
647+ :options.sessionReplay.networkResponseHeaders];
648+
649+ NSInteger statusCode = 0 ;
650+ if ([response isKindOfClass: [NSHTTPURLResponse class ]]) {
651+ statusCode = ((NSHTTPURLResponse *)response).statusCode ;
652+ }
653+ [requestData setResponseDetails: statusCode responseData: responseData];
605654}
606655
607656- (void )captureRequestDetails : (NSURLSessionTask *)sessionTask
@@ -620,7 +669,6 @@ - (void)captureRequestDetails:(NSURLSessionTask *)sessionTask
620669 }
621670
622671 NSURLRequest *request = sessionTask.currentRequest ;
623- NSString *url = request.URL ? request.URL .absoluteString : nil ;
624672
625673 SentryNetworkRequestData *requestData =
626674 [[SentryNetworkRequestData alloc ] initWithMethod: request.HTTPMethod ?: @" GET" ];
0 commit comments