Make project build pass with swift 4.0
- pod update - Force compile rxcocoa and rxswift with swift 3.2
This commit is contained in:
@ -27,11 +27,14 @@
|
||||
|
||||
#import "GCDWebServerResponse.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* The GCDWebServerDataResponse subclass of GCDWebServerResponse reads the body
|
||||
* of the HTTP response from memory.
|
||||
*/
|
||||
@interface GCDWebServerDataResponse : GCDWebServerResponse
|
||||
@property(nonatomic, copy) NSString* contentType; // Redeclare as non-null
|
||||
|
||||
/**
|
||||
* Creates a response with data in memory and a given content type.
|
||||
@ -50,40 +53,40 @@
|
||||
/**
|
||||
* Creates a data response from text encoded using UTF-8.
|
||||
*/
|
||||
+ (instancetype)responseWithText:(NSString*)text;
|
||||
+ (nullable instancetype)responseWithText:(NSString*)text;
|
||||
|
||||
/**
|
||||
* Creates a data response from HTML encoded using UTF-8.
|
||||
*/
|
||||
+ (instancetype)responseWithHTML:(NSString*)html;
|
||||
+ (nullable instancetype)responseWithHTML:(NSString*)html;
|
||||
|
||||
/**
|
||||
* Creates a data response from an HTML template encoded using UTF-8.
|
||||
* See -initWithHTMLTemplate:variables: for details.
|
||||
*/
|
||||
+ (instancetype)responseWithHTMLTemplate:(NSString*)path variables:(NSDictionary*)variables;
|
||||
+ (nullable instancetype)responseWithHTMLTemplate:(NSString*)path variables:(NSDictionary*)variables;
|
||||
|
||||
/**
|
||||
* Creates a data response from a serialized JSON object and the default
|
||||
* "application/json" content type.
|
||||
*/
|
||||
+ (instancetype)responseWithJSONObject:(id)object;
|
||||
+ (nullable instancetype)responseWithJSONObject:(id)object;
|
||||
|
||||
/**
|
||||
* Creates a data response from a serialized JSON object and a custom
|
||||
* content type.
|
||||
*/
|
||||
+ (instancetype)responseWithJSONObject:(id)object contentType:(NSString*)type;
|
||||
+ (nullable instancetype)responseWithJSONObject:(id)object contentType:(NSString*)type;
|
||||
|
||||
/**
|
||||
* Initializes a data response from text encoded using UTF-8.
|
||||
*/
|
||||
- (instancetype)initWithText:(NSString*)text;
|
||||
- (nullable instancetype)initWithText:(NSString*)text;
|
||||
|
||||
/**
|
||||
* Initializes a data response from HTML encoded using UTF-8.
|
||||
*/
|
||||
- (instancetype)initWithHTML:(NSString*)html;
|
||||
- (nullable instancetype)initWithHTML:(NSString*)html;
|
||||
|
||||
/**
|
||||
* Initializes a data response from an HTML template encoded using UTF-8.
|
||||
@ -91,18 +94,20 @@
|
||||
* All occurences of "%variable%" within the HTML template are replaced with
|
||||
* their corresponding values.
|
||||
*/
|
||||
- (instancetype)initWithHTMLTemplate:(NSString*)path variables:(NSDictionary*)variables;
|
||||
- (nullable instancetype)initWithHTMLTemplate:(NSString*)path variables:(NSDictionary*)variables;
|
||||
|
||||
/**
|
||||
* Initializes a data response from a serialized JSON object and the default
|
||||
* "application/json" content type.
|
||||
*/
|
||||
- (instancetype)initWithJSONObject:(id)object;
|
||||
- (nullable instancetype)initWithJSONObject:(id)object;
|
||||
|
||||
/**
|
||||
* Initializes a data response from a serialized JSON object and a custom
|
||||
* content type.
|
||||
*/
|
||||
- (instancetype)initWithJSONObject:(id)object contentType:(NSString*)type;
|
||||
- (nullable instancetype)initWithJSONObject:(id)object contentType:(NSString*)type;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@ -31,28 +31,21 @@
|
||||
|
||||
#import "GCDWebServerPrivate.h"
|
||||
|
||||
@interface GCDWebServerDataResponse () {
|
||||
@private
|
||||
@implementation GCDWebServerDataResponse {
|
||||
NSData* _data;
|
||||
BOOL _done;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation GCDWebServerDataResponse
|
||||
@dynamic contentType;
|
||||
|
||||
+ (instancetype)responseWithData:(NSData*)data contentType:(NSString*)type {
|
||||
return [[[self class] alloc] initWithData:data contentType:type];
|
||||
}
|
||||
|
||||
- (instancetype)initWithData:(NSData*)data contentType:(NSString*)type {
|
||||
if (data == nil) {
|
||||
GWS_DNOT_REACHED();
|
||||
return nil;
|
||||
}
|
||||
|
||||
if ((self = [super init])) {
|
||||
_data = data;
|
||||
|
||||
|
||||
self.contentType = type;
|
||||
self.contentLength = data.length;
|
||||
}
|
||||
@ -124,8 +117,7 @@
|
||||
[variables enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSString* value, BOOL* stop) {
|
||||
[html replaceOccurrencesOfString:[NSString stringWithFormat:@"%%%@%%", key] withString:value options:0 range:NSMakeRange(0, html.length)];
|
||||
}];
|
||||
id response = [self initWithHTML:html];
|
||||
return response;
|
||||
return [self initWithHTML:html];
|
||||
}
|
||||
|
||||
- (instancetype)initWithJSONObject:(id)object {
|
||||
@ -135,6 +127,7 @@
|
||||
- (instancetype)initWithJSONObject:(id)object contentType:(NSString*)type {
|
||||
NSData* data = [NSJSONSerialization dataWithJSONObject:object options:0 error:NULL];
|
||||
if (data == nil) {
|
||||
GWS_DNOT_REACHED();
|
||||
return nil;
|
||||
}
|
||||
return [self initWithData:data contentType:type];
|
||||
|
||||
@ -28,6 +28,8 @@
|
||||
#import "GCDWebServerDataResponse.h"
|
||||
#import "GCDWebServerHTTPStatusCodes.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* The GCDWebServerDataResponse subclass of GCDWebServerDataResponse generates
|
||||
* an HTML body from an HTTP status code and an error message.
|
||||
@ -37,45 +39,47 @@
|
||||
/**
|
||||
* Creates a client error response with the corresponding HTTP status code.
|
||||
*/
|
||||
+ (instancetype)responseWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode message:(NSString*)format, ... NS_FORMAT_FUNCTION(2,3);
|
||||
+ (instancetype)responseWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode message:(NSString*)format, ... NS_FORMAT_FUNCTION(2, 3);
|
||||
|
||||
/**
|
||||
* Creates a server error response with the corresponding HTTP status code.
|
||||
*/
|
||||
+ (instancetype)responseWithServerError:(GCDWebServerServerErrorHTTPStatusCode)errorCode message:(NSString*)format, ... NS_FORMAT_FUNCTION(2,3);
|
||||
+ (instancetype)responseWithServerError:(GCDWebServerServerErrorHTTPStatusCode)errorCode message:(NSString*)format, ... NS_FORMAT_FUNCTION(2, 3);
|
||||
|
||||
/**
|
||||
* Creates a client error response with the corresponding HTTP status code
|
||||
* and an underlying NSError.
|
||||
*/
|
||||
+ (instancetype)responseWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode underlyingError:(NSError*)underlyingError message:(NSString*)format, ... NS_FORMAT_FUNCTION(3,4);
|
||||
+ (instancetype)responseWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode underlyingError:(nullable NSError*)underlyingError message:(NSString*)format, ... NS_FORMAT_FUNCTION(3, 4);
|
||||
|
||||
/**
|
||||
* Creates a server error response with the corresponding HTTP status code
|
||||
* and an underlying NSError.
|
||||
*/
|
||||
+ (instancetype)responseWithServerError:(GCDWebServerServerErrorHTTPStatusCode)errorCode underlyingError:(NSError*)underlyingError message:(NSString*)format, ... NS_FORMAT_FUNCTION(3,4);
|
||||
+ (instancetype)responseWithServerError:(GCDWebServerServerErrorHTTPStatusCode)errorCode underlyingError:(nullable NSError*)underlyingError message:(NSString*)format, ... NS_FORMAT_FUNCTION(3, 4);
|
||||
|
||||
/**
|
||||
* Initializes a client error response with the corresponding HTTP status code.
|
||||
*/
|
||||
- (instancetype)initWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode message:(NSString*)format, ... NS_FORMAT_FUNCTION(2,3);
|
||||
- (instancetype)initWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode message:(NSString*)format, ... NS_FORMAT_FUNCTION(2, 3);
|
||||
|
||||
/**
|
||||
* Initializes a server error response with the corresponding HTTP status code.
|
||||
*/
|
||||
- (instancetype)initWithServerError:(GCDWebServerServerErrorHTTPStatusCode)errorCode message:(NSString*)format, ... NS_FORMAT_FUNCTION(2,3);
|
||||
- (instancetype)initWithServerError:(GCDWebServerServerErrorHTTPStatusCode)errorCode message:(NSString*)format, ... NS_FORMAT_FUNCTION(2, 3);
|
||||
|
||||
/**
|
||||
* Initializes a client error response with the corresponding HTTP status code
|
||||
* and an underlying NSError.
|
||||
*/
|
||||
- (instancetype)initWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode underlyingError:(NSError*)underlyingError message:(NSString*)format, ... NS_FORMAT_FUNCTION(3,4);
|
||||
- (instancetype)initWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode underlyingError:(nullable NSError*)underlyingError message:(NSString*)format, ... NS_FORMAT_FUNCTION(3, 4);
|
||||
|
||||
/**
|
||||
* Initializes a server error response with the corresponding HTTP status code
|
||||
* and an underlying NSError.
|
||||
*/
|
||||
- (instancetype)initWithServerError:(GCDWebServerServerErrorHTTPStatusCode)errorCode underlyingError:(NSError*)underlyingError message:(NSString*)format, ... NS_FORMAT_FUNCTION(3,4);
|
||||
- (instancetype)initWithServerError:(GCDWebServerServerErrorHTTPStatusCode)errorCode underlyingError:(nullable NSError*)underlyingError message:(NSString*)format, ... NS_FORMAT_FUNCTION(3, 4);
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@ -31,10 +31,6 @@
|
||||
|
||||
#import "GCDWebServerPrivate.h"
|
||||
|
||||
@interface GCDWebServerErrorResponse ()
|
||||
- (instancetype)initWithStatusCode:(NSInteger)statusCode underlyingError:(NSError*)underlyingError messageFormat:(NSString*)format arguments:(va_list)arguments;
|
||||
@end
|
||||
|
||||
@implementation GCDWebServerErrorResponse
|
||||
|
||||
+ (instancetype)responseWithClientError:(GCDWebServerClientErrorHTTPStatusCode)errorCode message:(NSString*)format, ... {
|
||||
|
||||
@ -27,6 +27,8 @@
|
||||
|
||||
#import "GCDWebServerResponse.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* The GCDWebServerFileResponse subclass of GCDWebServerResponse reads the body
|
||||
* of the HTTP response from a file on disk.
|
||||
@ -36,17 +38,20 @@
|
||||
* metadata.
|
||||
*/
|
||||
@interface GCDWebServerFileResponse : GCDWebServerResponse
|
||||
@property(nonatomic, copy) NSString* contentType; // Redeclare as non-null
|
||||
@property(nonatomic) NSDate* lastModifiedDate; // Redeclare as non-null
|
||||
@property(nonatomic, copy) NSString* eTag; // Redeclare as non-null
|
||||
|
||||
/**
|
||||
* Creates a response with the contents of a file.
|
||||
*/
|
||||
+ (instancetype)responseWithFile:(NSString*)path;
|
||||
+ (nullable instancetype)responseWithFile:(NSString*)path;
|
||||
|
||||
/**
|
||||
* Creates a response like +responseWithFile: and sets the "Content-Disposition"
|
||||
* HTTP header for a download if the "attachment" argument is YES.
|
||||
*/
|
||||
+ (instancetype)responseWithFile:(NSString*)path isAttachment:(BOOL)attachment;
|
||||
+ (nullable instancetype)responseWithFile:(NSString*)path isAttachment:(BOOL)attachment;
|
||||
|
||||
/**
|
||||
* Creates a response like +responseWithFile: but restricts the file contents
|
||||
@ -54,26 +59,26 @@
|
||||
*
|
||||
* See -initWithFile:byteRange: for details.
|
||||
*/
|
||||
+ (instancetype)responseWithFile:(NSString*)path byteRange:(NSRange)range;
|
||||
+ (nullable instancetype)responseWithFile:(NSString*)path byteRange:(NSRange)range;
|
||||
|
||||
/**
|
||||
* Creates a response like +responseWithFile:byteRange: and sets the
|
||||
* "Content-Disposition" HTTP header for a download if the "attachment"
|
||||
* argument is YES.
|
||||
*/
|
||||
+ (instancetype)responseWithFile:(NSString*)path byteRange:(NSRange)range isAttachment:(BOOL)attachment;
|
||||
+ (nullable instancetype)responseWithFile:(NSString*)path byteRange:(NSRange)range isAttachment:(BOOL)attachment;
|
||||
|
||||
/**
|
||||
* Initializes a response with the contents of a file.
|
||||
*/
|
||||
- (instancetype)initWithFile:(NSString*)path;
|
||||
- (nullable instancetype)initWithFile:(NSString*)path;
|
||||
|
||||
/**
|
||||
* Initializes a response like +responseWithFile: and sets the
|
||||
* "Content-Disposition" HTTP header for a download if the "attachment"
|
||||
* argument is YES.
|
||||
*/
|
||||
- (instancetype)initWithFile:(NSString*)path isAttachment:(BOOL)attachment;
|
||||
- (nullable instancetype)initWithFile:(NSString*)path isAttachment:(BOOL)attachment;
|
||||
|
||||
/**
|
||||
* Initializes a response like -initWithFile: but restricts the file contents
|
||||
@ -86,11 +91,18 @@
|
||||
* This argument would typically be set to the value of the byteRange property
|
||||
* of the current GCDWebServerRequest.
|
||||
*/
|
||||
- (instancetype)initWithFile:(NSString*)path byteRange:(NSRange)range;
|
||||
- (nullable instancetype)initWithFile:(NSString*)path byteRange:(NSRange)range;
|
||||
|
||||
/**
|
||||
* This method is the designated initializer for the class.
|
||||
*
|
||||
* If MIME type overrides are specified, they allow to customize the built-in
|
||||
* mapping from extensions to MIME types. Keys of the dictionary must be lowercased
|
||||
* file extensions without the period, and the values must be the corresponding
|
||||
* MIME types.
|
||||
*/
|
||||
- (instancetype)initWithFile:(NSString*)path byteRange:(NSRange)range isAttachment:(BOOL)attachment;
|
||||
- (nullable instancetype)initWithFile:(NSString*)path byteRange:(NSRange)range isAttachment:(BOOL)attachment mimeTypeOverrides:(nullable NSDictionary*)overrides;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@ -35,16 +35,14 @@
|
||||
|
||||
#define kFileReadBufferSize (32 * 1024)
|
||||
|
||||
@interface GCDWebServerFileResponse () {
|
||||
@private
|
||||
@implementation GCDWebServerFileResponse {
|
||||
NSString* _path;
|
||||
NSUInteger _offset;
|
||||
NSUInteger _size;
|
||||
int _file;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation GCDWebServerFileResponse
|
||||
@dynamic contentType, lastModifiedDate, eTag;
|
||||
|
||||
+ (instancetype)responseWithFile:(NSString*)path {
|
||||
return [[[self class] alloc] initWithFile:path];
|
||||
@ -59,26 +57,26 @@
|
||||
}
|
||||
|
||||
+ (instancetype)responseWithFile:(NSString*)path byteRange:(NSRange)range isAttachment:(BOOL)attachment {
|
||||
return [[[self class] alloc] initWithFile:path byteRange:range isAttachment:attachment];
|
||||
return [[[self class] alloc] initWithFile:path byteRange:range isAttachment:attachment mimeTypeOverrides:nil];
|
||||
}
|
||||
|
||||
- (instancetype)initWithFile:(NSString*)path {
|
||||
return [self initWithFile:path byteRange:NSMakeRange(NSUIntegerMax, 0) isAttachment:NO];
|
||||
return [self initWithFile:path byteRange:NSMakeRange(NSUIntegerMax, 0) isAttachment:NO mimeTypeOverrides:nil];
|
||||
}
|
||||
|
||||
- (instancetype)initWithFile:(NSString*)path isAttachment:(BOOL)attachment {
|
||||
return [self initWithFile:path byteRange:NSMakeRange(NSUIntegerMax, 0) isAttachment:attachment];
|
||||
return [self initWithFile:path byteRange:NSMakeRange(NSUIntegerMax, 0) isAttachment:attachment mimeTypeOverrides:nil];
|
||||
}
|
||||
|
||||
- (instancetype)initWithFile:(NSString*)path byteRange:(NSRange)range {
|
||||
return [self initWithFile:path byteRange:range isAttachment:NO];
|
||||
return [self initWithFile:path byteRange:range isAttachment:NO mimeTypeOverrides:nil];
|
||||
}
|
||||
|
||||
static inline NSDate* _NSDateFromTimeSpec(const struct timespec* t) {
|
||||
return [NSDate dateWithTimeIntervalSince1970:((NSTimeInterval)t->tv_sec + (NSTimeInterval)t->tv_nsec / 1000000000.0)];
|
||||
}
|
||||
|
||||
- (instancetype)initWithFile:(NSString*)path byteRange:(NSRange)range isAttachment:(BOOL)attachment {
|
||||
- (instancetype)initWithFile:(NSString*)path byteRange:(NSRange)range isAttachment:(BOOL)attachment mimeTypeOverrides:(NSDictionary*)overrides {
|
||||
struct stat info;
|
||||
if (lstat([path fileSystemRepresentation], &info) || !(info.st_mode & S_IFREG)) {
|
||||
GWS_DNOT_REACHED();
|
||||
@ -91,7 +89,7 @@ static inline NSDate* _NSDateFromTimeSpec(const struct timespec* t) {
|
||||
}
|
||||
#endif
|
||||
NSUInteger fileSize = (NSUInteger)info.st_size;
|
||||
|
||||
|
||||
BOOL hasByteRange = GCDWebServerIsValidByteRange(range);
|
||||
if (hasByteRange) {
|
||||
if (range.location != NSUIntegerMax) {
|
||||
@ -108,7 +106,7 @@ static inline NSDate* _NSDateFromTimeSpec(const struct timespec* t) {
|
||||
range.location = 0;
|
||||
range.length = fileSize;
|
||||
}
|
||||
|
||||
|
||||
if ((self = [super init])) {
|
||||
_path = [path copy];
|
||||
_offset = range.location;
|
||||
@ -118,7 +116,7 @@ static inline NSDate* _NSDateFromTimeSpec(const struct timespec* t) {
|
||||
[self setValue:[NSString stringWithFormat:@"bytes %lu-%lu/%lu", (unsigned long)_offset, (unsigned long)(_offset + _size - 1), (unsigned long)fileSize] forAdditionalHeader:@"Content-Range"];
|
||||
GWS_LOG_DEBUG(@"Using content bytes range [%lu-%lu] for file \"%@\"", (unsigned long)_offset, (unsigned long)(_offset + _size - 1), path);
|
||||
}
|
||||
|
||||
|
||||
if (attachment) {
|
||||
NSString* fileName = [path lastPathComponent];
|
||||
NSData* data = [[fileName stringByReplacingOccurrencesOfString:@"\"" withString:@""] dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:YES];
|
||||
@ -130,8 +128,8 @@ static inline NSDate* _NSDateFromTimeSpec(const struct timespec* t) {
|
||||
GWS_DNOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
self.contentType = GCDWebServerGetMimeTypeForExtension([_path pathExtension]);
|
||||
|
||||
self.contentType = GCDWebServerGetMimeTypeForExtension([_path pathExtension], overrides);
|
||||
self.contentLength = _size;
|
||||
self.lastModifiedDate = _NSDateFromTimeSpec(&info.st_mtimespec);
|
||||
self.eTag = [NSString stringWithFormat:@"%llu/%li/%li", info.st_ino, info.st_mtimespec.tv_sec, info.st_mtimespec.tv_nsec];
|
||||
|
||||
@ -27,12 +27,14 @@
|
||||
|
||||
#import "GCDWebServerResponse.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* The GCDWebServerStreamBlock is called to stream the data for the HTTP body.
|
||||
* The block must return either a chunk of data, an empty NSData when done, or
|
||||
* nil on error and set the "error" argument which is guaranteed to be non-NULL.
|
||||
*/
|
||||
typedef NSData* (^GCDWebServerStreamBlock)(NSError** error);
|
||||
typedef NSData* _Nullable (^GCDWebServerStreamBlock)(NSError** error);
|
||||
|
||||
/**
|
||||
* The GCDWebServerAsyncStreamBlock works like the GCDWebServerStreamBlock
|
||||
@ -51,6 +53,7 @@ typedef void (^GCDWebServerAsyncStreamBlock)(GCDWebServerBodyReaderCompletionBlo
|
||||
* the body of the HTTP response using a GCD block.
|
||||
*/
|
||||
@interface GCDWebServerStreamedResponse : GCDWebServerResponse
|
||||
@property(nonatomic, copy) NSString* contentType; // Redeclare as non-null
|
||||
|
||||
/**
|
||||
* Creates a response with streamed data and a given content type.
|
||||
@ -73,3 +76,5 @@ typedef void (^GCDWebServerAsyncStreamBlock)(GCDWebServerBodyReaderCompletionBlo
|
||||
- (instancetype)initWithContentType:(NSString*)type asyncStreamBlock:(GCDWebServerAsyncStreamBlock)block;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@ -31,13 +31,11 @@
|
||||
|
||||
#import "GCDWebServerPrivate.h"
|
||||
|
||||
@interface GCDWebServerStreamedResponse () {
|
||||
@private
|
||||
@implementation GCDWebServerStreamedResponse {
|
||||
GCDWebServerAsyncStreamBlock _block;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation GCDWebServerStreamedResponse
|
||||
@dynamic contentType;
|
||||
|
||||
+ (instancetype)responseWithContentType:(NSString*)type streamBlock:(GCDWebServerStreamBlock)block {
|
||||
return [[[self class] alloc] initWithContentType:type streamBlock:block];
|
||||
@ -48,19 +46,20 @@
|
||||
}
|
||||
|
||||
- (instancetype)initWithContentType:(NSString*)type streamBlock:(GCDWebServerStreamBlock)block {
|
||||
return [self initWithContentType:type asyncStreamBlock:^(GCDWebServerBodyReaderCompletionBlock completionBlock) {
|
||||
|
||||
NSError* error = nil;
|
||||
NSData* data = block(&error);
|
||||
completionBlock(data, error);
|
||||
|
||||
}];
|
||||
return [self initWithContentType:type
|
||||
asyncStreamBlock:^(GCDWebServerBodyReaderCompletionBlock completionBlock) {
|
||||
|
||||
NSError* error = nil;
|
||||
NSData* data = block(&error);
|
||||
completionBlock(data, error);
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
- (instancetype)initWithContentType:(NSString*)type asyncStreamBlock:(GCDWebServerAsyncStreamBlock)block {
|
||||
if ((self = [super init])) {
|
||||
_block = [block copy];
|
||||
|
||||
|
||||
self.contentType = type;
|
||||
}
|
||||
return self;
|
||||
|
||||
Reference in New Issue
Block a user