Releases: swhitty/FlyingFox
UDP Socket & Android SDK Support
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
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)
HTTPRoute
now matches methods againstSet<HTTPMethod>
- Replaces
AsyncChunkedSequence
withAsyncBufferedSequence
- Support for
Transfer-Encoding: chunked
for 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
RoutedHTTPHandler
now conforms toRangeReplaceableCollection
#77- Some internal continuations are now
swhitty/IdentifiableContinuation
making 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.