@@ -99,22 +99,24 @@ proc unsafeSend(request: Request, content: string) =
99
99
100
100
proc send (
101
101
request: Request , code: HttpCode , headers: Option [RawHeaders ], body: string
102
- ) =
102
+ ): Future [ void ] =
103
103
when useHttpBeast:
104
104
let h =
105
105
if headers.isNone: " "
106
106
else : headers.get ().createHeaders
107
107
request.getNativeReq.send (code, body, h)
108
+ var fut = newFuture [void ]()
109
+ complete (fut)
110
+ return fut
108
111
else :
109
- # TODO : This may cause issues if we send too fast.
110
- asyncCheck request.getNativeReq.respond (
112
+ return request.getNativeReq.respond (
111
113
code, body, newHttpHeaders (headers.get (@ ({:})))
112
114
)
113
115
114
116
proc statusContent (request: Request , status: HttpCode , content: string ,
115
- headers: Option [RawHeaders ]) =
117
+ headers: Option [RawHeaders ]): Future [ void ] =
116
118
try :
117
- send (request, status, headers, content)
119
+ result = send (request, status, headers, content)
118
120
when not defined (release):
119
121
logging.debug (" $1 $2" % [$ status, toStr (headers)])
120
122
except :
@@ -188,18 +190,18 @@ proc sendStaticIfExists(
188
190
# If the user has a cached version of this file and it matches our
189
191
# version, let them use it
190
192
if req.headers.hasKey (" If-None-Match" ) and req.headers[" If-None-Match" ] == hashed:
191
- req.statusContent (Http304 , " " , none [RawHeaders ]())
193
+ await req.statusContent (Http304 , " " , none [RawHeaders ]())
192
194
else :
193
- req.statusContent (Http200 , file, some (@ ({
194
- " Content-Type" : mimetype,
195
- " ETag" : hashed
196
- })))
195
+ await req.statusContent (Http200 , file, some (@ ({
196
+ " Content-Type" : mimetype,
197
+ " ETag" : hashed
198
+ })))
197
199
else :
198
200
let headers = @ ({
199
201
" Content-Type" : mimetype,
200
202
" Content-Length" : $ fileSize
201
203
})
202
- req.statusContent (Http200 , " " , some (headers))
204
+ await req.statusContent (Http200 , " " , some (headers))
203
205
204
206
var fileStream = newFutureStream [string ](" sendStaticIfExists" )
205
207
var file = openAsync (p, fmRead)
@@ -227,7 +229,7 @@ proc close*(request: Request) =
227
229
# # Routes using this procedure must enable raw mode.
228
230
let nativeReq = request.getNativeReq ()
229
231
when useHttpBeast:
230
- nativeReq.forget ()
232
+ nativeReq.forget ()
231
233
nativeReq.client.close ()
232
234
233
235
proc defaultErrorFilter (error: RouteError ): ResponseData =
@@ -363,7 +365,7 @@ proc handleRequestSlow(
363
365
not dispatchedError and respData.content.len == 0 :
364
366
respData = await dispatchError (jes, req, initRouteError (respData))
365
367
366
- statusContent (
368
+ await statusContent (
367
369
req,
368
370
respData.code,
369
371
respData.content,
@@ -384,7 +386,7 @@ proc handleRequest(jes: Jester, httpReq: NativeRequest): Future[void] =
384
386
if likely (jes.matchers.len == 1 and not jes.matchers[0 ].async):
385
387
let respData = jes.matchers[0 ].syncProc (req)
386
388
if likely (respData.matched):
387
- statusContent (
389
+ return statusContent (
388
390
req,
389
391
respData.code,
390
392
respData.content,
@@ -398,9 +400,6 @@ proc handleRequest(jes: Jester, httpReq: NativeRequest): Future[void] =
398
400
let exc = getCurrentException ()
399
401
let respDataFut = dispatchError (jes, req, initRouteError (exc))
400
402
return handleRequestSlow (jes, req, respDataFut, true )
401
- let future = newFuture [void ]()
402
- complete (future)
403
- return future
404
403
405
404
proc newSettings * (
406
405
port = Port (5000 ), staticDir = getCurrentDir () / " public" ,
0 commit comments