diff --git a/json_rpc/clients/httpclient.nim b/json_rpc/clients/httpclient.nim index 52b5300..ac9bb73 100644 --- a/json_rpc/clients/httpclient.nim +++ b/json_rpc/clients/httpclient.nim @@ -13,14 +13,15 @@ import std/[tables, uri], stew/byteutils, results, - chronos/apps/http/httpclient as chronosHttpClient, - chronicles, httputils, json_serialization/std/net, + chronos/apps/http/httpclient, + chronicles, httputils, + json_serialization/std/net as jsnet, ../client, ../errors, ../private/jrpc_sys export - client, errors, HttpClientFlag, HttpClientFlags + client, errors, jsnet, HttpClientFlag, HttpClientFlags logScope: topics = "JSONRPC-HTTP-CLIENT" @@ -31,7 +32,7 @@ type RpcHttpClient* = ref object of RpcClient httpSession: HttpSessionRef - httpAddress: HttpResult[HttpAddress] + httpAddress: HttpAddress maxBodySize: int getHeaders: GetJsonRpcRequestHeaders @@ -76,8 +77,9 @@ template closeRefs(req, res: untyped) = proc callImpl(client: RpcHttpClient, reqBody: string): Future[string] {.async.} = doAssert client.httpSession != nil - if client.httpAddress.isErr: - raise newException(RpcAddressUnresolvableError, client.httpAddress.error) + if client.httpAddress.addresses.len == 0: + raise newException(RpcPostError, "Not connected") + var headers = if not isNil(client.getHeaders): @@ -90,7 +92,7 @@ proc callImpl(client: RpcHttpClient, reqBody: string): Future[string] {.async.} var res: HttpClientResponseRef req = HttpClientRequestRef.post(client.httpSession, - client.httpAddress.get, + client.httpAddress, body = reqBody.toOpenArrayByte(0, reqBody.len - 1), headers = headers) res = @@ -140,13 +142,12 @@ proc newRpcHttpClient*( method call*(client: RpcHttpClient, name: string, params: RequestParamsTx): Future[JsonString] {.async.} = - let id = client.getNextId() reqBody = requestTxEncode(name, params, id) debug "Sending JSON-RPC request", - address = client.httpAddress, len = len(reqBody), name, id + address = $client.httpAddress, len = len(reqBody), name, id trace "Message", msg = reqBody let resText = await client.callImpl(reqBody) @@ -207,21 +208,17 @@ method callBatch*(client: RpcHttpClient, raise newException(InvalidResponse, "Invalid response") proc connect*(client: RpcHttpClient, url: string) {.async.} = - client.httpAddress = client.httpSession.getAddress(url) - if client.httpAddress.isErr: - raise newException(RpcAddressUnresolvableError, client.httpAddress.error) + client.httpAddress = client.httpSession.getAddress(url).valueOr: + raise newException(RpcAddressUnresolvableError, error) proc connect*(client: RpcHttpClient, address: string, port: Port, secure: bool) {.async.} = - var uri = Uri( + let uri = Uri( scheme: if secure: "https" else: "http", hostname: address, port: $port) - let res = getAddress(client.httpSession, uri) - if res.isOk: - client.httpAddress = res - else: - raise newException(RpcAddressUnresolvableError, res.error) + client.httpAddress = getAddress(client.httpSession, uri).valueOr: + raise newException(RpcAddressUnresolvableError, error) method close*(client: RpcHttpClient) {.async.} = if not client.httpSession.isNil: diff --git a/json_rpc/clients/socketclient.nim b/json_rpc/clients/socketclient.nim index 1f83c31..292ea86 100644 --- a/json_rpc/clients/socketclient.nim +++ b/json_rpc/clients/socketclient.nim @@ -14,11 +14,12 @@ import chronicles, results, chronos, + json_serialization/std/net as jsnet, ../client, ../errors, ../private/jrpc_sys -export client, errors +export client, errors, jsnet logScope: topics = "JSONRPC-SOCKET-CLIENT" diff --git a/json_rpc/private/jrpc_sys.nim b/json_rpc/private/jrpc_sys.nim index cc76dd3..1bd4d42 100644 --- a/json_rpc/private/jrpc_sys.nim +++ b/json_rpc/private/jrpc_sys.nim @@ -13,11 +13,9 @@ import std/hashes, results, json_serialization, - json_serialization/pkg/results as jser_results + json_serialization/pkg/results as jsresults -export - results, - json_serialization +export results, json_serialization, jsresults # This module implements JSON-RPC 2.0 Specification # https://www.jsonrpc.org/specification diff --git a/json_rpc/servers/httpserver.nim b/json_rpc/servers/httpserver.nim index 68acc90..94bb106 100644 --- a/json_rpc/servers/httpserver.nim +++ b/json_rpc/servers/httpserver.nim @@ -13,12 +13,13 @@ import std/sequtils, chronicles, httputils, chronos, chronos/apps/http/[httpserver, shttpserver], + json_serialization/std/net as jsnet, ../private/utils, ../errors, ../server export - server, shttpserver + server, shttpserver, jsnet logScope: topics = "JSONRPC-HTTP-SERVER" diff --git a/json_rpc/servers/socketserver.nim b/json_rpc/servers/socketserver.nim index b218fee..2bac2b8 100644 --- a/json_rpc/servers/socketserver.nim +++ b/json_rpc/servers/socketserver.nim @@ -12,12 +12,12 @@ import std/sequtils, chronicles, - json_serialization/std/net, + json_serialization/std/net as jsnet, ../private/utils, ../errors, ../server -export errors, server +export errors, server, jsnet type RpcSocketServer* = ref object of RpcServer diff --git a/json_rpc/servers/websocketserver.nim b/json_rpc/servers/websocketserver.nim index 2530283..84fcd85 100644 --- a/json_rpc/servers/websocketserver.nim +++ b/json_rpc/servers/websocketserver.nim @@ -12,10 +12,12 @@ import chronicles, chronos, websock/[websock, types], websock/extensions/compression/deflate, - stew/byteutils, json_serialization/std/net, - ".."/[errors, server] + stew/byteutils, + json_serialization/std/net as jsnet, -export errors, server, net + ../[errors, server] + +export errors, server, jsnet logScope: topics = "JSONRPC-WS-SERVER" @@ -84,8 +86,7 @@ proc serveHTTP*(rpc: RpcWebSocketHandler, request: HttpRequest) proc handleRequest(rpc: RpcWebSocketServer, request: HttpRequest) {.async: (raises: [CancelledError]).} = - trace "Handling request:", uri = request.uri.path - trace "Initiating web socket connection." + trace "Handling request:", uri = $request.uri # if hook result is false, # it means we should return immediately