Skip to content

Commit

Permalink
Merge pull request #75 from julien-c/master
Browse files Browse the repository at this point in the history
Linux: HTTP Range support: get rid of the NSRegularExpression dependency
  • Loading branch information
damian-kolakowski committed Dec 11, 2015
2 parents 5ca9e00 + 812d50a commit 3e86e11
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions Sources/Swifter/HttpHandlers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import Foundation

public class HttpHandlers {

private static let rangeExpression = try! NSRegularExpression(pattern: "bytes=(\\d*)-(\\d*)", options: .CaseInsensitive)
private static let rangePrefix = "bytes="

public class func directory(dir: String) -> (HttpRequest -> HttpResponse) {
return { request in
Expand All @@ -25,12 +25,22 @@ public class HttpHandlers {

if let rangeHeader = request.headers["range"] {

guard let match = rangeExpression.matchesInString(rangeHeader, options: .Anchored, range: NSRange(location: 0, length: rangeHeader.characters.count)).first where match.numberOfRanges == 3 else {
guard rangeHeader.hasPrefix(HttpHandlers.rangePrefix) else {
return HttpResponse.BadRequest
}

let startStr = (rangeHeader as NSString).substringWithRange(match.rangeAtIndex(1))
let endStr = (rangeHeader as NSString).substringWithRange(match.rangeAtIndex(2))
#if os(Linux)
let rangeString = rangeHeader.substringFromIndex(HttpHandlers.rangePrefix.characters.count)
#else
let rangeString = rangeHeader.substringFromIndex(rangeHeader.startIndex.advancedBy(HttpHandlers.rangePrefix.characters.count))
#endif
let rangeStringExploded = rangeString.split("-")
guard rangeStringExploded.count == 2 else {
return HttpResponse.BadRequest
}

let startStr = rangeStringExploded[0]
let endStr = rangeStringExploded[1]

guard let start = Int(startStr), end = Int(endStr) else {
var array = [UInt8](count: fileBody.length, repeatedValue: 0)
Expand Down

0 comments on commit 3e86e11

Please sign in to comment.