@@ -89,7 +89,7 @@ public class GCDHTTPServer: HTTPServer, Loggable {
89
89
}
90
90
91
91
private func handle( request: ReadiumGCDWebServerRequest , completion: @escaping ReadiumGCDWebServerCompletionBlock ) {
92
- responseResource ( for: request) { resource, failureHandler in
92
+ responseResource ( for: request) { httpServerRequest , resource, failureHandler in
93
93
let response : ReadiumGCDWebServerResponse
94
94
switch resource. length {
95
95
case let . success( length) :
@@ -100,10 +100,11 @@ public class GCDHTTPServer: HTTPServer, Loggable {
100
100
)
101
101
case let . failure( error) :
102
102
self . log ( . error, error)
103
- failureHandler ? ( resource . link . href , request . url , error)
103
+ failureHandler ? ( httpServerRequest , error)
104
104
response = ReadiumGCDWebServerErrorResponse (
105
105
statusCode: error. httpStatusCode,
106
- error: error)
106
+ error: error
107
+ )
107
108
}
108
109
109
110
completion ( response) // goes back to ReadiumGCDWebServerConnection.m
@@ -112,13 +113,13 @@ public class GCDHTTPServer: HTTPServer, Loggable {
112
113
113
114
private func responseResource(
114
115
for request: ReadiumGCDWebServerRequest ,
115
- completion: @escaping ( Resource , FailureHandler ? ) -> Void
116
+ completion: @escaping ( HTTPServerRequest , Resource , FailureHandler ? ) -> Void
116
117
) {
117
- let completion = { resource, failureHandler in
118
+ let completion = { request , resource, failureHandler in
118
119
// Escape the queue to avoid deadlocks if something is using the
119
120
// server in the handler.
120
121
DispatchQueue . global ( ) . async {
121
- completion ( resource, failureHandler)
122
+ completion ( request , resource, failureHandler)
122
123
}
123
124
}
124
125
@@ -141,39 +142,46 @@ public class GCDHTTPServer: HTTPServer, Loggable {
141
142
142
143
for (endpoint, handler) in handlers {
143
144
if endpoint == pathWithoutAnchor {
144
- let resource = handler. resourceHandler ( HTTPServerRequest ( url: request. url, href: nil ) )
145
- completion ( transform ( resource: resource, at: endpoint) ,
145
+ let request = HTTPServerRequest ( url: request. url, href: nil )
146
+ let resource = handler. resourceHandler ( request)
147
+ completion ( request,
148
+ transform ( resource: resource, at: endpoint) ,
146
149
handler. failureHandler)
147
150
return
148
151
149
152
} else if path. hasPrefix ( endpoint. addingSuffix ( " / " ) ) {
150
- let resource = handler . resourceHandler ( HTTPServerRequest (
153
+ let request = HTTPServerRequest (
151
154
url: request. url,
152
155
href: path. removingPrefix ( endpoint. removingSuffix ( " / " ) )
153
- ) )
154
- completion ( transform ( resource: resource, at: endpoint) ,
156
+ )
157
+ let resource = handler. resourceHandler ( request)
158
+ completion ( request,
159
+ transform ( resource: resource, at: endpoint) ,
155
160
handler. failureHandler)
156
161
return
157
162
}
158
163
}
159
164
160
165
log ( . warning, " Resource not found for request \( request) " )
161
- completion ( FailureResource ( link: Link ( href: request. url. absoluteString) , error: . notFound( nil ) ) , nil )
166
+ completion (
167
+ HTTPServerRequest ( url: request. url, href: nil ) ,
168
+ FailureResource ( link: Link ( href: request. url. absoluteString) ,
169
+ error: . notFound( nil ) ) ,
170
+ nil )
162
171
}
163
172
}
164
173
165
174
// MARK: HTTPServer
166
175
167
176
public func serve( at endpoint: HTTPServerEndpoint ,
168
- handler: @escaping ( HTTPServerRequest ) -> Resource ,
177
+ handler: @escaping ( HTTPServerRequest ) -> Resource ,
169
178
failureHandler: FailureHandler ? ) throws -> URL {
170
179
try queue. sync ( flags: . barrier) {
171
180
if case . stopped = state {
172
181
try start ( )
173
182
}
174
183
175
184
guard case let . started( port: _, baseURL: baseURL) = state else {
176
- failureHandler ? ( endpoint, server. serverURL, . other( GCDHTTPServerError . serverNotStarted) )
177
185
throw GCDHTTPServerError . serverNotStarted
178
186
}
179
187
0 commit comments