diff options
Diffstat (limited to 'contrib/epee')
-rw-r--r-- | contrib/epee/include/console_handler.h | 27 | ||||
-rw-r--r-- | contrib/epee/include/misc_log_ex.h | 1 | ||||
-rw-r--r-- | contrib/epee/include/misc_os_dependent.h | 15 | ||||
-rw-r--r-- | contrib/epee/include/net/http_protocol_handler.inl | 2 | ||||
-rw-r--r-- | contrib/epee/include/net/levin_client.inl | 4 | ||||
-rw-r--r-- | contrib/epee/include/net/levin_client_async.h | 2 | ||||
-rw-r--r-- | contrib/epee/include/net/levin_helper.h | 4 | ||||
-rw-r--r-- | contrib/epee/include/net/levin_protocol_handler.h | 4 | ||||
-rw-r--r-- | contrib/epee/include/net/levin_protocol_handler_async.h | 14 | ||||
-rw-r--r-- | contrib/epee/include/net/net_helper.h | 2 | ||||
-rw-r--r-- | contrib/epee/include/net/net_utils_base.h | 3 | ||||
-rw-r--r-- | contrib/epee/include/profile_tools.h | 7 | ||||
-rw-r--r-- | contrib/epee/include/serialization/keyvalue_serialization.h | 10 | ||||
-rw-r--r-- | contrib/epee/include/storages/portable_storage.h | 2 | ||||
-rw-r--r-- | contrib/epee/src/mlog.cpp | 4 | ||||
-rw-r--r-- | contrib/epee/src/readline_buffer.cpp | 37 |
16 files changed, 94 insertions, 44 deletions
diff --git a/contrib/epee/include/console_handler.h b/contrib/epee/include/console_handler.h index e780ad4de..a3b2d30eb 100644 --- a/contrib/epee/include/console_handler.h +++ b/contrib/epee/include/console_handler.h @@ -293,13 +293,13 @@ namespace epee } template<class t_server, class chain_handler> - bool run(t_server* psrv, chain_handler ch_handler, const std::string& prompt = "#", const std::string& usage = "") + bool run(t_server* psrv, chain_handler ch_handler, std::function<std::string(void)> prompt, const std::string& usage = "") { return run(prompt, usage, [&](const std::string& cmd) { return ch_handler(psrv, cmd); }, [&] { psrv->send_stop_signal(); }); } template<class chain_handler> - bool run(chain_handler ch_handler, const std::string& prompt = "#", const std::string& usage = "", std::function<void(void)> exit_handler = NULL) + bool run(chain_handler ch_handler, std::function<std::string(void)> prompt, const std::string& usage = "", std::function<void(void)> exit_handler = NULL) { return run(prompt, usage, [&](const std::string& cmd) { return ch_handler(cmd); }, exit_handler); } @@ -312,18 +312,19 @@ namespace epee void print_prompt() { - if (!m_prompt.empty()) + std::string prompt = m_prompt(); + if (!prompt.empty()) { #ifdef HAVE_READLINE - std::string color_prompt = "\001\033[1;33m\002" + m_prompt; - if (' ' != m_prompt.back()) + std::string color_prompt = "\001\033[1;33m\002" + prompt; + if (' ' != prompt.back()) color_prompt += " "; color_prompt += "\001\033[0m\002"; m_stdin_reader.get_readline_buffer().set_prompt(color_prompt); #else epee::set_console_color(epee::console_color_yellow, true); - std::cout << m_prompt; - if (' ' != m_prompt.back()) + std::cout << prompt; + if (' ' != prompt.back()) std::cout << ' '; epee::reset_console_color(); std::cout.flush(); @@ -333,7 +334,7 @@ namespace epee private: template<typename t_cmd_handler> - bool run(const std::string& prompt, const std::string& usage, const t_cmd_handler& cmd_handler, std::function<void(void)> exit_handler) + bool run(std::function<std::string(void)> prompt, const std::string& usage, const t_cmd_handler& cmd_handler, std::function<void(void)> exit_handler) { bool continue_handle = true; m_prompt = prompt; @@ -394,7 +395,7 @@ namespace epee private: async_stdin_reader m_stdin_reader; std::atomic<bool> m_running = {true}; - std::string m_prompt; + std::function<std::string(void)> m_prompt; }; @@ -516,19 +517,23 @@ namespace epee std::unique_ptr<boost::thread> m_console_thread; async_console_handler m_console_handler; public: - bool start_handling(const std::string& prompt, const std::string& usage_string = "", std::function<void(void)> exit_handler = NULL) + bool start_handling(std::function<std::string(void)> prompt, const std::string& usage_string = "", std::function<void(void)> exit_handler = NULL) { m_console_thread.reset(new boost::thread(boost::bind(&console_handlers_binder::run_handling, this, prompt, usage_string, exit_handler))); m_console_thread->detach(); return true; } + bool start_handling(const std::string &prompt, const std::string& usage_string = "", std::function<void(void)> exit_handler = NULL) + { + return start_handling([prompt](){ return prompt; }, usage_string, exit_handler); + } void stop_handling() { m_console_handler.stop(); } - bool run_handling(const std::string& prompt, const std::string& usage_string, std::function<void(void)> exit_handler = NULL) + bool run_handling(std::function<std::string(void)> prompt, const std::string& usage_string, std::function<void(void)> exit_handler = NULL) { return m_console_handler.run(boost::bind(&console_handlers_binder::process_command_str, this, _1), prompt, usage_string, exit_handler); } diff --git a/contrib/epee/include/misc_log_ex.h b/contrib/epee/include/misc_log_ex.h index 6eeb1441f..ec4bcbe2d 100644 --- a/contrib/epee/include/misc_log_ex.h +++ b/contrib/epee/include/misc_log_ex.h @@ -60,6 +60,7 @@ #define MCDEBUG(cat,x) CLOG(DEBUG,cat) << x #define MCTRACE(cat,x) CLOG(TRACE,cat) << x #define MCLOG(level,cat,x) ELPP_WRITE_LOG(el::base::Writer, level, el::base::DispatchAction::NormalLog, cat) << x +#define MCLOG_FILE(level,cat,x) ELPP_WRITE_LOG(el::base::Writer, level, el::base::DispatchAction::FileOnlyLog, cat) << x #define MCLOG_COLOR(level,cat,color,x) MCLOG(level,cat,"\033[1;" color "m" << x << "\033[0m") #define MCLOG_RED(level,cat,x) MCLOG_COLOR(level,cat,"31",x) diff --git a/contrib/epee/include/misc_os_dependent.h b/contrib/epee/include/misc_os_dependent.h index 806d3e83e..69ded09e5 100644 --- a/contrib/epee/include/misc_os_dependent.h +++ b/contrib/epee/include/misc_os_dependent.h @@ -48,17 +48,17 @@ namespace epee namespace misc_utils { - inline uint64_t get_tick_count() + inline uint64_t get_ns_count() { #if defined(_MSC_VER) - return ::GetTickCount64(); + return ::GetTickCount64() * 1000000; #elif defined(WIN32) static LARGE_INTEGER pcfreq = {0}; LARGE_INTEGER ticks; if (!pcfreq.QuadPart) QueryPerformanceFrequency(&pcfreq); QueryPerformanceCounter(&ticks); - ticks.QuadPart *= 1000; /* we want msec */ + ticks.QuadPart *= 1000000000; /* we want nsec */ return ticks.QuadPart / pcfreq.QuadPart; #elif defined(__MACH__) clock_serv_t cclock; @@ -68,16 +68,21 @@ namespace misc_utils clock_get_time(cclock, &mts); mach_port_deallocate(mach_task_self(), cclock); - return (mts.tv_sec * 1000) + (mts.tv_nsec/1000000); + return (mts.tv_sec * 1000000000) + (mts.tv_nsec); #else struct timespec ts; if(clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { return 0; } - return (ts.tv_sec * 1000) + (ts.tv_nsec/1000000); + return (ts.tv_sec * 1000000000) + (ts.tv_nsec); #endif } + inline uint64_t get_tick_count() + { + return get_ns_count() / 1000000; + } + inline int call_sys_cmd(const std::string& cmd) { diff --git a/contrib/epee/include/net/http_protocol_handler.inl b/contrib/epee/include/net/http_protocol_handler.inl index d9eca2479..c92a13bcc 100644 --- a/contrib/epee/include/net/http_protocol_handler.inl +++ b/contrib/epee/include/net/http_protocol_handler.inl @@ -547,7 +547,7 @@ namespace net_utils LOG_PRINT_L3("HTTP_RESPONSE_HEAD: << \r\n" << response_data); m_psnd_hndlr->do_send((void*)response_data.data(), response_data.size()); - if(response.m_body.size()) + if(response.m_body.size() && (query_info.m_http_method != http::http_method_head)) m_psnd_hndlr->do_send((void*)response.m_body.data(), response.m_body.size()); return res; } diff --git a/contrib/epee/include/net/levin_client.inl b/contrib/epee/include/net/levin_client.inl index 50a01aaa5..ab7c32c32 100644 --- a/contrib/epee/include/net/levin_client.inl +++ b/contrib/epee/include/net/levin_client.inl @@ -99,7 +99,7 @@ int levin_client_impl::invoke(int command, const std::string& in_buff, std::stri if(head.m_signature!=LEVIN_SIGNATURE) { - LOG_PRINT_L1("Signature missmatch in response"); + LOG_PRINT_L1("Signature mismatch in response"); return -1; } @@ -160,7 +160,7 @@ inline if(head.m_signature!=LEVIN_SIGNATURE) { - LOG_PRINT_L1("Signature missmatch in response"); + LOG_PRINT_L1("Signature mismatch in response"); return -1; } diff --git a/contrib/epee/include/net/levin_client_async.h b/contrib/epee/include/net/levin_client_async.h index 4b48070d6..337d345c4 100644 --- a/contrib/epee/include/net/levin_client_async.h +++ b/contrib/epee/include/net/levin_client_async.h @@ -408,7 +408,7 @@ namespace levin if(head.m_signature!=LEVIN_SIGNATURE) { - LOG_ERROR("Signature missmatch in response"); + LOG_ERROR("Signature mismatch in response"); return false; } diff --git a/contrib/epee/include/net/levin_helper.h b/contrib/epee/include/net/levin_helper.h index c51d7244b..05560dd90 100644 --- a/contrib/epee/include/net/levin_helper.h +++ b/contrib/epee/include/net/levin_helper.h @@ -94,7 +94,7 @@ namespace levin } if(head.m_cb != buff.size()-sizeof(levin::bucket_head)) { - LOG_PRINT_L3("sizes missmatch, at load_struct_from_levin_message"); + LOG_PRINT_L3("sizes mismatch, at load_struct_from_levin_message"); return false; } @@ -121,7 +121,7 @@ namespace levin } if(head.m_cb != buff.size()-sizeof(levin::bucket_head)) { - LOG_ERROR("sizes missmatch, at load_struct_from_levin_message"); + LOG_ERROR("sizes mismatch, at load_struct_from_levin_message"); return false; } diff --git a/contrib/epee/include/net/levin_protocol_handler.h b/contrib/epee/include/net/levin_protocol_handler.h index 3e1b8493a..fbc9727e2 100644 --- a/contrib/epee/include/net/levin_protocol_handler.h +++ b/contrib/epee/include/net/levin_protocol_handler.h @@ -103,7 +103,7 @@ namespace levin { if(m_cach_in_buffer.size() >= sizeof(uint64_t) && *((uint64_t*)m_cach_in_buffer.data()) != LEVIN_SIGNATURE) { - LOG_ERROR_CC(m_conn_context, "Signature missmatch on accepted connection"); + LOG_ERROR_CC(m_conn_context, "Signature mismatch on accepted connection"); return false; } is_continue = false; @@ -113,7 +113,7 @@ namespace levin bucket_head* phead = (bucket_head*)m_cach_in_buffer.data(); if(LEVIN_SIGNATURE != phead->m_signature) { - LOG_ERROR_CC(m_conn_context, "Signature missmatch on accepted connection"); + LOG_ERROR_CC(m_conn_context, "Signature mismatch on accepted connection"); return false; } m_current_head = *phead; diff --git a/contrib/epee/include/net/levin_protocol_handler_async.h b/contrib/epee/include/net/levin_protocol_handler_async.h index 8aa0faba1..60a667690 100644 --- a/contrib/epee/include/net/levin_protocol_handler_async.h +++ b/contrib/epee/include/net/levin_protocol_handler_async.h @@ -88,6 +88,8 @@ public: bool request_callback(boost::uuids::uuid connection_id); template<class callback_t> bool foreach_connection(callback_t cb); + template<class callback_t> + bool for_connection(const boost::uuids::uuid &connection_id, callback_t cb); size_t get_connections_count(); async_protocol_handler_config():m_pcommands_handler(NULL), m_max_packet_size(LEVIN_DEFAULT_MAX_PACKET_SIZE) @@ -804,6 +806,18 @@ bool async_protocol_handler_config<t_connection_context>::foreach_connection(cal return true; } //------------------------------------------------------------------------------------------ +template<class t_connection_context> template<class callback_t> +bool async_protocol_handler_config<t_connection_context>::for_connection(const boost::uuids::uuid &connection_id, callback_t cb) +{ + CRITICAL_REGION_LOCAL(m_connects_lock); + async_protocol_handler<t_connection_context>* aph = find_connection(connection_id); + if (!aph) + return false; + if(!cb(aph->get_context_ref())) + return false; + return true; +} +//------------------------------------------------------------------------------------------ template<class t_connection_context> size_t async_protocol_handler_config<t_connection_context>::get_connections_count() { diff --git a/contrib/epee/include/net/net_helper.h b/contrib/epee/include/net/net_helper.h index 432169990..1d808cc4c 100644 --- a/contrib/epee/include/net/net_helper.h +++ b/contrib/epee/include/net/net_helper.h @@ -473,7 +473,7 @@ namespace net_utils if(bytes_transfered != buff.size()) { - LOG_ERROR("Transferred missmatch with transfer_at_least value: m_bytes_transferred=" << bytes_transfered << " at_least value=" << buff.size()); + LOG_ERROR("Transferred mismatch with transfer_at_least value: m_bytes_transferred=" << bytes_transfered << " at_least value=" << buff.size()); return false; } diff --git a/contrib/epee/include/net/net_utils_base.h b/contrib/epee/include/net/net_utils_base.h index 3bea11985..ef3a1d146 100644 --- a/contrib/epee/include/net/net_utils_base.h +++ b/contrib/epee/include/net/net_utils_base.h @@ -155,7 +155,6 @@ namespace net_utils const network_address m_remote_address; const bool m_is_income; const time_t m_started; - bool m_in_timedsync; time_t m_last_recv; time_t m_last_send; uint64_t m_recv_cnt; @@ -171,7 +170,6 @@ namespace net_utils m_remote_address(remote_address), m_is_income(is_income), m_started(time(NULL)), - m_in_timedsync(false), m_last_recv(last_recv), m_last_send(last_send), m_recv_cnt(recv_cnt), @@ -184,7 +182,6 @@ namespace net_utils m_remote_address(new ipv4_network_address(0,0)), m_is_income(false), m_started(time(NULL)), - m_in_timedsync(false), m_last_recv(0), m_last_send(0), m_recv_cnt(0), diff --git a/contrib/epee/include/profile_tools.h b/contrib/epee/include/profile_tools.h index d3b1e4db4..f285fe48b 100644 --- a/contrib/epee/include/profile_tools.h +++ b/contrib/epee/include/profile_tools.h @@ -57,8 +57,15 @@ namespace epee #define TIME_MEASURE_START(var_name) uint64_t var_name = epee::misc_utils::get_tick_count(); +#define TIME_MEASURE_PAUSE(var_name) var_name = epee::misc_utils::get_tick_count() - var_name; +#define TIME_MEASURE_RESTART(var_name) var_name = epee::misc_utils::get_tick_count() - var_name; #define TIME_MEASURE_FINISH(var_name) var_name = epee::misc_utils::get_tick_count() - var_name; +#define TIME_MEASURE_NS_START(var_name) uint64_t var_name = epee::misc_utils::get_ns_count(); +#define TIME_MEASURE_NS_PAUSE(var_name) var_name = epee::misc_utils::get_ns_count() - var_name; +#define TIME_MEASURE_NS_RESTART(var_name) var_name = epee::misc_utils::get_ns_count() - var_name; +#define TIME_MEASURE_NS_FINISH(var_name) var_name = epee::misc_utils::get_ns_count() - var_name; + namespace profile_tools { struct local_call_account diff --git a/contrib/epee/include/serialization/keyvalue_serialization.h b/contrib/epee/include/serialization/keyvalue_serialization.h index bf2c8dacd..d4413a71b 100644 --- a/contrib/epee/include/serialization/keyvalue_serialization.h +++ b/contrib/epee/include/serialization/keyvalue_serialization.h @@ -70,6 +70,15 @@ public: \ #define KV_SERIALIZE_N(varialble, val_name) \ epee::serialization::selector<is_store>::serialize(this_ref.varialble, stg, hparent_section, val_name); + template<typename T> inline void serialize_default(const T &t, T v) { } + template<typename T> inline void serialize_default(T &t, T v) { t = v; } + +#define KV_SERIALIZE_OPT_N(variable, val_name, default_value) \ + do { \ + if (!epee::serialization::selector<is_store>::serialize(this_ref.variable, stg, hparent_section, val_name)) \ + epee::serialize_default(this_ref.variable, default_value); \ + } while (0); + #define KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE_N(varialble, val_name) \ epee::serialization::selector<is_store>::serialize_t_val_as_blob(this_ref.varialble, stg, hparent_section, val_name); @@ -86,6 +95,7 @@ public: \ #define KV_SERIALIZE_VAL_POD_AS_BLOB(varialble) KV_SERIALIZE_VAL_POD_AS_BLOB_N(varialble, #varialble) #define KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE(varialble) KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE_N(varialble, #varialble) //skip is_pod compile time check #define KV_SERIALIZE_CONTAINER_POD_AS_BLOB(varialble) KV_SERIALIZE_CONTAINER_POD_AS_BLOB_N(varialble, #varialble) +#define KV_SERIALIZE_OPT(variable,default_value) KV_SERIALIZE_OPT_N(variable, #variable, default_value) } diff --git a/contrib/epee/include/storages/portable_storage.h b/contrib/epee/include/storages/portable_storage.h index ba9292306..2023e2f2a 100644 --- a/contrib/epee/include/storages/portable_storage.h +++ b/contrib/epee/include/storages/portable_storage.h @@ -158,7 +158,7 @@ namespace epee pbuff->m_signature_b != PORTABLE_STORAGE_SIGNATUREB ) { - LOG_ERROR("portable_storage: wrong binary format - signature missmatch"); + LOG_ERROR("portable_storage: wrong binary format - signature mismatch"); return false; } if(pbuff->m_ver != PORTABLE_STORAGE_FORMAT_VER) diff --git a/contrib/epee/src/mlog.cpp b/contrib/epee/src/mlog.cpp index a51654d36..2ac3138f9 100644 --- a/contrib/epee/src/mlog.cpp +++ b/contrib/epee/src/mlog.cpp @@ -91,7 +91,7 @@ static const char *get_default_categories(int level) switch (level) { case 0: - categories = "*:WARNING,net:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO,logging:INFO,msgwriter:INFO"; + categories = "*:WARNING,net:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO,logging:INFO"; break; case 1: categories = "*:WARNING,global:INFO,stacktrace:INFO,logging:INFO,msgwriter:INFO"; @@ -129,7 +129,7 @@ void mlog_configure(const std::string &filename_base, bool console) el::Loggers::addFlag(el::LoggingFlag::DisableApplicationAbortOnFatalLog); el::Loggers::addFlag(el::LoggingFlag::ColoredTerminalOutput); el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck); - el::Helpers::installPreRollOutCallback([&filename_base](const char *name, size_t){ + el::Helpers::installPreRollOutCallback([filename_base](const char *name, size_t){ std::string rname = generate_log_filename(filename_base.c_str()); rename(name, rname.c_str()); }); diff --git a/contrib/epee/src/readline_buffer.cpp b/contrib/epee/src/readline_buffer.cpp index 549f49d45..ce8260ef6 100644 --- a/contrib/epee/src/readline_buffer.cpp +++ b/contrib/epee/src/readline_buffer.cpp @@ -152,13 +152,11 @@ static int process_input() static void handle_line(char* line) { - if(last_line == "exit" || last_line == "q") - { - return; - } - std::lock_guard<std::mutex> lock(sync_mutex); - rl_set_prompt(last_prompt.c_str()); - rl_already_prompted = 1; + // This function never gets called now as we are trapping newlines. + // However, it still needs to be present for readline to know we are + // manually handling lines. + rl_done = 1; + return; } static int handle_enter(int x, int y) @@ -167,30 +165,42 @@ static int handle_enter(int x, int y) char* line = NULL; line = rl_copy_text(0, rl_end); + std::string test_line = line; + boost::trim_right(test_line); + rl_crlf(); rl_on_new_line(); + + if(test_line.empty()) + { + last_line = ""; + rl_set_prompt(last_prompt.c_str()); + rl_replace_line("", 1); + rl_redisplay(); + have_line.notify_one(); + return 0; + } + rl_set_prompt(""); rl_replace_line("", 1); rl_redisplay(); - std::string test_line = line; - boost::trim_right(test_line); - if (test_line.length() > 0) + if (!test_line.empty()) { last_line = test_line; add_history(test_line.c_str()); - have_line.notify_one(); + history_set_pos(history_length); } free(line); if(last_line != "exit" && last_line != "q") { rl_set_prompt(last_prompt.c_str()); - rl_on_new_line_with_prompt(); + rl_replace_line("", 1); rl_redisplay(); } - rl_done = 1; + have_line.notify_one(); return 0; } @@ -236,6 +246,7 @@ static void install_line_handler() rl_startup_hook = startup_hook; rl_attempted_completion_function = attempted_completion; rl_callback_handler_install("", handle_line); + stifle_history(500); } static void remove_line_handler() |