Merge branch 'stream_exhausted_fix' of https://github.com/aburgel/AFNetworking into aburgel-stream_exhausted_fix
This commit is contained in:
commit
77471bb994
2 changed files with 64 additions and 7 deletions
|
|
@ -741,7 +741,9 @@ NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2;
|
||||||
@interface AFHTTPBodyPart : NSObject
|
@interface AFHTTPBodyPart : NSObject
|
||||||
@property (nonatomic, assign) NSStringEncoding stringEncoding;
|
@property (nonatomic, assign) NSStringEncoding stringEncoding;
|
||||||
@property (nonatomic, strong) NSDictionary *headers;
|
@property (nonatomic, strong) NSDictionary *headers;
|
||||||
@property (nonatomic, strong) NSInputStream *inputStream;
|
@property (nonatomic, strong) NSData *inputData;
|
||||||
|
@property (nonatomic, strong) NSURL *inputURL;
|
||||||
|
@property (nonatomic, readonly) NSInputStream *inputStream;
|
||||||
@property (nonatomic, assign) unsigned long long bodyContentLength;
|
@property (nonatomic, assign) unsigned long long bodyContentLength;
|
||||||
|
|
||||||
@property (nonatomic, assign) BOOL hasInitialBoundary;
|
@property (nonatomic, assign) BOOL hasInitialBoundary;
|
||||||
|
|
@ -823,7 +825,7 @@ NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2;
|
||||||
AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init];
|
AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init];
|
||||||
bodyPart.stringEncoding = self.stringEncoding;
|
bodyPart.stringEncoding = self.stringEncoding;
|
||||||
bodyPart.headers = mutableHeaders;
|
bodyPart.headers = mutableHeaders;
|
||||||
bodyPart.inputStream = [NSInputStream inputStreamWithURL:fileURL];
|
bodyPart.inputURL = fileURL;
|
||||||
|
|
||||||
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:nil];
|
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:nil];
|
||||||
bodyPart.bodyContentLength = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue];
|
bodyPart.bodyContentLength = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue];
|
||||||
|
|
@ -869,7 +871,7 @@ NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2;
|
||||||
bodyPart.stringEncoding = self.stringEncoding;
|
bodyPart.stringEncoding = self.stringEncoding;
|
||||||
bodyPart.headers = headers;
|
bodyPart.headers = headers;
|
||||||
bodyPart.bodyContentLength = [body length];
|
bodyPart.bodyContentLength = [body length];
|
||||||
bodyPart.inputStream = [NSInputStream inputStreamWithData:body];
|
bodyPart.inputData = body;
|
||||||
|
|
||||||
[self.bodyStream appendHTTPBodyPart:bodyPart];
|
[self.bodyStream appendHTTPBodyPart:bodyPart];
|
||||||
}
|
}
|
||||||
|
|
@ -900,7 +902,7 @@ NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2;
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
@interface AFMultipartBodyStream ()
|
@interface AFMultipartBodyStream () <NSCopying>
|
||||||
@property (nonatomic, assign) NSStreamStatus streamStatus;
|
@property (nonatomic, assign) NSStreamStatus streamStatus;
|
||||||
@property (nonatomic, strong) NSError *streamError;
|
@property (nonatomic, strong) NSError *streamError;
|
||||||
|
|
||||||
|
|
@ -933,6 +935,20 @@ NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2;
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(id)copyWithZone:(NSZone *)zone {
|
||||||
|
AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding];
|
||||||
|
|
||||||
|
for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts)
|
||||||
|
{
|
||||||
|
AFHTTPBodyPart *bodyPartCopy = [bodyPart copy];
|
||||||
|
[bodyStreamCopy appendHTTPBodyPart:bodyPartCopy];
|
||||||
|
}
|
||||||
|
|
||||||
|
[bodyStreamCopy setInitialAndFinalBoundaries];
|
||||||
|
|
||||||
|
return bodyStreamCopy;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setInitialAndFinalBoundaries {
|
- (void)setInitialAndFinalBoundaries {
|
||||||
if ([self.HTTPBodyParts count] > 0) {
|
if ([self.HTTPBodyParts count] > 0) {
|
||||||
for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) {
|
for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) {
|
||||||
|
|
@ -1059,8 +1075,9 @@ typedef enum {
|
||||||
AFFinalBoundaryPhase = 4,
|
AFFinalBoundaryPhase = 4,
|
||||||
} AFHTTPBodyPartReadPhase;
|
} AFHTTPBodyPartReadPhase;
|
||||||
|
|
||||||
@interface AFHTTPBodyPart () {
|
@interface AFHTTPBodyPart () <NSCopying> {
|
||||||
AFHTTPBodyPartReadPhase _phase;
|
AFHTTPBodyPartReadPhase _phase;
|
||||||
|
NSInputStream *_inputStream;
|
||||||
unsigned long long _phaseReadOffset;
|
unsigned long long _phaseReadOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1074,7 +1091,8 @@ typedef enum {
|
||||||
@synthesize stringEncoding = _stringEncoding;
|
@synthesize stringEncoding = _stringEncoding;
|
||||||
@synthesize headers = _headers;
|
@synthesize headers = _headers;
|
||||||
@synthesize bodyContentLength = _bodyContentLength;
|
@synthesize bodyContentLength = _bodyContentLength;
|
||||||
@synthesize inputStream = _inputStream;
|
@synthesize inputData = _inputData;
|
||||||
|
@synthesize inputURL = _inputURL;
|
||||||
@synthesize hasInitialBoundary = _hasInitialBoundary;
|
@synthesize hasInitialBoundary = _hasInitialBoundary;
|
||||||
@synthesize hasFinalBoundary = _hasFinalBoundary;
|
@synthesize hasFinalBoundary = _hasFinalBoundary;
|
||||||
|
|
||||||
|
|
@ -1089,6 +1107,18 @@ typedef enum {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (id)copyWithZone:(NSZone *)zone {
|
||||||
|
AFHTTPBodyPart *bodyPartCopy = [[[self class] allocWithZone:zone] init];
|
||||||
|
|
||||||
|
bodyPartCopy.stringEncoding = self.stringEncoding;
|
||||||
|
bodyPartCopy.headers = self.headers;
|
||||||
|
bodyPartCopy.bodyContentLength = self.bodyContentLength;
|
||||||
|
bodyPartCopy.inputData = self.inputData;
|
||||||
|
bodyPartCopy.inputURL = self.inputURL;
|
||||||
|
|
||||||
|
return bodyPartCopy;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
if (_inputStream) {
|
if (_inputStream) {
|
||||||
[_inputStream close];
|
[_inputStream close];
|
||||||
|
|
@ -1096,6 +1126,20 @@ typedef enum {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSInputStream *)inputStream {
|
||||||
|
if (_inputStream) {
|
||||||
|
return _inputStream;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.inputData) {
|
||||||
|
_inputStream = [NSInputStream inputStreamWithData:self.inputData];
|
||||||
|
} else if (self.inputURL) {
|
||||||
|
_inputStream = [NSInputStream inputStreamWithURL:self.inputURL];
|
||||||
|
}
|
||||||
|
|
||||||
|
return _inputStream;
|
||||||
|
}
|
||||||
|
|
||||||
- (NSString *)stringForHeaders {
|
- (NSString *)stringForHeaders {
|
||||||
NSMutableString *headerString = [NSMutableString string];
|
NSMutableString *headerString = [NSMutableString string];
|
||||||
for (NSString *field in [self.headers allKeys]) {
|
for (NSString *field in [self.headers allKeys]) {
|
||||||
|
|
|
||||||
|
|
@ -657,6 +657,19 @@ didReceiveResponse:(NSURLResponse *)response
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request
|
||||||
|
{
|
||||||
|
NSInputStream *newBodyStream = nil;
|
||||||
|
|
||||||
|
NSInputStream *bodyStream = request.HTTPBodyStream;
|
||||||
|
if ([bodyStream conformsToProtocol:@protocol(NSCopying)])
|
||||||
|
{
|
||||||
|
newBodyStream = [bodyStream copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
return newBodyStream;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - NSCoding
|
#pragma mark - NSCoding
|
||||||
|
|
||||||
- (id)initWithCoder:(NSCoder *)aDecoder {
|
- (id)initWithCoder:(NSCoder *)aDecoder {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue