Releases: swhitty/FlyingFox
Fix WebSocket frames
Small bug fix release
-
#126 Fixes issue with 16bit WebSocket frames of (length >= 126). 🙏🏻 @kateinoigakukun
-
#125 Renames
HTTPServer.start()->run()for compatibly with with swift-service-lifecycle
Linux Static SDK Support / Fix Linking Issue
Fixes linking issue when archiving builds on Darwin platforms when using Xcode 16 (#122) 🙏🏻 @nneubauer
Adds initial support for static linux SDK (Musl) #121
Swift 6 Language Mode
Uses Swift 6 language mode when building with Xcode 16 (RC)
Makes EchoWSMessageHandler public #115 🙏🏻 @stefanomondino
Unit tests have been migrated to Swift Testing when available
Uses variation of lock from swift-mutex
Uses variation of withThrowingTimeout from swift-timeout
Cocoapods support removed
New HTTPBodySequence
Swift 5.9+
Support for Swift 5.8 has been removed.
HTTPBodySequence
HTTPBodySequence has had the underlying sequence replaced to consume less memory.
- Requests with body size < 2MB are now buffered on demand via
HTTPSharedReplaySequence. These sequences can be iterated multiple times concurrently. - Requests with body size > 2MB are not buffered and can only be iterated a single time.
Configuration
HTTPServer.Configuration is a new struct containing all properties used to start HTTPServer.
Remote Address
HTTPRequest.remoteAddress allows handlers to receive the address and port of the remove client making the request.
HTTPRequest.remoteIPAddress is also added as a convenience, preferring the client value from the X-Forwarded-For header which is useful for handlers running behind a reverse proxy.
🙏🏻 @blaineam
watchOS Support
Support for watchOS was added #105, #98
🙏🏻 @NicoHinderling @noahsmartin
Windows fix
A bug was fixed within windows builds #104
🙏🏻 @bdashore3
Dynamic Buffer Overflow Fix
Route Parameters
- Adds route parameters (🙏🏻 @tonyarnold)
HTTPRoutenow matches methods againstSet<HTTPMethod>- Replaces
AsyncChunkedSequencewithAsyncBufferedSequence - Support for
Transfer-Encoding: chunkedfor responses without a known size
Route Parameters
Routes can include named parameters within a path or query item using the : prefix. Any string supplied to this parameter will match the route, handlers can access the value of the string using request.routePamaters.
handler.appendRoute("GET /creature/:name?type=:beast") { request in
let name = request.routeParameters["name"]
let beast = request.routeParameters["beast"]
return HTTPResponse(statusCode: .ok)
}When using Swift 5.9+, route parameters can be automatically extracted and mapped to closure parameters of handlers.
enum Beast: String, HTTPRouteParameterValue {
case fish
case dog
}
handler.appendRoute("GET /creature/:name?type=:beast") { (name: String, beast: Beast) -> HTTPResponse in
return HTTPResponse(statusCode: .ok)
}The request can be optionally included.
handler.appendRoute("GET /creature/:name?type=:beast") { (request: HTTPRequest, name: String, beast: Beast) -> HTTPResponse in
return HTTPResponse(statusCode: .ok)
}String, Int, Double, Bool and any type that conforms to HTTPRouteParameterValue can be extracted.
0.14.0 RangeReplaceableCollection
RoutedHTTPHandlernow conforms toRangeReplaceableCollection#77- Some internal continuations are now
swhitty/IdentifiableContinuationmaking it easier to manage continuations with cancellation handlers.
Fix Percent Encoded Paths Swift 5.7+
- Fixes support for parsing and matching requests and routes with percent encoded paths. #74 Thanks @wirrareka
- Drops support for Swift 5.5 and 5.6.
Fix crash in HTTPServer.stop()
Fix Buffer leak
Initial Support for Swift 5.9 & DiscardingTaskGroup
- Adds support for Swift 5.9 and DiscardingTaskGroup (when available). #60
- Xcode 15 Beta 2 support
- Support
image/x-icon,image/webp,image/jp2Content-Type.