mirror of
https://github.com/logos-storage/nim-json-rpc.git
synced 2026-01-07 16:13:07 +00:00
Fix improper yield usage in json-rpc-websocketserver
This commit is contained in:
parent
f90e946b6a
commit
b6d068f489
@ -33,15 +33,26 @@ type
|
|||||||
wsserver: WSServer
|
wsserver: WSServer
|
||||||
authHooks: seq[WsAuthHook]
|
authHooks: seq[WsAuthHook]
|
||||||
|
|
||||||
proc handleRequest(rpc: RpcWebSocketServer, request: HttpRequest) {.async.} =
|
proc handleRequest(rpc: RpcWebSocketServer, request: HttpRequest) {.async: (raises: [CancelledError]).} =
|
||||||
trace "Handling request:", uri = request.uri.path
|
trace "Handling request:", uri = request.uri.path
|
||||||
trace "Initiating web socket connection."
|
trace "Initiating web socket connection."
|
||||||
|
|
||||||
# if hook result is false,
|
# if hook result is false,
|
||||||
# it means we should return immediately
|
# it means we should return immediately
|
||||||
for hook in rpc.authHooks:
|
try:
|
||||||
let res = await hook(request)
|
for hook in rpc.authHooks:
|
||||||
if not res:
|
let res = await hook(request)
|
||||||
|
if not res:
|
||||||
|
return
|
||||||
|
except CatchableError as exc:
|
||||||
|
error "Internal error while processing JSON-RPC hook", msg=exc.msg
|
||||||
|
try:
|
||||||
|
await request.sendResponse(Http503,
|
||||||
|
data = "",
|
||||||
|
content = "Internal error, processing JSON-RPC hook: " & exc.msg)
|
||||||
|
return
|
||||||
|
except CatchableError as exc:
|
||||||
|
error "Something error", msg=exc.msg
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -67,24 +78,27 @@ proc handleRequest(rpc: RpcWebSocketServer, request: HttpRequest) {.async.} =
|
|||||||
)
|
)
|
||||||
break
|
break
|
||||||
|
|
||||||
let future = rpc.route(string.fromBytes(recvData))
|
let data = try:
|
||||||
yield future
|
await rpc.route(string.fromBytes(recvData))
|
||||||
if future.failed:
|
except CancelledError as exc:
|
||||||
debug "Internal error, while processing RPC call",
|
raise exc
|
||||||
address = $request.uri
|
except CatchableError as exc:
|
||||||
await ws.close(
|
debug "Internal error, while processing RPC call",
|
||||||
reason = "Internal error, while processing RPC call"
|
address = $request.uri
|
||||||
)
|
await ws.close(
|
||||||
break
|
reason = "Internal error, while processing RPC call"
|
||||||
|
)
|
||||||
|
break
|
||||||
|
|
||||||
var data = future.read()
|
|
||||||
trace "RPC result has been sent", address = $request.uri
|
trace "RPC result has been sent", address = $request.uri
|
||||||
|
|
||||||
await ws.send(data)
|
await ws.send(data)
|
||||||
|
|
||||||
except WebSocketError as exc:
|
except WebSocketError as exc:
|
||||||
error "WebSocket error:", exception = exc.msg
|
error "WebSocket error:", exception = exc.msg
|
||||||
|
|
||||||
|
except CatchableError as exc:
|
||||||
|
error "Something error", msg=exc.msg
|
||||||
|
|
||||||
proc initWebsocket(rpc: RpcWebSocketServer, compression: bool,
|
proc initWebsocket(rpc: RpcWebSocketServer, compression: bool,
|
||||||
authHooks: seq[WsAuthHook],
|
authHooks: seq[WsAuthHook],
|
||||||
rng: ref HmacDrbgContext) =
|
rng: ref HmacDrbgContext) =
|
||||||
@ -207,5 +221,5 @@ proc closeWait*(server: RpcWebSocketServer) {.async.} =
|
|||||||
## Cleanup resources of RPC server.
|
## Cleanup resources of RPC server.
|
||||||
await server.server.closeWait()
|
await server.server.closeWait()
|
||||||
|
|
||||||
proc localAddress*(server: RpcWebSocketServer): TransportAddress =
|
proc localAddress*(server: RpcWebSocketServer): TransportAddress =
|
||||||
server.server.localAddress()
|
server.server.localAddress()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user