Skip to content

Commit d67e8a6

Browse files
committed
Additional refactoring and reformatting
Fixing memory management issue in AFContentTypeForPathExtension
1 parent 5e8fbc0 commit d67e8a6

1 file changed

Lines changed: 54 additions & 74 deletions

File tree

AFNetworking/AFHTTPClient.m

Lines changed: 54 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,6 @@
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
6352
NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change";
6453
NSString * 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

708708
static 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

Comments
 (0)