From 59582c8b8d126a82a60529663c2f122df8ad7c2a Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Sat, 27 Dec 2014 13:18:36 +0100 Subject: [PATCH] [REST] add /rest/chaininfos --- qa/rpc-tests/rest.py | 9 ++++++++- src/rest.cpp | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/qa/rpc-tests/rest.py b/qa/rpc-tests/rest.py index 704d88973..a9d41cf36 100755 --- a/qa/rpc-tests/rest.py +++ b/qa/rpc-tests/rest.py @@ -78,7 +78,7 @@ class RESTTest (BitcoinTestFramework): # check hex format response hex_string = http_get_call(url.hostname, url.port, '/rest/tx/'+tx_hash+self.FORMAT_SEPARATOR+"hex", True) - assert_equal(response.status, 200) + assert_equal(hex_string.status, 200) assert_greater_than(int(response.getheader('content-length')), 10) # check block tx details @@ -106,5 +106,12 @@ class RESTTest (BitcoinTestFramework): for tx in txs: assert_equal(tx in json_obj['tx'], True) + #test rest bestblock + bb_hash = self.nodes[0].getbestblockhash() + + json_string = http_get_call(url.hostname, url.port, '/rest/chaininfo.json') + json_obj = json.loads(json_string) + assert_equal(json_obj['bestblockhash'], bb_hash) + if __name__ == '__main__': RESTTest ().main () diff --git a/src/rest.cpp b/src/rest.cpp index 4702f0d70..c9535c3b4 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -95,7 +95,7 @@ static bool rest_headers(AcceptedConnection* conn, bool fRun) { vector params; - enum RetFormat rf = ParseDataFormat(params, strReq); + const RetFormat rf = ParseDataFormat(params, strReq); vector path; boost::split(path, params[0], boost::is_any_of("/")); @@ -159,7 +159,7 @@ static bool rest_block(AcceptedConnection* conn, bool showTxDetails) { vector params; - enum RetFormat rf = ParseDataFormat(params, strReq); + const RetFormat rf = ParseDataFormat(params, strReq); string hashStr = params[0]; uint256 hash; @@ -226,13 +226,39 @@ static bool rest_block_notxdetails(AcceptedConnection* conn, return rest_block(conn, strReq, mapHeaders, fRun, false); } +static bool rest_chaininfo(AcceptedConnection* conn, + const std::string& strReq, + const std::map& mapHeaders, + bool fRun) +{ + vector params; + const RetFormat rf = ParseDataFormat(params, strReq); + + switch (rf) { + case RF_JSON: { + Array rpcParams; + Value chainInfoObject = getblockchaininfo(rpcParams, false); + + string strJSON = write_string(chainInfoObject, false) + "\n"; + conn->stream() << HTTPReply(HTTP_OK, strJSON, fRun) << std::flush; + return true; + } + default: { + throw RESTERR(HTTP_NOT_FOUND, "output format not found (available: json)"); + } + } + + // not reached + return true; // continue to process further HTTP reqs on this cxn +} + static bool rest_tx(AcceptedConnection* conn, const std::string& strReq, const std::map& mapHeaders, bool fRun) { vector params; - enum RetFormat rf = ParseDataFormat(params, strReq); + const RetFormat rf = ParseDataFormat(params, strReq); string hashStr = params[0]; uint256 hash; @@ -287,6 +313,7 @@ static const struct { {"/rest/tx/", rest_tx}, {"/rest/block/notxdetails/", rest_block_notxdetails}, {"/rest/block/", rest_block_extended}, + {"/rest/chaininfo", rest_chaininfo}, {"/rest/headers/", rest_headers}, };