mirror of
https://github.com/codex-storage/nim-json-rpc.git
synced 2025-02-23 16:38:22 +00:00
Fix missing id in sendError, report error on wrong json version
This commit is contained in:
parent
8781bbbf4e
commit
4a164c026e
@ -70,7 +70,7 @@ proc checkJsonErrors*(line: string,
|
|||||||
return some((rjeInvalidJson, res[1]))
|
return some((rjeInvalidJson, res[1]))
|
||||||
if not node.hasKey("id"):
|
if not node.hasKey("id"):
|
||||||
return some((rjeNoId, ""))
|
return some((rjeNoId, ""))
|
||||||
if not node.hasKey("jsonrpc"):
|
if node{"jsonrpc"} != %"2.0":
|
||||||
return some((rjeVersionError, ""))
|
return some((rjeVersionError, ""))
|
||||||
if not node.hasKey("method"):
|
if not node.hasKey("method"):
|
||||||
return some((rjeNoMethod, ""))
|
return some((rjeNoMethod, ""))
|
||||||
@ -85,7 +85,7 @@ proc wrapReply*(id: JsonNode, value: JsonNode, error: JsonNode): string =
|
|||||||
proc sendError*(client: StreamTransport, code: int, msg: string, id: JsonNode,
|
proc sendError*(client: StreamTransport, code: int, msg: string, id: JsonNode,
|
||||||
data: JsonNode = newJNull()) {.async.} =
|
data: JsonNode = newJNull()) {.async.} =
|
||||||
## Send error message to client
|
## Send error message to client
|
||||||
let error = %{"code": %(code), "message": %msg, "data": data}
|
let error = %{"code": %(code), "id": id, "message": %msg, "data": data}
|
||||||
debug "Error generated", error = error, id = id
|
debug "Error generated", error = error, id = id
|
||||||
var res = wrapReply(id, newJNull(), error)
|
var res = wrapReply(id, newJNull(), error)
|
||||||
result = client.write(res)
|
result = client.write(res)
|
||||||
@ -108,7 +108,7 @@ proc processMessage(server: RpcServer, client: StreamTransport,
|
|||||||
let errState = jsonErrorState.get
|
let errState = jsonErrorState.get
|
||||||
var id =
|
var id =
|
||||||
if errState.err == rjeInvalidJson or errState.err == rjeNoId:
|
if errState.err == rjeInvalidJson or errState.err == rjeNoId:
|
||||||
newJNull() # TODO: On malformed json, id is lost and messes up server responses
|
newJNull()
|
||||||
else:
|
else:
|
||||||
node["id"]
|
node["id"]
|
||||||
await errState.err.sendJsonError(client, id, %errState.msg)
|
await errState.err.sendJsonError(client, id, %errState.msg)
|
||||||
@ -118,7 +118,7 @@ proc processMessage(server: RpcServer, client: StreamTransport,
|
|||||||
id = node["id"]
|
id = node["id"]
|
||||||
|
|
||||||
if not server.procs.hasKey(methodName):
|
if not server.procs.hasKey(methodName):
|
||||||
await client.sendError(METHOD_NOT_FOUND, "Method not found", id,
|
await client.sendError(METHOD_NOT_FOUND, "Method not found", %id,
|
||||||
%(methodName & " is not a registered method."))
|
%(methodName & " is not a registered method."))
|
||||||
else:
|
else:
|
||||||
let callRes = await server.procs[methodName](node["params"])
|
let callRes = await server.procs[methodName](node["params"])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user