Browse Source

Merge pull request #6648

9cdc335 Simplify logic of REST request suffix parsing. (Daniel Kraft)
0.13
Wladimir J. van der Laan 9 years ago
parent
commit
cd381d7719
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
  1. 57
      src/rest.cpp

57
src/rest.cpp

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

Loading…
Cancel
Save