|
|
|
@ -71,15 +71,24 @@ static bool RESTERR(HTTPRequest* req, enum HTTPStatusCode status, string message
@@ -71,15 +71,24 @@ static bool RESTERR(HTTPRequest* req, enum HTTPStatusCode status, string message
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static enum RetFormat ParseDataFormat(vector<string>& params, const string& strReq) |
|
|
|
|
static enum RetFormat ParseDataFormat(std::string& param, const std::string& strReq) |
|
|
|
|
{ |
|
|
|
|
boost::split(params, strReq, boost::is_any_of(".")); |
|
|
|
|
if (params.size() > 1) { |
|
|
|
|
for (unsigned int i = 0; i < ARRAYLEN(rf_names); i++) |
|
|
|
|
if (params[1] == rf_names[i].name) |
|
|
|
|
return rf_names[i].rf; |
|
|
|
|
const std::string::size_type pos = strReq.rfind('.'); |
|
|
|
|
if (pos == std::string::npos) |
|
|
|
|
{ |
|
|
|
|
param = strReq; |
|
|
|
|
return rf_names[0].rf; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
param = strReq.substr(0, pos); |
|
|
|
|
const std::string suff(strReq, pos + 1); |
|
|
|
|
|
|
|
|
|
for (unsigned int i = 0; i < ARRAYLEN(rf_names); i++) |
|
|
|
|
if (suff == rf_names[i].name) |
|
|
|
|
return rf_names[i].rf; |
|
|
|
|
|
|
|
|
|
/* If no suffix is found, return original string. */ |
|
|
|
|
param = strReq; |
|
|
|
|
return rf_names[0].rf; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -121,10 +130,10 @@ static bool rest_headers(HTTPRequest* req,
@@ -121,10 +130,10 @@ static bool rest_headers(HTTPRequest* req,
|
|
|
|
|
{ |
|
|
|
|
if (!CheckWarmup(req)) |
|
|
|
|
return false; |
|
|
|
|
vector<string> params; |
|
|
|
|
const RetFormat rf = ParseDataFormat(params, strURIPart); |
|
|
|
|
std::string param; |
|
|
|
|
const RetFormat rf = ParseDataFormat(param, strURIPart); |
|
|
|
|
vector<string> path; |
|
|
|
|
boost::split(path, params[0], boost::is_any_of("/")); |
|
|
|
|
boost::split(path, param, boost::is_any_of("/")); |
|
|
|
|
|
|
|
|
|
if (path.size() != 2) |
|
|
|
|
return RESTERR(req, HTTP_BAD_REQUEST, "No header count specified. Use /rest/headers/<count>/<hash>.<ext>."); |
|
|
|
@ -196,10 +205,9 @@ static bool rest_block(HTTPRequest* req,
@@ -196,10 +205,9 @@ static bool rest_block(HTTPRequest* req,
|
|
|
|
|
{ |
|
|
|
|
if (!CheckWarmup(req)) |
|
|
|
|
return false; |
|
|
|
|
vector<string> params; |
|
|
|
|
const RetFormat rf = ParseDataFormat(params, strURIPart); |
|
|
|
|
std::string hashStr; |
|
|
|
|
const RetFormat rf = ParseDataFormat(hashStr, strURIPart); |
|
|
|
|
|
|
|
|
|
string hashStr = params[0]; |
|
|
|
|
uint256 hash; |
|
|
|
|
if (!ParseHashStr(hashStr, hash)) |
|
|
|
|
return RESTERR(req, HTTP_BAD_REQUEST, "Invalid hash: " + hashStr); |
|
|
|
@ -268,8 +276,8 @@ static bool rest_chaininfo(HTTPRequest* req, const std::string& strURIPart)
@@ -268,8 +276,8 @@ static bool rest_chaininfo(HTTPRequest* req, const std::string& strURIPart)
|
|
|
|
|
{ |
|
|
|
|
if (!CheckWarmup(req)) |
|
|
|
|
return false; |
|
|
|
|
vector<string> params; |
|
|
|
|
const RetFormat rf = ParseDataFormat(params, strURIPart); |
|
|
|
|
std::string param; |
|
|
|
|
const RetFormat rf = ParseDataFormat(param, strURIPart); |
|
|
|
|
|
|
|
|
|
switch (rf) { |
|
|
|
|
case RF_JSON: { |
|
|
|
@ -293,8 +301,8 @@ static bool rest_mempool_info(HTTPRequest* req, const std::string& strURIPart)
@@ -293,8 +301,8 @@ static bool rest_mempool_info(HTTPRequest* req, const std::string& strURIPart)
|
|
|
|
|
{ |
|
|
|
|
if (!CheckWarmup(req)) |
|
|
|
|
return false; |
|
|
|
|
vector<string> params; |
|
|
|
|
const RetFormat rf = ParseDataFormat(params, strURIPart); |
|
|
|
|
std::string param; |
|
|
|
|
const RetFormat rf = ParseDataFormat(param, strURIPart); |
|
|
|
|
|
|
|
|
|
switch (rf) { |
|
|
|
|
case RF_JSON: { |
|
|
|
@ -318,8 +326,8 @@ static bool rest_mempool_contents(HTTPRequest* req, const std::string& strURIPar
@@ -318,8 +326,8 @@ static bool rest_mempool_contents(HTTPRequest* req, const std::string& strURIPar
|
|
|
|
|
{ |
|
|
|
|
if (!CheckWarmup(req)) |
|
|
|
|
return false; |
|
|
|
|
vector<string> params; |
|
|
|
|
const RetFormat rf = ParseDataFormat(params, strURIPart); |
|
|
|
|
std::string param; |
|
|
|
|
const RetFormat rf = ParseDataFormat(param, strURIPart); |
|
|
|
|
|
|
|
|
|
switch (rf) { |
|
|
|
|
case RF_JSON: { |
|
|
|
@ -343,10 +351,9 @@ static bool rest_tx(HTTPRequest* req, const std::string& strURIPart)
@@ -343,10 +351,9 @@ static bool rest_tx(HTTPRequest* req, const std::string& strURIPart)
|
|
|
|
|
{ |
|
|
|
|
if (!CheckWarmup(req)) |
|
|
|
|
return false; |
|
|
|
|
vector<string> params; |
|
|
|
|
const RetFormat rf = ParseDataFormat(params, strURIPart); |
|
|
|
|
std::string hashStr; |
|
|
|
|
const RetFormat rf = ParseDataFormat(hashStr, strURIPart); |
|
|
|
|
|
|
|
|
|
string hashStr = params[0]; |
|
|
|
|
uint256 hash; |
|
|
|
|
if (!ParseHashStr(hashStr, hash)) |
|
|
|
|
return RESTERR(req, HTTP_BAD_REQUEST, "Invalid hash: " + hashStr); |
|
|
|
@ -396,13 +403,13 @@ static bool rest_getutxos(HTTPRequest* req, const std::string& strURIPart)
@@ -396,13 +403,13 @@ static bool rest_getutxos(HTTPRequest* req, const std::string& strURIPart)
|
|
|
|
|
{ |
|
|
|
|
if (!CheckWarmup(req)) |
|
|
|
|
return false; |
|
|
|
|
vector<string> params; |
|
|
|
|
enum RetFormat rf = ParseDataFormat(params, strURIPart); |
|
|
|
|
std::string param; |
|
|
|
|
const RetFormat rf = ParseDataFormat(param, strURIPart); |
|
|
|
|
|
|
|
|
|
vector<string> uriParts; |
|
|
|
|
if (params.size() > 0 && params[0].length() > 1) |
|
|
|
|
if (param.length() > 1) |
|
|
|
|
{ |
|
|
|
|
std::string strUriParams = params[0].substr(1); |
|
|
|
|
std::string strUriParams = param.substr(1); |
|
|
|
|
boost::split(uriParts, strUriParams, boost::is_any_of("/")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|