|
|
@@ -9,7 +9,7 @@ import Foundation
|
|
|
|
|
|
class HttpServer
|
|
|
{
|
|
|
- typealias Handler = (String, String, Dictionary<String,String>) -> HttpResponse
|
|
|
+ typealias Handler = HttpRequest -> HttpResponse
|
|
|
|
|
|
var handlers: [(expression: NSRegularExpression, handler: Handler)] = []
|
|
|
var acceptSocket: CInt = -1
|
|
|
@@ -42,9 +42,9 @@ class HttpServer
|
|
|
}
|
|
|
set ( directoryPath ) {
|
|
|
if let regex = NSRegularExpression.regularExpressionWithPattern(path, options: expressionOptions, error: nil) {
|
|
|
- handlers.append(expression: regex, handler: { (method, path, headers) in
|
|
|
- let result = regex.firstMatchInString(path, options: self.matchingOptions, range: NSMakeRange(0, path.lengthOfBytesUsingEncoding(NSASCIIStringEncoding)))
|
|
|
- let nsPath: NSString = path
|
|
|
+ handlers.append(expression: regex, handler: { request in
|
|
|
+ let result = regex.firstMatchInString(request.url, options: self.matchingOptions, range: NSMakeRange(0, request.url.lengthOfBytesUsingEncoding(NSASCIIStringEncoding)))
|
|
|
+ let nsPath: NSString = request.url
|
|
|
let filesPath = directoryPath.stringByExpandingTildeInPath
|
|
|
.stringByAppendingPathComponent(nsPath.substringWithRange(result.rangeAtIndex(1)))
|
|
|
if let fileBody = String.stringWithContentsOfFile(filesPath, encoding: NSASCIIStringEncoding, error: nil) {
|
|
|
@@ -70,10 +70,10 @@ class HttpServer
|
|
|
while let socket = Socket.acceptClientSocket(self.acceptSocket) {
|
|
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
|
|
|
let parser = HttpParser()
|
|
|
- while let (path, method, headers) = parser.nextHttpRequest(socket) {
|
|
|
- let keepAlive = parser.supportsKeepAlive(headers)
|
|
|
- if let handler: Handler = self[path] {
|
|
|
- HttpServer.writeResponse(socket, response: handler(method, path, headers), keepAlive: keepAlive)
|
|
|
+ while let request = parser.nextHttpRequest(socket) {
|
|
|
+ let keepAlive = parser.supportsKeepAlive(request.headers)
|
|
|
+ if let handler: Handler = self[request.url] {
|
|
|
+ HttpServer.writeResponse(socket, response: handler(request), keepAlive: keepAlive)
|
|
|
} else {
|
|
|
HttpServer.writeResponse(socket, response: HttpResponse.NotFound, keepAlive: keepAlive)
|
|
|
}
|