@ -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 )
{
{
boo st: : 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 ( " / " ) ) ;
}
}