PHP 7.4.33
Preview: RCTMultipartDataTask.m Size: 4.59 KB
/var/www/uibuilder.cmshelp.dk/httpdocs/node_modules/react-native/React/Base/RCTMultipartDataTask.m
/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

#import "RCTMultipartDataTask.h"

@interface RCTMultipartDataTask () <NSURLSessionDataDelegate, NSURLSessionDataDelegate>

@end

@implementation RCTMultipartDataTask {
  NSURL *_url;
  RCTMultipartDataTaskCallback _partHandler;
  RCTMultipartProgressCallback _progressHandler;
  NSInteger _statusCode;
  NSDictionary *_headers;
  NSString *_boundary;
  NSMutableData *_data;
}

- (instancetype)initWithURL:(NSURL *)url
                partHandler:(RCTMultipartDataTaskCallback)partHandler
            progressHandler:(RCTMultipartProgressCallback)progressHandler
{
  if (self = [super init]) {
    _url = url;
    _partHandler = [partHandler copy];
    _progressHandler = [progressHandler copy];
  }
  return self;
}

- (void)startTask
{
  NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
                                                        delegate:self
                                                   delegateQueue:nil];
  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_url];
  [request addValue:@"multipart/mixed" forHTTPHeaderField:@"Accept"];
  NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
  [dataTask resume];
  [session finishTasksAndInvalidate];
}

- (void)URLSession:(__unused NSURLSession *)session
              dataTask:(__unused NSURLSessionDataTask *)dataTask
    didReceiveResponse:(NSURLResponse *)response
     completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
{
  if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    _headers = [httpResponse allHeaderFields];
    _statusCode = [httpResponse statusCode];

    NSString *contentType = @"";
    for (NSString *key in [_headers keyEnumerator]) {
      if ([[key lowercaseString] isEqualToString:@"content-type"]) {
        contentType = [_headers valueForKey:key];
        break;
      }
    }

    NSRegularExpression *regex =
        [NSRegularExpression regularExpressionWithPattern:@"multipart/mixed;.*boundary=\"([^\"]+)\""
                                                  options:0
                                                    error:nil];
    NSTextCheckingResult *match = [regex firstMatchInString:contentType
                                                    options:0
                                                      range:NSMakeRange(0, contentType.length)];
    if (match) {
      _boundary = [contentType substringWithRange:[match rangeAtIndex:1]];
      completionHandler(NSURLSessionResponseBecomeStream);
      return;
    }
  }

  // In case the server doesn't support multipart/mixed responses, fallback to normal download
  _data = [[NSMutableData alloc] initWithCapacity:1024 * 1024];
  completionHandler(NSURLSessionResponseAllow);
}

- (void)URLSession:(__unused NSURLSession *)session
                    task:(__unused NSURLSessionTask *)task
    didCompleteWithError:(NSError *)error
{
  if (_partHandler) {
    _partHandler(_statusCode, _headers, _data, error, YES);
  }
}

- (void)URLSession:(__unused NSURLSession *)session
          dataTask:(__unused NSURLSessionDataTask *)dataTask
    didReceiveData:(NSData *)data
{
  [_data appendData:data];
}

- (void)URLSession:(__unused NSURLSession *)session
               dataTask:(__unused NSURLSessionDataTask *)dataTask
    didBecomeStreamTask:(NSURLSessionStreamTask *)streamTask
{
  [streamTask captureStreams];
}

- (void)URLSession:(__unused NSURLSession *)session
              streamTask:(__unused NSURLSessionStreamTask *)streamTask
    didBecomeInputStream:(NSInputStream *)inputStream
            outputStream:(__unused NSOutputStream *)outputStream
{
  RCTMultipartStreamReader *reader = [[RCTMultipartStreamReader alloc] initWithInputStream:inputStream
                                                                                  boundary:_boundary];
  RCTMultipartDataTaskCallback partHandler = _partHandler;
  _partHandler = nil;
  NSInteger statusCode = _statusCode;

  BOOL completed = [reader
      readAllPartsWithCompletionCallback:^(NSDictionary *headers, NSData *content, BOOL done) {
        partHandler(statusCode, headers, content, nil, done);
      }
                        progressCallback:_progressHandler];
  if (!completed) {
    partHandler(
        statusCode, nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorCancelled userInfo:nil], YES);
  }
}

@end

Directory Contents

Dirs: 1 × Files: 101
Name Size Perms Modified Actions
Surface DIR
- drwxr-xr-x 2025-03-28 11:04:43
Edit Download
8.66 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
10.96 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
732 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
4.33 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
8.28 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
16.67 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
2.37 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.06 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
3.03 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
895 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
15.47 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.31 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.41 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
441 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.52 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
13.74 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
845 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.07 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
8.07 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
16.11 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.25 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
596 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
663 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
416 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
673 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1003 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.68 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.41 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
10.46 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
44.68 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
490 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
254 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
5.01 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
515 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
4.45 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
590 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
585 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
514 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.07 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
3.64 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.24 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
557 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.11 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.37 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
290 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
290 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.75 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
3.12 KB lrwxr-xr-x 2025-03-28 11:04:41
Edit Download
14.01 KB lrwxr-xr-x 2025-03-28 11:04:43
Edit Download
1.10 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
4.81 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
910 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
429 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
809 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
7.40 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
5.09 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
10.46 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
816 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
503 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.76 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
3.79 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
16.88 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
983 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
21.12 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.79 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
683 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
4.59 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
887 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
6.09 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
336 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1008 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
3.20 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
2.43 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
3.81 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
390 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.90 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
841 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
516 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
445 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.21 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.28 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.02 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.85 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
5.95 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
11.42 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
967 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
615 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
852 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.96 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
497 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
12.54 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
974 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.26 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.89 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
8.18 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
35.12 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
529 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
628 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
495 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
863 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.51 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).