4848#define AF_DISPATCH_RETAIN_RELEASE 1
4949#endif
5050
51- @interface AFStreamingMultipartFormData : NSObject <AFMultipartFormData>
52-
53- - (id )initWithURLRequest : (NSMutableURLRequest *)request
54- stringEncoding : (NSStringEncoding )encoding ;
55-
56- - (NSMutableURLRequest *)requestByFinalizingMultipartFormData ;
57-
58- @end
59-
60- #pragma mark -
61-
6251#ifdef _SYSTEMCONFIGURATION_H
6352NSString * const AFNetworkingReachabilityDidChangeNotification = @" com.alamofire.networking.reachability.change" ;
6453NSString * const AFNetworkingReachabilityNotificationStatusItem = @" AFNetworkingReachabilityNotificationStatusItem" ;
@@ -200,6 +189,17 @@ - (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding
200189 return propertyListString;
201190}
202191
192+ @interface AFStreamingMultipartFormData : NSObject <AFMultipartFormData>
193+
194+ - (id )initWithURLRequest : (NSMutableURLRequest *)request
195+ stringEncoding : (NSStringEncoding )encoding ;
196+
197+ - (NSMutableURLRequest *)requestByFinalizingMultipartFormData ;
198+
199+ @end
200+
201+ #pragma mark -
202+
203203@interface AFHTTPClient ()
204204@property (readwrite , nonatomic ) NSURL *baseURL;
205205@property (readwrite , nonatomic ) NSMutableArray *registeredHTTPOperationClassNames;
@@ -707,28 +707,15 @@ - (id)copyWithZone:(NSZone *)zone {
707707
708708static inline NSString * AFContentTypeForPathExtension (NSString *extension) {
709709#ifdef __UTTYPE__
710- CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag (kUTTagClassFilenameExtension , (__bridge CFStringRef)extension, NULL );
711- NSString *contentType = (__bridge NSString *)UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType );
712-
713- CFRelease (UTI);
714-
715- return contentType;
710+ NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag (kUTTagClassFilenameExtension , (__bridge CFStringRef)extension, NULL );
711+ return (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass ((__bridge CFStringRef)UTI, kUTTagClassMIMEType );
716712#else
717713 return @" application/octet-stream" ;
718714#endif
719715}
720716
721- @interface AFMultipartBodyStream : NSInputStream <NSStreamDelegate >
722-
723- @property (readonly ) unsigned long long contentLength;
724- @property (readonly , getter = isEmpty) BOOL empty;
725-
726- - (id )initWithStringEncoding : (NSStringEncoding )encoding ;
727- - (void )setInitialAndFinalBoundaries ;
728-
729- @end
730-
731717@interface AFHTTPBodyPart : NSObject
718+
732719@property (nonatomic , assign ) NSStringEncoding stringEncoding;
733720@property (nonatomic , retain ) NSDictionary *headers;
734721@property (nonatomic , retain ) NSInputStream *inputStream;
@@ -744,35 +731,25 @@ - (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)length;
744731
745732@end
746733
747- #pragma mark - AFStreamingMultipartFormData
748-
749- @interface AFStreamingMultipartFormData ()
750- @property (readwrite , nonatomic , copy ) NSMutableURLRequest *request;
751- @property (readwrite , nonatomic , retain ) AFMultipartBodyStream *bodyStream;
752- @property (readwrite , nonatomic , assign ) NSStringEncoding stringEncoding;
753- @end
734+ @interface AFMultipartBodyStream : NSInputStream <NSStreamDelegate >
754735
755- @interface AFMultipartBodyStream () {
756- CFReadStreamClientCallBack copiedCallback;
757- CFStreamClientContext copiedContext;
758- CFOptionFlags requestedEvents;
759- NSStreamStatus streamStatus;
760- id <NSStreamDelegate > delegate;
761-
762- NSMutableArray *_HTTPBodyParts;
763- NSEnumerator *_HTTPBodyPartEnumerator;
764- AFHTTPBodyPart *_currentHTTPBodyPart;
765- }
736+ @property (readonly ) unsigned long long contentLength;
737+ @property (readonly , getter = isEmpty) BOOL empty;
766738
767- @property (nonatomic , assign ) NSStringEncoding stringEncoding;
768- @property (nonatomic , retain ) NSMutableArray *HTTPBodyParts;
769- @property (nonatomic , retain ) NSEnumerator *HTTPBodyPartEnumerator;
770- @property (nonatomic , retain ) AFHTTPBodyPart *currentHTTPBodyPart;
739+ - (id )initWithStringEncoding : (NSStringEncoding )encoding ;
740+ - (void )setInitialAndFinalBoundaries ;
741+ - (void )appendHTTPBodyPart : (AFHTTPBodyPart *)bodyPart ;
771742
772743@end
773744
774745#pragma mark -
775746
747+ @interface AFStreamingMultipartFormData ()
748+ @property (readwrite , nonatomic , copy ) NSMutableURLRequest *request;
749+ @property (readwrite , nonatomic , retain ) AFMultipartBodyStream *bodyStream;
750+ @property (readwrite , nonatomic , assign ) NSStringEncoding stringEncoding;
751+ @end
752+
776753@implementation AFStreamingMultipartFormData
777754@synthesize request = _request;
778755@synthesize bodyStream = _bodyStream;
@@ -800,11 +777,10 @@ - (void)appendPartWithFormData:(NSData *)data name:(NSString *)name {
800777 AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc ] init ];
801778 bodyPart.stringEncoding = self.stringEncoding ;
802779 bodyPart.headers = mutableHeaders;
803- bodyPart.inputStream = [NSInputStream inputStreamWithData: data];
804-
805780 bodyPart.bodyContentLength = [data length ];
781+ bodyPart.inputStream = [NSInputStream inputStreamWithData: data];
806782
807- [self .bodyStream.HTTPBodyParts addObject : bodyPart];
783+ [self .bodyStream appendHTTPBodyPart : bodyPart];
808784}
809785
810786
@@ -820,11 +796,10 @@ - (void)appendPartWithFileData:(NSData *)data
820796 AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc ] init ];
821797 bodyPart.stringEncoding = self.stringEncoding ;
822798 bodyPart.headers = mutableHeaders;
823- bodyPart.inputStream = [NSInputStream inputStreamWithData: data];
824-
825799 bodyPart.bodyContentLength = [data length ];
800+ bodyPart.inputStream = [NSInputStream inputStreamWithData: data];
826801
827- [self .bodyStream.HTTPBodyParts addObject : bodyPart];
802+ [self .bodyStream appendHTTPBodyPart : bodyPart];
828803}
829804
830805- (BOOL )appendPartWithFileURL : (NSURL *)fileURL
@@ -859,7 +834,7 @@ - (BOOL)appendPartWithFileURL:(NSURL *)fileURL
859834 NSDictionary *fileAttributes = [[NSFileManager defaultManager ] attributesOfItemAtPath: [fileURL path ] error: nil ];
860835 bodyPart.bodyContentLength = [[fileAttributes objectForKey: NSFileSize ] unsignedLongLongValue ];
861836
862- [self .bodyStream.HTTPBodyParts addObject : bodyPart];
837+ [self .bodyStream appendHTTPBodyPart : bodyPart];
863838
864839 return YES ;
865840}
@@ -869,7 +844,7 @@ - (NSMutableURLRequest *)requestByFinalizingMultipartFormData {
869844 return self.request ;
870845 }
871846
872- // We have to set the initial and final boundaries here so that the body stream returns the correct content length.
847+ // Reset the initial and final boundaries to ensure correct Content-Length
873848 [self .bodyStream setInitialAndFinalBoundaries ];
874849
875850 [self .request setValue: [NSString stringWithFormat: @" multipart/form-data; boundary=%@ " , kAFMultipartFormBoundary ] forHTTPHeaderField: @" Content-Type" ];
@@ -881,9 +856,21 @@ - (NSMutableURLRequest *)requestByFinalizingMultipartFormData {
881856
882857@end
883858
884- #pragma mark - AFMultipartBodyStream
859+ #pragma mark -
860+
861+ @interface AFMultipartBodyStream ()
862+ @property (nonatomic , assign ) NSStreamStatus streamStatus;
863+ @property (nonatomic , retain ) NSError *streamError;
864+
865+ @property (nonatomic , assign ) NSStringEncoding stringEncoding;
866+ @property (nonatomic , retain ) NSMutableArray *HTTPBodyParts;
867+ @property (nonatomic , retain ) NSEnumerator *HTTPBodyPartEnumerator;
868+ @property (nonatomic , retain ) AFHTTPBodyPart *currentHTTPBodyPart;
869+ @end
885870
886871@implementation AFMultipartBodyStream
872+ @synthesize streamStatus = _streamStatus;
873+ @synthesize streamError = _streamError;
887874@synthesize stringEncoding = _stringEncoding;
888875@synthesize HTTPBodyParts = _HTTPBodyParts;
889876@synthesize HTTPBodyPartEnumerator = _HTTPBodyPartEnumerator;
@@ -895,9 +882,7 @@ - (id)initWithStringEncoding:(NSStringEncoding)encoding {
895882 return nil ;
896883 }
897884
898- self.stringEncoding = encoding;
899- streamStatus = NSStreamStatusNotOpen;
900-
885+ self.stringEncoding = encoding;
901886 self.HTTPBodyParts = [NSMutableArray array ];
902887
903888 return self;
@@ -915,6 +900,10 @@ - (void)setInitialAndFinalBoundaries {
915900 }
916901}
917902
903+ - (void )appendHTTPBodyPart : (AFHTTPBodyPart *)bodyPart {
904+ [self .HTTPBodyParts addObject: bodyPart];
905+ }
906+
918907- (BOOL )isEmpty {
919908 return [self .HTTPBodyParts count ] == 0 ;
920909}
@@ -956,14 +945,14 @@ - (void)open {
956945 return ;
957946 }
958947
959- streamStatus = NSStreamStatusOpen;
960-
948+ self. streamStatus = NSStreamStatusOpen;
949+
961950 [self setInitialAndFinalBoundaries ];
962951 self.HTTPBodyPartEnumerator = [self .HTTPBodyParts objectEnumerator ];
963952}
964953
965954- (void )close {
966- streamStatus = NSStreamStatusClosed;
955+ self. streamStatus = NSStreamStatusClosed;
967956}
968957
969958- (id )propertyForKey : (NSString *)key {
@@ -982,14 +971,6 @@ - (void)removeFromRunLoop:(NSRunLoop *)aRunLoop
982971 forMode : (NSString *)mode
983972{}
984973
985- - (NSStreamStatus )streamStatus {
986- return streamStatus;
987- }
988-
989- - (NSError *)streamError {
990- return nil ;
991- }
992-
993974- (unsigned long long )contentLength {
994975 unsigned long long length = 0 ;
995976 for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts ) {
@@ -1038,8 +1019,8 @@ - (BOOL)transitionToNextPhase;
10381019@implementation AFHTTPBodyPart
10391020@synthesize stringEncoding = _stringEncoding;
10401021@synthesize headers = _headers;
1041- @synthesize inputStream = _inputStream;
10421022@synthesize bodyContentLength = _bodyContentLength;
1023+ @synthesize inputStream = _inputStream;
10431024
10441025- (id )init {
10451026 self = [super init ];
@@ -1174,4 +1155,3 @@ - (BOOL)transitionToNextPhase {
11741155}
11751156
11761157@end
1177-
0 commit comments