Skip to content

Commit af4513a

Browse files
authored
Merge pull request #5710 from EOSIO/final_keosd_unix_socket_changes
Final keosd unix socket changes
2 parents 3e7d791 + 117fc09 commit af4513a

File tree

2 files changed

+23
-28
lines changed

2 files changed

+23
-28
lines changed

programs/cleos/main.cpp

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ bfs::path determine_home_directory()
166166
}
167167

168168
string url = "http://127.0.0.1:8888/";
169-
string wallet_url = "http://127.0.0.1:8900/";
169+
string default_wallet_url = "unix://" + (determine_home_directory() / "eosio-wallet" / (string(key_store_executable_name) + ".sock")).string();
170+
string wallet_url; //to be set to default_wallet_url in main
170171
bool no_verify = false;
171172
vector<string> headers;
172173

@@ -768,25 +769,22 @@ struct set_action_permission_subcommand {
768769
};
769770

770771

771-
bool local_port_used(const string& lo_address, uint16_t port) {
772+
bool local_port_used() {
772773
using namespace boost::asio;
773774

774775
io_service ios;
775-
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(lo_address), port);
776-
boost::asio::ip::tcp::socket socket(ios);
777-
boost::system::error_code ec = error::would_block;
778-
//connecting/failing to connect to localhost should be always fast - don't care about timeouts
779-
socket.async_connect(endpoint, [&](const boost::system::error_code& error) { ec = error; } );
780-
do {
781-
ios.run_one();
782-
} while (ec == error::would_block);
776+
local::stream_protocol::endpoint endpoint(wallet_url.substr(strlen("unix://")));
777+
local::stream_protocol::socket socket(ios);
778+
boost::system::error_code ec;
779+
socket.connect(endpoint, ec);
780+
783781
return !ec;
784782
}
785783

786-
void try_local_port( const string& lo_address, uint16_t port, uint32_t duration ) {
784+
void try_local_port(uint32_t duration) {
787785
using namespace std::chrono;
788786
auto start_time = duration_cast<std::chrono::milliseconds>( system_clock::now().time_since_epoch() ).count();
789-
while ( !local_port_used(lo_address, port)) {
787+
while ( !local_port_used()) {
790788
if (duration_cast<std::chrono::milliseconds>( system_clock::now().time_since_epoch()).count() - start_time > duration ) {
791789
std::cerr << "Unable to connect to keosd, if keosd is running please kill the process and try again.\n";
792790
throw connection_exception(fc::log_messages{FC_LOG_MESSAGE(error, "Unable to connect to keosd")});
@@ -806,16 +804,11 @@ void ensure_keosd_running(CLI::App* app) {
806804
if (subapp->got_subcommand("listproducers") || subapp->got_subcommand("listbw") || subapp->got_subcommand("bidnameinfo")) // system list* do not require wallet
807805
return;
808806
}
807+
if (wallet_url != default_wallet_url)
808+
return;
809809

810-
auto parsed_url = parse_url(wallet_url);
811-
auto resolved_url = resolve_url(context, parsed_url);
812-
813-
if (!resolved_url.is_loopback)
814-
return;
815-
816-
for (const auto& addr: resolved_url.resolved_addresses)
817-
if (local_port_used(addr, resolved_url.resolved_port)) // Hopefully taken by keosd
818-
return;
810+
if (local_port_used())
811+
return;
819812

820813
boost::filesystem::path binPath = boost::dll::program_location();
821814
binPath.remove_filename();
@@ -827,13 +820,15 @@ void ensure_keosd_running(CLI::App* app) {
827820
binPath.remove_filename().remove_filename().append("keosd").append(key_store_executable_name);
828821
}
829822

830-
const auto& lo_address = resolved_url.resolved_addresses.front();
831823
if (boost::filesystem::exists(binPath)) {
832824
namespace bp = boost::process;
833825
binPath = boost::filesystem::canonical(binPath);
834826

835827
vector<std::string> pargs;
836-
pargs.push_back("--http-server-address=" + lo_address + ":" + std::to_string(resolved_url.resolved_port));
828+
pargs.push_back("--http-server-address");
829+
pargs.push_back("");
830+
pargs.push_back("--https-server-address");
831+
pargs.push_back("");
837832

838833
::boost::process::child keos(binPath, pargs,
839834
bp::std_in.close(),
@@ -842,13 +837,12 @@ void ensure_keosd_running(CLI::App* app) {
842837
if (keos.running()) {
843838
std::cerr << binPath << " launched" << std::endl;
844839
keos.detach();
845-
try_local_port(lo_address, resolved_url.resolved_port, 2000);
840+
try_local_port(2000);
846841
} else {
847-
std::cerr << "No wallet service listening on " << lo_address << ":"
848-
<< std::to_string(resolved_url.resolved_port) << ". Failed to launch " << binPath << std::endl;
842+
std::cerr << "No wallet service listening on " << wallet_url << ". Failed to launch " << binPath << std::endl;
849843
}
850844
} else {
851-
std::cerr << "No wallet service listening on " << lo_address << ":" << std::to_string(resolved_url.resolved_port)
845+
std::cerr << "No wallet service listening on "
852846
<< ". Cannot automatically start keosd because keosd was not found." << std::endl;
853847
}
854848
}
@@ -1745,6 +1739,7 @@ int main( int argc, char** argv ) {
17451739
bindtextdomain(locale_domain, locale_path);
17461740
textdomain(locale_domain);
17471741
context = eosio::client::http::create_http_context();
1742+
wallet_url = default_wallet_url;
17481743

17491744
CLI::App app{"Command Line Interface to EOSIO Client"};
17501745
app.require_subcommand();

programs/keosd/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ int main(int argc, char** argv)
4343
http_plugin::set_defaults({
4444
.address_config_prefix = "",
4545
.default_unix_socket_path = keosd::config::key_store_executable_name + ".sock",
46-
.default_http_port = 8900
46+
.default_http_port = 0
4747
});
4848
app().register_plugin<wallet_api_plugin>();
4949
if(!app().initialize<wallet_plugin, wallet_api_plugin, http_plugin>(argc, argv))

0 commit comments

Comments
 (0)