NSURLSession: use mutable data for transfer state body

This commit is contained in:
Frederik Seiffert 2023-01-16 15:34:12 +01:00 committed by Frederik Seiffert
parent c0a6227013
commit 153482ea94
2 changed files with 11 additions and 42 deletions

View file

@ -7,6 +7,7 @@
@class GSURLSessionTaskBodySource;
@class NSArray;
@class NSData;
@class NSMutableData;
@class NSFileHandle;
@class NSHTTPURLResponse;
@class NSURL;
@ -57,7 +58,7 @@ typedef NS_ENUM(NSUInteger, GSDataDrainType) {
@interface GSDataDrain: NSObject
{
GSDataDrainType _type;
NSData *_data;
NSMutableData *_data;
NSURL *_fileURL;
NSFileHandle *_fileHandle;
}
@ -65,14 +66,11 @@ typedef NS_ENUM(NSUInteger, GSDataDrainType) {
- (GSDataDrainType) type;
- (void) setType: (GSDataDrainType)type;
- (NSData*) data;
- (void) setData: (NSData*)data;
- (NSMutableData*) data;
- (NSURL*) fileURL;
- (void) setFileURL: (NSURL*)url;
- (NSFileHandle*) fileHandle;
- (void) setFileHandle: (NSFileHandle*)handle;
@end

View file

@ -268,14 +268,14 @@
_type = type;
}
- (NSData*) data
- (NSMutableData*) data
{
return _data;
}
if (!_data)
{
_data = [[NSMutableData alloc] init];
}
- (void) setData: (NSData*)data
{
ASSIGN(_data, data);
return _data;
}
- (NSURL*) fileURL
@ -298,11 +298,6 @@
return _fileURL;
}
- (void) setFileURL: (NSURL*)url
{
ASSIGN(_fileURL, url);
}
- (NSFileHandle*) fileHandle
{
/* Create temporary file and open a fileHandle for writing. */
@ -319,11 +314,6 @@
return _fileHandle;
}
- (void) setFileHandle: (NSFileHandle*)handle
{
ASSIGN(_fileHandle, handle);
}
@end
@implementation GSTransferState
@ -389,27 +379,8 @@
switch ([_bodyDataDrain type])
{
case GSDataDrainInMemory:
{
NSMutableData *data;
GSDataDrain *dataDrain;
GSTransferState *ts;
data = [_bodyDataDrain data] ?
AUTORELEASE([[_bodyDataDrain data] mutableCopy])
: [NSMutableData data];
[data appendData: bodyData];
dataDrain = AUTORELEASE([[GSDataDrain alloc] init]);
[dataDrain setType: GSDataDrainInMemory];
[dataDrain setData: data];
ts = [[GSTransferState alloc] initWithURL: _url
parsedResponseHeader: _parsedResponseHeader
response: _response
bodySource: _requestBodySource
bodyDataDrain: dataDrain];
return AUTORELEASE(ts);
}
[[_bodyDataDrain data] appendData: bodyData];
return self;
case GSDataDrainTypeToFile:
{
NSFileHandle *fileHandle;