@ -28,6 +28,7 @@ using namespace std;
static const char DEFAULT_RPCCONNECT [ ] = " 127.0.0.1 " ;
static const char DEFAULT_RPCCONNECT [ ] = " 127.0.0.1 " ;
static const int DEFAULT_HTTP_CLIENT_TIMEOUT = 900 ;
static const int DEFAULT_HTTP_CLIENT_TIMEOUT = 900 ;
static const int CONTINUE_EXECUTION = - 1 ;
std : : string HelpMessageCli ( )
std : : string HelpMessageCli ( )
{
{
@ -67,7 +68,11 @@ public:
} ;
} ;
static bool AppInitRPC ( int argc , char * argv [ ] )
//
// This function returns either one of EXIT_ codes when it's expected to stop the process or
// CONTINUE_EXECUTION when it's expected to continue further.
//
static int AppInitRPC ( int argc , char * argv [ ] )
{
{
//
//
// Parameters
// Parameters
@ -85,31 +90,35 @@ static bool AppInitRPC(int argc, char* argv[])
}
}
fprintf ( stdout , " %s " , strUsage . c_str ( ) ) ;
fprintf ( stdout , " %s " , strUsage . c_str ( ) ) ;
return false ;
if ( argc < 2 ) {
fprintf ( stderr , " Error: too few parameters \n " ) ;
return EXIT_FAILURE ;
}
return EXIT_SUCCESS ;
}
}
if ( ! boost : : filesystem : : is_directory ( GetDataDir ( false ) ) ) {
if ( ! boost : : filesystem : : is_directory ( GetDataDir ( false ) ) ) {
fprintf ( stderr , " Error: Specified data directory \" %s \" does not exist. \n " , mapArgs [ " -datadir " ] . c_str ( ) ) ;
fprintf ( stderr , " Error: Specified data directory \" %s \" does not exist. \n " , mapArgs [ " -datadir " ] . c_str ( ) ) ;
return false ;
return EXIT_FAILURE ;
}
}
try {
try {
ReadConfigFile ( GetArg ( " -conf " , BITCOIN_CONF_FILENAME ) , mapArgs , mapMultiArgs ) ;
ReadConfigFile ( GetArg ( " -conf " , BITCOIN_CONF_FILENAME ) , mapArgs , mapMultiArgs ) ;
} catch ( const std : : exception & e ) {
} catch ( const std : : exception & e ) {
fprintf ( stderr , " Error reading configuration file: %s \n " , e . what ( ) ) ;
fprintf ( stderr , " Error reading configuration file: %s \n " , e . what ( ) ) ;
return false ;
return EXIT_FAILURE ;
}
}
// Check for -testnet or -regtest parameter (BaseParams() calls are only valid after this clause)
// Check for -testnet or -regtest parameter (BaseParams() calls are only valid after this clause)
try {
try {
SelectBaseParams ( ChainNameFromCommandLine ( ) ) ;
SelectBaseParams ( ChainNameFromCommandLine ( ) ) ;
} catch ( const std : : exception & e ) {
} catch ( const std : : exception & e ) {
fprintf ( stderr , " Error: %s \n " , e . what ( ) ) ;
fprintf ( stderr , " Error: %s \n " , e . what ( ) ) ;
return false ;
return EXIT_FAILURE ;
}
}
if ( GetBoolArg ( " -rpcssl " , false ) )
if ( GetBoolArg ( " -rpcssl " , false ) )
{
{
fprintf ( stderr , " Error: SSL mode for RPC (-rpcssl) is no longer supported. \n " ) ;
fprintf ( stderr , " Error: SSL mode for RPC (-rpcssl) is no longer supported. \n " ) ;
return false ;
return EXIT_FAILURE ;
}
}
return true ;
return CONTINUE_EXECUTION ;
}
}
@ -354,8 +363,9 @@ int main(int argc, char* argv[])
}
}
try {
try {
if ( ! AppInitRPC ( argc , argv ) )
int ret = AppInitRPC ( argc , argv ) ;
return EXIT_FAILURE ;
if ( ret ! = CONTINUE_EXECUTION )
return ret ;
}
}
catch ( const std : : exception & e ) {
catch ( const std : : exception & e ) {
PrintExceptionContinue ( & e , " AppInitRPC() " ) ;
PrintExceptionContinue ( & e , " AppInitRPC() " ) ;