diff --git a/CGDWebServer/GCDWebServer.h b/CGDWebServer/GCDWebServer.h index bfd0a40..479e397 100644 --- a/CGDWebServer/GCDWebServer.h +++ b/CGDWebServer/GCDWebServer.h @@ -31,14 +31,7 @@ typedef GCDWebServerRequest* (^GCDWebServerMatchBlock)(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery); typedef GCDWebServerResponse* (^GCDWebServerProcessBlock)(GCDWebServerRequest* request); -@interface GCDWebServer : NSObject { -@private - NSMutableArray* _handlers; - - NSUInteger _port; - dispatch_source_t _source; - CFNetServiceRef _service; -} +@interface GCDWebServer : NSObject @property(nonatomic, readonly, getter=isRunning) BOOL running; @property(nonatomic, readonly) NSUInteger port; @property(nonatomic, readonly) NSString* bonjourName; // Only non-nil if Bonjour registration is active diff --git a/CGDWebServer/GCDWebServer.m b/CGDWebServer/GCDWebServer.m index b2e99dd..275f1be 100644 --- a/CGDWebServer/GCDWebServer.m +++ b/CGDWebServer/GCDWebServer.m @@ -36,6 +36,23 @@ #define kMaxPendingConnections 16 +@interface GCDWebServer () { +@private + NSMutableArray* _handlers; + + NSUInteger _port; + dispatch_source_t _source; + CFNetServiceRef _service; +} +@end + +@interface GCDWebServerHandler () { +@private + GCDWebServerMatchBlock _matchBlock; + GCDWebServerProcessBlock _processBlock; +} +@end + static BOOL _run; NSString* GCDWebServerGetMimeTypeForExtension(NSString* extension) { diff --git a/CGDWebServer/GCDWebServerConnection.h b/CGDWebServer/GCDWebServerConnection.h index dd7e990..644e060 100644 --- a/CGDWebServer/GCDWebServerConnection.h +++ b/CGDWebServer/GCDWebServerConnection.h @@ -29,20 +29,7 @@ @class GCDWebServerHandler; -@interface GCDWebServerConnection : NSObject { -@private - GCDWebServer* _server; - NSData* _address; - CFSocketNativeHandle _socket; - NSUInteger _bytesRead; - NSUInteger _bytesWritten; - - CFHTTPMessageRef _requestMessage; - GCDWebServerRequest* _request; - GCDWebServerHandler* _handler; - CFHTTPMessageRef _responseMessage; - GCDWebServerResponse* _response; -} +@interface GCDWebServerConnection : NSObject @property(nonatomic, readonly) GCDWebServer* server; @property(nonatomic, readonly) NSData* address; // struct sockaddr @property(nonatomic, readonly) NSUInteger totalBytesRead; diff --git a/CGDWebServer/GCDWebServerConnection.m b/CGDWebServer/GCDWebServerConnection.m index a5c6451..7e36d43 100644 --- a/CGDWebServer/GCDWebServerConnection.m +++ b/CGDWebServer/GCDWebServerConnection.m @@ -45,6 +45,22 @@ static NSData* _continueData = nil; static NSDateFormatter* _dateFormatter = nil; static dispatch_queue_t _formatterQueue = NULL; +@interface GCDWebServerConnection () { +@private + GCDWebServer* _server; + NSData* _address; + CFSocketNativeHandle _socket; + NSUInteger _bytesRead; + NSUInteger _bytesWritten; + + CFHTTPMessageRef _requestMessage; + GCDWebServerRequest* _request; + GCDWebServerHandler* _handler; + CFHTTPMessageRef _responseMessage; + GCDWebServerResponse* _response; +} +@end + @implementation GCDWebServerConnection (Read) - (void)_readBufferWithLength:(NSUInteger)length completionBlock:(ReadBufferCompletionBlock)block { diff --git a/CGDWebServer/GCDWebServerPrivate.h b/CGDWebServer/GCDWebServerPrivate.h index c29785e..b8fbdb1 100644 --- a/CGDWebServer/GCDWebServerPrivate.h +++ b/CGDWebServer/GCDWebServerPrivate.h @@ -126,11 +126,7 @@ NSDictionary* GCDWebServerParseURLEncodedForm(NSString* form); @property(nonatomic, readonly) NSArray* handlers; @end -@interface GCDWebServerHandler : NSObject { -@private - GCDWebServerMatchBlock _matchBlock; - GCDWebServerProcessBlock _processBlock; -} +@interface GCDWebServerHandler : NSObject @property(nonatomic, readonly) GCDWebServerMatchBlock matchBlock; @property(nonatomic, readonly) GCDWebServerProcessBlock processBlock; - (id)initWithMatchBlock:(GCDWebServerMatchBlock)matchBlock processBlock:(GCDWebServerProcessBlock)processBlock; diff --git a/CGDWebServer/GCDWebServerRequest.h b/CGDWebServer/GCDWebServerRequest.h index a2eb44b..0cebea6 100644 --- a/CGDWebServer/GCDWebServerRequest.h +++ b/CGDWebServer/GCDWebServerRequest.h @@ -27,16 +27,7 @@ #import -@interface GCDWebServerRequest : NSObject { -@private - NSString* _method; - NSURL* _url; - NSDictionary* _headers; - NSString* _path; - NSDictionary* _query; - NSString* _type; - NSUInteger _length; -} +@interface GCDWebServerRequest : NSObject @property(nonatomic, readonly) NSString* method; @property(nonatomic, readonly) NSURL* URL; @property(nonatomic, readonly) NSDictionary* headers; @@ -54,18 +45,11 @@ - (BOOL)close; // Implementation required @end -@interface GCDWebServerDataRequest : GCDWebServerRequest { -@private - NSMutableData* _data; -} +@interface GCDWebServerDataRequest : GCDWebServerRequest @property(nonatomic, readonly) NSData* data; // Only valid after open / write / close sequence @end -@interface GCDWebServerFileRequest : GCDWebServerRequest { -@private - NSString* _filePath; - int _file; -} +@interface GCDWebServerFileRequest : GCDWebServerRequest @property(nonatomic, readonly) NSString* filePath; // Only valid after open / write / close sequence @end @@ -77,48 +61,22 @@ + (NSString*)mimeType; @end -@interface GCDWebServerMultiPart : NSObject { -@private - NSString* _contentType; - NSString* _mimeType; -} +@interface GCDWebServerMultiPart : NSObject @property(nonatomic, readonly) NSString* contentType; // May be nil @property(nonatomic, readonly) NSString* mimeType; // Defaults to "text/plain" per specifications if undefined @end -@interface GCDWebServerMultiPartArgument : GCDWebServerMultiPart { -@private - NSData* _data; - NSString* _string; -} +@interface GCDWebServerMultiPartArgument : GCDWebServerMultiPart @property(nonatomic, readonly) NSData* data; @property(nonatomic, readonly) NSString* string; // May be nil (only valid for text mime types @end -@interface GCDWebServerMultiPartFile : GCDWebServerMultiPart { -@private - NSString* _fileName; - NSString* _temporaryPath; -} +@interface GCDWebServerMultiPartFile : GCDWebServerMultiPart @property(nonatomic, readonly) NSString* fileName; // May be nil @property(nonatomic, readonly) NSString* temporaryPath; @end -@interface GCDWebServerMultiPartFormRequest : GCDWebServerRequest { -@private - NSData* _boundary; - - NSUInteger _parserState; - NSMutableData* _parserData; - NSString* _controlName; - NSString* _fileName; - NSString* _contentType; - NSString* _tmpPath; - int _tmpFile; - - NSMutableDictionary* _arguments; - NSMutableDictionary* _files; -} +@interface GCDWebServerMultiPartFormRequest : GCDWebServerRequest @property(nonatomic, readonly) NSDictionary* arguments; // Only valid after open / write / close sequence @property(nonatomic, readonly) NSDictionary* files; // Only valid after open / write / close sequence + (NSString*)mimeType; diff --git a/CGDWebServer/GCDWebServerRequest.m b/CGDWebServer/GCDWebServerRequest.m index 4585147..2e37cd4 100644 --- a/CGDWebServer/GCDWebServerRequest.m +++ b/CGDWebServer/GCDWebServerRequest.m @@ -37,6 +37,69 @@ enum { kParserState_End }; +@interface GCDWebServerRequest () { +@private + NSString* _method; + NSURL* _url; + NSDictionary* _headers; + NSString* _path; + NSDictionary* _query; + NSString* _type; + NSUInteger _length; +} +@end + +@interface GCDWebServerDataRequest () { +@private + NSMutableData* _data; +} +@end + +@interface GCDWebServerFileRequest () { +@private + NSString* _filePath; + int _file; +} +@end + +@interface GCDWebServerMultiPart () { +@private + NSString* _contentType; + NSString* _mimeType; +} +@end + +@interface GCDWebServerMultiPartArgument () { +@private + NSData* _data; + NSString* _string; +} +@end + +@interface GCDWebServerMultiPartFile () { +@private + NSString* _fileName; + NSString* _temporaryPath; +} +@end + +@interface GCDWebServerMultiPartFormRequest () { +@private + NSData* _boundary; + + NSUInteger _parserState; + NSMutableData* _parserData; + NSString* _controlName; + NSString* _fileName; + NSString* _contentType; + NSString* _tmpPath; + int _tmpFile; + + NSMutableDictionary* _arguments; + NSMutableDictionary* _files; +} +@end + static NSData* _newlineData = nil; static NSData* _newlinesData = nil; static NSData* _dashNewlineData = nil; diff --git a/CGDWebServer/GCDWebServerResponse.h b/CGDWebServer/GCDWebServerResponse.h index 10ab2b1..1076e99 100644 --- a/CGDWebServer/GCDWebServerResponse.h +++ b/CGDWebServer/GCDWebServerResponse.h @@ -27,14 +27,7 @@ #import -@interface GCDWebServerResponse : NSObject { -@private - NSString* _type; - NSUInteger _length; - NSInteger _status; - NSUInteger _maxAge; - NSMutableDictionary* _headers; -} +@interface GCDWebServerResponse : NSObject @property(nonatomic, readonly) NSString* contentType; @property(nonatomic, readonly) NSUInteger contentLength; @property(nonatomic) NSInteger statusCode; // Default is 200 @@ -60,11 +53,7 @@ - (id)initWithRedirect:(NSURL*)location permanent:(BOOL)permanent; @end -@interface GCDWebServerDataResponse : GCDWebServerResponse { -@private - NSData* _data; - NSInteger _offset; -} +@interface GCDWebServerDataResponse : GCDWebServerResponse + (GCDWebServerDataResponse*)responseWithData:(NSData*)data contentType:(NSString*)type; - (id)initWithData:(NSData*)data contentType:(NSString*)type; @end @@ -78,11 +67,7 @@ - (id)initWithHTMLTemplate:(NSString*)path variables:(NSDictionary*)variables; // Simple template system that replaces all occurences of "%variable%" with corresponding value (encodes using UTF-8) @end -@interface GCDWebServerFileResponse : GCDWebServerResponse { -@private - NSString* _path; - int _file; -} +@interface GCDWebServerFileResponse : GCDWebServerResponse + (GCDWebServerFileResponse*)responseWithFile:(NSString*)path; + (GCDWebServerFileResponse*)responseWithFile:(NSString*)path isAttachment:(BOOL)attachment; - (id)initWithFile:(NSString*)path; diff --git a/CGDWebServer/GCDWebServerResponse.m b/CGDWebServer/GCDWebServerResponse.m index d518728..04d764a 100644 --- a/CGDWebServer/GCDWebServerResponse.m +++ b/CGDWebServer/GCDWebServerResponse.m @@ -29,6 +29,30 @@ #import "GCDWebServerPrivate.h" +@interface GCDWebServerResponse () { +@private + NSString* _type; + NSUInteger _length; + NSInteger _status; + NSUInteger _maxAge; + NSMutableDictionary* _headers; +} +@end + +@interface GCDWebServerDataResponse () { +@private + NSData* _data; + NSInteger _offset; +} +@end + +@interface GCDWebServerFileResponse () { +@private + NSString* _path; + int _file; +} +@end + @implementation GCDWebServerResponse @synthesize contentType=_type, contentLength=_length, statusCode=_status, cacheControlMaxAge=_maxAge, additionalHeaders=_headers;