Update error messages in daemon

When given a wrong argument, some daemon commands failed with "unknown
command" error, instead of a meaningful error message. This patch
brings consistency into the error messages.

In several places, this patch removes relatively useful messages,
and replaces them with more generic ones. E.g.,

-    std::cout << "use: print_pl [white] [gray] [<limit>] [pruned]
[publicrpc]" << std::endl;
+    std::cout << "Invalid syntax: Too many parameters. For more
details, use the help command." << std::endl;

There are two reasons for this:

1. Consistency.
2. Removing duplicates.

The detailed information about the parameters is present in
the help messages already. Having it in two places increases
the risk that the messages would get out of date.
This commit is contained in:
Tadeas Moravec 2020-09-18 14:04:19 +02:00
parent 7e78da7772
commit 83da867474
No known key found for this signature in database
GPG Key ID: AE1066CC94FA7B49
2 changed files with 203 additions and 101 deletions

View File

@ -50,7 +50,7 @@ bool t_command_parser_executor::print_peer_list(const std::vector<std::string>&
{ {
if (args.size() > 3) if (args.size() > 3)
{ {
std::cout << "use: print_pl [white] [gray] [<limit>] [pruned] [publicrpc]" << std::endl; std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true; return true;
} }
@ -79,7 +79,7 @@ bool t_command_parser_executor::print_peer_list(const std::vector<std::string>&
} }
else if (!epee::string_tools::get_xtype_from_string(limit, args[i])) else if (!epee::string_tools::get_xtype_from_string(limit, args[i]))
{ {
std::cout << "unexpected argument: " << args[i] << std::endl; std::cout << "Invalid syntax: Unexpected parameter: " << args[i] << ". For more details, use the help command." << std::endl;
return true; return true;
} }
} }
@ -90,56 +90,79 @@ bool t_command_parser_executor::print_peer_list(const std::vector<std::string>&
bool t_command_parser_executor::print_peer_list_stats(const std::vector<std::string>& args) bool t_command_parser_executor::print_peer_list_stats(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_peer_list_stats(); return m_executor.print_peer_list_stats();
} }
bool t_command_parser_executor::save_blockchain(const std::vector<std::string>& args) bool t_command_parser_executor::save_blockchain(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.save_blockchain(); return m_executor.save_blockchain();
} }
bool t_command_parser_executor::show_hash_rate(const std::vector<std::string>& args) bool t_command_parser_executor::show_hash_rate(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.show_hash_rate(); return m_executor.show_hash_rate();
} }
bool t_command_parser_executor::hide_hash_rate(const std::vector<std::string>& args) bool t_command_parser_executor::hide_hash_rate(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.hide_hash_rate(); return m_executor.hide_hash_rate();
} }
bool t_command_parser_executor::show_difficulty(const std::vector<std::string>& args) bool t_command_parser_executor::show_difficulty(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.show_difficulty(); return m_executor.show_difficulty();
} }
bool t_command_parser_executor::show_status(const std::vector<std::string>& args) bool t_command_parser_executor::show_status(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.show_status(); return m_executor.show_status();
} }
bool t_command_parser_executor::print_connections(const std::vector<std::string>& args) bool t_command_parser_executor::print_connections(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_connections(); return m_executor.print_connections();
} }
bool t_command_parser_executor::print_net_stats(const std::vector<std::string>& args) bool t_command_parser_executor::print_net_stats(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_net_stats(); return m_executor.print_net_stats();
} }
@ -148,8 +171,8 @@ bool t_command_parser_executor::print_blockchain_info(const std::vector<std::str
{ {
if(!args.size()) if(!args.size())
{ {
std::cout << "need block index parameter" << std::endl; std::cout << "Invalid syntax: At least one parameter expected. For more details, use the help command." << std::endl;
return false; return true;
} }
uint64_t start_index = 0; uint64_t start_index = 0;
uint64_t end_index = 0; uint64_t end_index = 0;
@ -158,20 +181,20 @@ bool t_command_parser_executor::print_blockchain_info(const std::vector<std::str
int64_t nblocks; int64_t nblocks;
if(!epee::string_tools::get_xtype_from_string(nblocks, args[0])) if(!epee::string_tools::get_xtype_from_string(nblocks, args[0]))
{ {
std::cout << "wrong number of blocks" << std::endl; std::cout << "Invalid syntax: Wrong number of blocks. For more details, use the help command." << std::endl;
return false; return true;
} }
return m_executor.print_blockchain_info(nblocks, (uint64_t)-nblocks); return m_executor.print_blockchain_info(nblocks, (uint64_t)-nblocks);
} }
if(!epee::string_tools::get_xtype_from_string(start_index, args[0])) if(!epee::string_tools::get_xtype_from_string(start_index, args[0]))
{ {
std::cout << "wrong starter block index parameter" << std::endl; std::cout << "Invalid syntax: Wrong starter block index parameter. For more details, use the help command." << std::endl;
return false; return true;
} }
if(args.size() >1 && !epee::string_tools::get_xtype_from_string(end_index, args[1])) if(args.size() >1 && !epee::string_tools::get_xtype_from_string(end_index, args[1]))
{ {
std::cout << "wrong end block index parameter" << std::endl; std::cout << "Invalid syntax: Wrong end block index parameter. For more details, use the help command." << std::endl;
return false; return true;
} }
return m_executor.print_blockchain_info(start_index, end_index); return m_executor.print_blockchain_info(start_index, end_index);
@ -181,7 +204,7 @@ bool t_command_parser_executor::set_log_level(const std::vector<std::string>& ar
{ {
if(args.size() > 1) if(args.size() > 1)
{ {
std::cout << "use: set_log [<log_level_number_0-4> | <categories>]" << std::endl; std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true; return true;
} }
@ -195,7 +218,7 @@ bool t_command_parser_executor::set_log_level(const std::vector<std::string>& ar
{ {
if(4 < l) if(4 < l)
{ {
std::cout << "wrong number range, use: set_log <log_level_number_0-4>" << std::endl; std::cout << "Invalid syntax: Wrong number range, use: set_log <log_level_number_0-4>. For more details, use the help command." << std::endl;
return true; return true;
} }
return m_executor.set_log_level(l); return m_executor.set_log_level(l);
@ -208,7 +231,10 @@ bool t_command_parser_executor::set_log_level(const std::vector<std::string>& ar
bool t_command_parser_executor::print_height(const std::vector<std::string>& args) bool t_command_parser_executor::print_height(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_height(); return m_executor.print_height();
} }
@ -223,14 +249,14 @@ bool t_command_parser_executor::print_block(const std::vector<std::string>& args
include_hex = true; include_hex = true;
else else
{ {
std::cout << "unexpected argument: " << args[i] << std::endl; std::cout << "Invalid syntax: Unexpected parameter: " << args[i] << ". For more details, use the help command." << std::endl;
return true; return true;
} }
} }
if (args.empty()) if (args.empty())
{ {
std::cout << "expected: print_block (<block_hash> | <block_height>) [+hex]" << std::endl; std::cout << "Invalid syntax: At least one parameter expected. For more details, use the help command." << std::endl;
return false; return true;
} }
const std::string& arg = args.front(); const std::string& arg = args.front();
@ -248,7 +274,7 @@ bool t_command_parser_executor::print_block(const std::vector<std::string>& args
} }
} }
return false; return true;
} }
bool t_command_parser_executor::print_transaction(const std::vector<std::string>& args) bool t_command_parser_executor::print_transaction(const std::vector<std::string>& args)
@ -267,13 +293,13 @@ bool t_command_parser_executor::print_transaction(const std::vector<std::string>
include_json = true; include_json = true;
else else
{ {
std::cout << "unexpected argument: " << args[i] << std::endl; std::cout << "Invalid syntax: Unexpected parameter: " << args[i] << ". For more details, use the help command." << std::endl;
return true; return true;
} }
} }
if (args.empty()) if (args.empty())
{ {
std::cout << "expected: print_tx <transaction_hash> [+meta] [+hex] [+json]" << std::endl; std::cout << "Invalid syntax: At least one parameter expected. For more details, use the help command." << std::endl;
return true; return true;
} }
@ -291,7 +317,7 @@ bool t_command_parser_executor::is_key_image_spent(const std::vector<std::string
{ {
if (args.empty()) if (args.empty())
{ {
std::cout << "expected: is_key_image_spent <key_image>" << std::endl; std::cout << "Invalid syntax: At least one parameter expected. For more details, use the help command." << std::endl;
return true; return true;
} }
@ -309,21 +335,30 @@ bool t_command_parser_executor::is_key_image_spent(const std::vector<std::string
bool t_command_parser_executor::print_transaction_pool_long(const std::vector<std::string>& args) bool t_command_parser_executor::print_transaction_pool_long(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_transaction_pool_long(); return m_executor.print_transaction_pool_long();
} }
bool t_command_parser_executor::print_transaction_pool_short(const std::vector<std::string>& args) bool t_command_parser_executor::print_transaction_pool_short(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_transaction_pool_short(); return m_executor.print_transaction_pool_short();
} }
bool t_command_parser_executor::print_transaction_pool_stats(const std::vector<std::string>& args) bool t_command_parser_executor::print_transaction_pool_stats(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_transaction_pool_stats(); return m_executor.print_transaction_pool_stats();
} }
@ -332,7 +367,7 @@ bool t_command_parser_executor::start_mining(const std::vector<std::string>& arg
{ {
if(!args.size()) if(!args.size())
{ {
std::cout << "Please specify a wallet address to mine for: start_mining <addr> [<threads>|auto]" << std::endl; std::cout << "Invalid syntax: At least one parameter expected. For more details, use the help command." << std::endl;
return true; return true;
} }
@ -353,7 +388,7 @@ bool t_command_parser_executor::start_mining(const std::vector<std::string>& arg
{ {
if(!cryptonote::get_account_address_from_str(info, cryptonote::STAGENET, address_str)) if(!cryptonote::get_account_address_from_str(info, cryptonote::STAGENET, address_str))
{ {
std::cout << "target account address has wrong format" << std::endl; std::cout << "Invalid syntax: Target account address has wrong format. For more details, use the help command." << std::endl;
return true; return true;
} }
else else
@ -389,7 +424,8 @@ bool t_command_parser_executor::start_mining(const std::vector<std::string>& arg
bool ignore_battery = false; bool ignore_battery = false;
if(args.size() > 4) if(args.size() > 4)
{ {
return false; std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true;
} }
if(args.size() == 4) if(args.size() == 4)
@ -400,7 +436,8 @@ bool t_command_parser_executor::start_mining(const std::vector<std::string>& arg
} }
else if(args[3] != "false" && !command_line::is_no(args[3]) && args[3] != "0") else if(args[3] != "false" && !command_line::is_no(args[3]) && args[3] != "0")
{ {
return false; std::cout << "Invalid syntax: Invalid combination of parameters. For more details, use the help command." << std::endl;
return true;
} }
} }
@ -412,7 +449,8 @@ bool t_command_parser_executor::start_mining(const std::vector<std::string>& arg
} }
else if(args[2] != "false" && !command_line::is_no(args[2]) && args[2] != "0") else if(args[2] != "false" && !command_line::is_no(args[2]) && args[2] != "0")
{ {
return false; std::cout << "Invalid syntax: Invalid combination of parameters. For more details, use the help command." << std::endl;
return true;
} }
} }
@ -436,7 +474,10 @@ bool t_command_parser_executor::start_mining(const std::vector<std::string>& arg
bool t_command_parser_executor::stop_mining(const std::vector<std::string>& args) bool t_command_parser_executor::stop_mining(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.stop_mining(); return m_executor.stop_mining();
} }
@ -448,21 +489,31 @@ bool t_command_parser_executor::mining_status(const std::vector<std::string>& ar
bool t_command_parser_executor::stop_daemon(const std::vector<std::string>& args) bool t_command_parser_executor::stop_daemon(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.stop_daemon(); return m_executor.stop_daemon();
} }
bool t_command_parser_executor::print_status(const std::vector<std::string>& args) bool t_command_parser_executor::print_status(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_status(); return m_executor.print_status();
} }
bool t_command_parser_executor::set_limit(const std::vector<std::string>& args) bool t_command_parser_executor::set_limit(const std::vector<std::string>& args)
{ {
if(args.size()>1) return false; if(args.size()>1) {
std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true;
}
if(args.size()==0) { if(args.size()==0) {
return m_executor.get_limit(); return m_executor.get_limit();
} }
@ -471,8 +522,8 @@ bool t_command_parser_executor::set_limit(const std::vector<std::string>& args)
limit = std::stoll(args[0]); limit = std::stoll(args[0]);
} }
catch(const std::exception& ex) { catch(const std::exception& ex) {
std::cout << "failed to parse argument" << std::endl; std::cout << "Invalid syntax: Failed to parse limit. For more details, use the help command." << std::endl;
return false; return true;
} }
return m_executor.set_limit(limit, limit); return m_executor.set_limit(limit, limit);
@ -480,7 +531,11 @@ bool t_command_parser_executor::set_limit(const std::vector<std::string>& args)
bool t_command_parser_executor::set_limit_up(const std::vector<std::string>& args) bool t_command_parser_executor::set_limit_up(const std::vector<std::string>& args)
{ {
if(args.size()>1) return false; if(args.size()>1) {
std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true;
}
if(args.size()==0) { if(args.size()==0) {
return m_executor.get_limit_up(); return m_executor.get_limit_up();
} }
@ -489,8 +544,8 @@ bool t_command_parser_executor::set_limit_up(const std::vector<std::string>& arg
limit = std::stoll(args[0]); limit = std::stoll(args[0]);
} }
catch(const std::exception& ex) { catch(const std::exception& ex) {
std::cout << "failed to parse argument" << std::endl; std::cout << "Invalid syntax: Failed to parse limit. For more details, use the help command." << std::endl;
return false; return true;
} }
return m_executor.set_limit(0, limit); return m_executor.set_limit(0, limit);
@ -498,7 +553,11 @@ bool t_command_parser_executor::set_limit_up(const std::vector<std::string>& arg
bool t_command_parser_executor::set_limit_down(const std::vector<std::string>& args) bool t_command_parser_executor::set_limit_down(const std::vector<std::string>& args)
{ {
if(args.size()>1) return false; if(args.size()>1) {
std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true;
}
if(args.size()==0) { if(args.size()==0) {
return m_executor.get_limit_down(); return m_executor.get_limit_down();
} }
@ -507,8 +566,8 @@ bool t_command_parser_executor::set_limit_down(const std::vector<std::string>& a
limit = std::stoll(args[0]); limit = std::stoll(args[0]);
} }
catch(const std::exception& ex) { catch(const std::exception& ex) {
std::cout << "failed to parse argument" << std::endl; std::cout << "Invalid syntax: Failed to parse limit. For more details, use the help command." << std::endl;
return false; return true;
} }
return m_executor.set_limit(limit, 0); return m_executor.set_limit(limit, 0);
@ -528,7 +587,8 @@ bool t_command_parser_executor::out_peers(const std::vector<std::string>& args)
catch(const std::exception& ex) { catch(const std::exception& ex) {
_erro("stoi exception"); _erro("stoi exception");
return false; std::cout << "Invalid syntax: Failed to parse number. For more details, use the help command." << std::endl;
return true;
} }
return m_executor.out_peers(set, limit); return m_executor.out_peers(set, limit);
@ -548,7 +608,8 @@ bool t_command_parser_executor::in_peers(const std::vector<std::string>& args)
catch(const std::exception& ex) { catch(const std::exception& ex) {
_erro("stoi exception"); _erro("stoi exception");
return false; std::cout << "Invalid syntax: Failed to parse number." << std::endl;
return true;
} }
return m_executor.in_peers(set, limit); return m_executor.in_peers(set, limit);
@ -565,26 +626,37 @@ bool t_command_parser_executor::hard_fork_info(const std::vector<std::string>& a
version = std::stoi(args[0]); version = std::stoi(args[0]);
} }
catch(const std::exception& ex) { catch(const std::exception& ex) {
return false; std::cout << "Invalid syntax: Failed to parse version number. For more details, use the help command." << std::endl;
return true;
}
if (version <= 0 || version > 255) {
std::cout << "Invalid syntax: Unknown version number. Must be between 0 and 255. For more details, use the help command." << std::endl;
return true;
} }
if (version <= 0 || version > 255)
return false;
} }
else { else {
return false; std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true;
} }
return m_executor.hard_fork_info(version); return m_executor.hard_fork_info(version);
} }
bool t_command_parser_executor::show_bans(const std::vector<std::string>& args) bool t_command_parser_executor::show_bans(const std::vector<std::string>& args)
{ {
if (!args.empty()) return false; if (!args.empty()) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.print_bans(); return m_executor.print_bans();
} }
bool t_command_parser_executor::ban(const std::vector<std::string>& args) bool t_command_parser_executor::ban(const std::vector<std::string>& args)
{ {
if (args.size() != 1 && args.size() != 2) return false; if (args.size() != 1 && args.size() != 2) {
std::cout << "Invalid syntax: Expects one or two parameters. For more details, use the help command." << std::endl;
return true;
}
std::string ip = args[0]; std::string ip = args[0];
time_t seconds = P2P_IP_BLOCKTIME; time_t seconds = P2P_IP_BLOCKTIME;
if (args.size() > 1) if (args.size() > 1)
@ -595,11 +667,13 @@ bool t_command_parser_executor::ban(const std::vector<std::string>& args)
} }
catch (const std::exception &e) catch (const std::exception &e)
{ {
return false; std::cout << "Invalid syntax: Failed to parse seconds. For more details, use the help command." << std::endl;
return true;
} }
if (seconds == 0) if (seconds == 0)
{ {
return false; std::cout << "Seconds must be greater than 0." << std::endl;
return true;
} }
} }
return m_executor.ban(ip, seconds); return m_executor.ban(ip, seconds);
@ -607,21 +681,31 @@ bool t_command_parser_executor::ban(const std::vector<std::string>& args)
bool t_command_parser_executor::unban(const std::vector<std::string>& args) bool t_command_parser_executor::unban(const std::vector<std::string>& args)
{ {
if (args.size() != 1) return false; if (args.size() != 1) {
std::cout << "Invalid syntax: One parameter expected. For more details, use the help command." << std::endl;
return true;
}
std::string ip = args[0]; std::string ip = args[0];
return m_executor.unban(ip); return m_executor.unban(ip);
} }
bool t_command_parser_executor::banned(const std::vector<std::string>& args) bool t_command_parser_executor::banned(const std::vector<std::string>& args)
{ {
if (args.size() != 1) return false; if (args.size() != 1) {
std::cout << "Invalid syntax: One parameter expected. For more details, use the help command." << std::endl;
return true;
}
std::string address = args[0]; std::string address = args[0];
return m_executor.banned(address); return m_executor.banned(address);
} }
bool t_command_parser_executor::flush_txpool(const std::vector<std::string>& args) bool t_command_parser_executor::flush_txpool(const std::vector<std::string>& args)
{ {
if (args.size() > 1) return false; if (args.size() > 1) {
std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true;
}
std::string txid; std::string txid;
if (args.size() == 1) if (args.size() == 1)
@ -629,7 +713,7 @@ bool t_command_parser_executor::flush_txpool(const std::vector<std::string>& arg
crypto::hash hash; crypto::hash hash;
if (!parse_hash256(args[0], hash)) if (!parse_hash256(args[0], hash))
{ {
std::cout << "failed to parse tx id" << std::endl; std::cout << "Invalid syntax: Failed to parse tx id. For more details, use the help command." << std::endl;
return true; return true;
} }
txid = args[0]; txid = args[0];
@ -662,7 +746,7 @@ bool t_command_parser_executor::output_histogram(const std::vector<std::string>&
} }
else else
{ {
std::cout << "Invalid syntax: more than two non-amount parameters" << std::endl; std::cout << "Invalid syntax: More than two non-amount parameters. For more details, use the help command." << std::endl;
return true; return true;
} }
} }
@ -673,20 +757,21 @@ bool t_command_parser_executor::print_coinbase_tx_sum(const std::vector<std::str
{ {
if(!args.size()) if(!args.size())
{ {
std::cout << "need block height parameter" << std::endl; std::cout << "Invalid syntax: At least one parameter expected. For more details, use the help command." << std::endl;
return false; return true;
} }
uint64_t height = 0; uint64_t height = 0;
uint64_t count = 0; uint64_t count = 0;
if(!epee::string_tools::get_xtype_from_string(height, args[0])) if(!epee::string_tools::get_xtype_from_string(height, args[0]))
{ {
std::cout << "wrong starter block height parameter" << std::endl; std::cout << "Invalid syntax: Wrong starter block height parameter. For more details, use the help command." << std::endl;
return false; return true;
} }
if(args.size() >1 && !epee::string_tools::get_xtype_from_string(count, args[1])) if(args.size() >1 && !epee::string_tools::get_xtype_from_string(count, args[1]))
{ {
std::cout << "wrong count parameter" << std::endl; std::cout << "wrong count parameter" << std::endl;
return false; return true;
} }
return m_executor.print_coinbase_tx_sum(height, count); return m_executor.print_coinbase_tx_sum(height, count);
@ -696,8 +781,8 @@ bool t_command_parser_executor::alt_chain_info(const std::vector<std::string>& a
{ {
if(args.size() > 1) if(args.size() > 1)
{ {
std::cout << "usage: alt_chain_info [block_hash|>N|-N]" << std::endl; std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return false; return true;
} }
std::string tip; std::string tip;
@ -709,16 +794,16 @@ bool t_command_parser_executor::alt_chain_info(const std::vector<std::string>& a
{ {
if (!epee::string_tools::get_xtype_from_string(above, args[0].c_str() + 1)) if (!epee::string_tools::get_xtype_from_string(above, args[0].c_str() + 1))
{ {
std::cout << "invalid above parameter" << std::endl; std::cout << "Invalid syntax: Invalid above parameter. For more details, use the help command." << std::endl;
return false; return true;
} }
} }
else if (args[0].size() > 0 && args[0][0] == '-') else if (args[0].size() > 0 && args[0][0] == '-')
{ {
if (!epee::string_tools::get_xtype_from_string(last_blocks, args[0].c_str() + 1)) if (!epee::string_tools::get_xtype_from_string(last_blocks, args[0].c_str() + 1))
{ {
std::cout << "invalid last_blocks parameter" << std::endl; std::cout << "Invalid syntax: Invalid last_blocks parameter. For more details, use the help command." << std::endl;
return false; return true;
} }
} }
else else
@ -734,15 +819,15 @@ bool t_command_parser_executor::print_blockchain_dynamic_stats(const std::vector
{ {
if(args.size() != 1) if(args.size() != 1)
{ {
std::cout << "Exactly one parameter is needed" << std::endl; std::cout << "Invalid syntax: One parameter expected. For more details, use the help command." << std::endl;
return false; return true;
} }
uint64_t nblocks = 0; uint64_t nblocks = 0;
if(!epee::string_tools::get_xtype_from_string(nblocks, args[0]) || nblocks == 0) if(!epee::string_tools::get_xtype_from_string(nblocks, args[0]) || nblocks == 0)
{ {
std::cout << "wrong number of blocks" << std::endl; std::cout << "Invalid syntax: Wrong number of blocks. For more details, use the help command." << std::endl;
return false; return true;
} }
return m_executor.print_blockchain_dynamic_stats(nblocks); return m_executor.print_blockchain_dynamic_stats(nblocks);
@ -750,10 +835,10 @@ bool t_command_parser_executor::print_blockchain_dynamic_stats(const std::vector
bool t_command_parser_executor::update(const std::vector<std::string>& args) bool t_command_parser_executor::update(const std::vector<std::string>& args)
{ {
if(args.size() != 1) if (args.size() != 1)
{ {
std::cout << "Exactly one parameter is needed: check, download, or update" << std::endl; std::cout << "Invalid syntax: One parameter expected. For more details, use the help command." << std::endl;
return false; return true;
} }
return m_executor.update(args.front()); return m_executor.update(args.front());
@ -761,13 +846,17 @@ bool t_command_parser_executor::update(const std::vector<std::string>& args)
bool t_command_parser_executor::relay_tx(const std::vector<std::string>& args) bool t_command_parser_executor::relay_tx(const std::vector<std::string>& args)
{ {
if (args.size() != 1) return false; if (args.size() != 1)
{
std::cout << "Invalid syntax: One parameter expected. For more details, use the help command." << std::endl;
return true;
}
std::string txid; std::string txid;
crypto::hash hash; crypto::hash hash;
if (!parse_hash256(args[0], hash)) if (!parse_hash256(args[0], hash))
{ {
std::cout << "failed to parse tx id" << std::endl; std::cout << "Invalid syntax: Failed to parse tx id. For more details, use the help command." << std::endl;
return true; return true;
} }
txid = args[0]; txid = args[0];
@ -776,7 +865,10 @@ bool t_command_parser_executor::relay_tx(const std::vector<std::string>& args)
bool t_command_parser_executor::sync_info(const std::vector<std::string>& args) bool t_command_parser_executor::sync_info(const std::vector<std::string>& args)
{ {
if (args.size() != 0) return false; if (args.size() != 0) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.sync_info(); return m_executor.sync_info();
} }
@ -785,8 +877,8 @@ bool t_command_parser_executor::pop_blocks(const std::vector<std::string>& args)
{ {
if (args.size() != 1) if (args.size() != 1)
{ {
std::cout << "Exactly one parameter is needed" << std::endl; std::cout << "Invalid syntax: One parameter expected. For more details, use the help command." << std::endl;
return false; return true;
} }
try try
@ -794,21 +886,24 @@ bool t_command_parser_executor::pop_blocks(const std::vector<std::string>& args)
uint64_t nblocks = boost::lexical_cast<uint64_t>(args[0]); uint64_t nblocks = boost::lexical_cast<uint64_t>(args[0]);
if (nblocks < 1) if (nblocks < 1)
{ {
std::cout << "number of blocks must be greater than 0" << std::endl; std::cout << "Invalid syntax: Number of blocks must be greater than 0. For more details, use the help command." << std::endl;
return false; return true;
} }
return m_executor.pop_blocks(nblocks); return m_executor.pop_blocks(nblocks);
} }
catch (const boost::bad_lexical_cast&) catch (const boost::bad_lexical_cast&)
{ {
std::cout << "number of blocks must be a number greater than 0" << std::endl; std::cout << "Invalid syntax: Number of blocks must be a number greater than 0. For more details, use the help command." << std::endl;
} }
return false; return true;
} }
bool t_command_parser_executor::rpc_payments(const std::vector<std::string>& args) bool t_command_parser_executor::rpc_payments(const std::vector<std::string>& args)
{ {
if (args.size() != 0) return false; if (args.size() != 0) {
std::cout << "Invalid syntax: No parameters expected. For more details, use the help command." << std::endl;
return true;
}
return m_executor.rpc_payments(); return m_executor.rpc_payments();
} }
@ -820,7 +915,11 @@ bool t_command_parser_executor::version(const std::vector<std::string>& args)
bool t_command_parser_executor::prune_blockchain(const std::vector<std::string>& args) bool t_command_parser_executor::prune_blockchain(const std::vector<std::string>& args)
{ {
if (args.size() > 1) return false; if (args.size() > 1)
{
std::cout << "Invalid syntax: Too many parameters. For more details, use the help command." << std::endl;
return true;
}
if (args.empty() || args[0] != "confirm") if (args.empty() || args[0] != "confirm")
{ {
@ -846,7 +945,8 @@ bool t_command_parser_executor::set_bootstrap_daemon(const std::vector<std::stri
const size_t args_count = args.size(); const size_t args_count = args.size();
if (args_count < 1 || args_count > 3) if (args_count < 1 || args_count > 3)
{ {
return false; std::cout << "Invalid syntax: Wrong number of parameters. For more details, use the help command." << std::endl;
return true;
} }
return m_executor.set_bootstrap_daemon( return m_executor.set_bootstrap_daemon(

View File

@ -217,7 +217,8 @@ t_command_server::t_command_server(
m_command_lookup.set_handler( m_command_lookup.set_handler(
"hard_fork_info" "hard_fork_info"
, std::bind(&t_command_parser_executor::hard_fork_info, &m_parser, p::_1) , std::bind(&t_command_parser_executor::hard_fork_info, &m_parser, p::_1)
, "Print the hard fork voting information." , "hard_fork_info <version>"
, "Print the hard fork voting information. If given a version, prints whether is this version enabled."
); );
m_command_lookup.set_handler( m_command_lookup.set_handler(
"bans" "bans"
@ -308,6 +309,7 @@ t_command_server::t_command_server(
m_command_lookup.set_handler( m_command_lookup.set_handler(
"prune_blockchain" "prune_blockchain"
, std::bind(&t_command_parser_executor::prune_blockchain, &m_parser, p::_1) , std::bind(&t_command_parser_executor::prune_blockchain, &m_parser, p::_1)
, "prune_blockchain [confirm]"
, "Prune the blockchain." , "Prune the blockchain."
); );
m_command_lookup.set_handler( m_command_lookup.set_handler(