aboutsummaryrefslogtreecommitdiff
path: root/contrib/epee
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/epee')
-rw-r--r--contrib/epee/include/net/http_client.h42
-rw-r--r--contrib/epee/include/storages/portable_storage_from_bin.h3
-rw-r--r--contrib/epee/include/storages/portable_storage_from_json.h3
-rw-r--r--contrib/epee/src/mlog.cpp13
-rw-r--r--contrib/epee/src/readline_buffer.cpp4
5 files changed, 49 insertions, 16 deletions
diff --git a/contrib/epee/include/net/http_client.h b/contrib/epee/include/net/http_client.h
index 9ce30b620..af1aee9f6 100644
--- a/contrib/epee/include/net/http_client.h
+++ b/contrib/epee/include/net/http_client.h
@@ -245,8 +245,18 @@ namespace net_utils
}
}
+ // This magic var determines the maximum length for when copying the body message in
+ // memory is faster/more preferable than the round-trip time for one packet
+ constexpr size_t BODY_NO_COPY_CUTOFF = 128 * 1024; // ~262 KB or ~175 packets
+
+ // Maximum expected total headers bytes
+ constexpr size_t HEADER_RESERVE_SIZE = 2048;
+
+ const bool do_copy_body = body.size() <= BODY_NO_COPY_CUTOFF;
+ const size_t req_buff_cap = HEADER_RESERVE_SIZE + (do_copy_body ? body.size() : 0);
+
std::string req_buff{};
- req_buff.reserve(2048);
+ req_buff.reserve(req_buff_cap);
req_buff.append(method.data(), method.size()).append(" ").append(uri.data(), uri.size()).append(" HTTP/1.1\r\n");
add_field(req_buff, "Host", m_host_buff);
add_field(req_buff, "Content-Length", std::to_string(body.size()));
@@ -255,9 +265,7 @@ namespace net_utils
for(const auto& field : additional_params)
add_field(req_buff, field);
- for (unsigned sends = 0; sends < 2; ++sends)
{
- const std::size_t initial_size = req_buff.size();
const auto auth = m_auth.get_auth_field(method, uri);
if (auth)
add_field(req_buff, *auth);
@@ -265,11 +273,21 @@ namespace net_utils
req_buff += "\r\n";
//--
- bool res = m_net_client.send(req_buff, timeout);
- CHECK_AND_ASSERT_MES(res, false, "HTTP_CLIENT: Failed to SEND");
- if(body.size())
+ if (do_copy_body) // small body
+ {
+ // Copy headers + body together and potentially send one fewer packet
+ req_buff.append(body.data(), body.size());
+ const bool res = m_net_client.send(req_buff, timeout);
+ CHECK_AND_ASSERT_MES(res, false, "HTTP_CLIENT: Failed to SEND");
+ }
+ else // large body
+ {
+ // Send headers and body seperately to avoid copying heavy body message
+ bool res = m_net_client.send(req_buff, timeout);
+ CHECK_AND_ASSERT_MES(res, false, "HTTP_CLIENT: Failed to SEND");
res = m_net_client.send(body, timeout);
- CHECK_AND_ASSERT_MES(res, false, "HTTP_CLIENT: Failed to SEND");
+ CHECK_AND_ASSERT_MES(res, false, "HTTP_CLIENT: Failed to SEND");
+ }
m_response_info.clear();
m_state = reciev_machine_state_header;
@@ -282,19 +300,11 @@ namespace net_utils
return true;
}
- switch (m_auth.handle_401(m_response_info))
+ if (m_auth.handle_401(m_response_info) == http_client_auth::kParseFailure)
{
- case http_client_auth::kSuccess:
- break;
- case http_client_auth::kBadPassword:
- sends = 2;
- break;
- default:
- case http_client_auth::kParseFailure:
LOG_ERROR("Bad server response for authentication");
return false;
}
- req_buff.resize(initial_size); // rollback for new auth generation
}
LOG_ERROR("Client has incorrect username/password for server requiring authentication");
return false;
diff --git a/contrib/epee/include/storages/portable_storage_from_bin.h b/contrib/epee/include/storages/portable_storage_from_bin.h
index d8a8a4a49..b0af022f5 100644
--- a/contrib/epee/include/storages/portable_storage_from_bin.h
+++ b/contrib/epee/include/storages/portable_storage_from_bin.h
@@ -33,6 +33,9 @@
#include "portable_storage_base.h"
#include "portable_storage_bin_utils.h"
+#undef MONERO_DEFAULT_LOG_CATEGORY
+#define MONERO_DEFAULT_LOG_CATEGORY "serialization"
+
#ifdef EPEE_PORTABLE_STORAGE_RECURSION_LIMIT
#define EPEE_PORTABLE_STORAGE_RECURSION_LIMIT_INTERNAL EPEE_PORTABLE_STORAGE_RECURSION_LIMIT
#else
diff --git a/contrib/epee/include/storages/portable_storage_from_json.h b/contrib/epee/include/storages/portable_storage_from_json.h
index 69192ca6b..f21a89a92 100644
--- a/contrib/epee/include/storages/portable_storage_from_json.h
+++ b/contrib/epee/include/storages/portable_storage_from_json.h
@@ -31,6 +31,9 @@
#include "parserse_base_utils.h"
#include "file_io_utils.h"
+#undef MONERO_DEFAULT_LOG_CATEGORY
+#define MONERO_DEFAULT_LOG_CATEGORY "serialization"
+
#define EPEE_JSON_RECURSION_LIMIT_INTERNAL 100
namespace epee
diff --git a/contrib/epee/src/mlog.cpp b/contrib/epee/src/mlog.cpp
index 092d41777..4ca1a3632 100644
--- a/contrib/epee/src/mlog.cpp
+++ b/contrib/epee/src/mlog.cpp
@@ -338,11 +338,21 @@ bool is_stdout_a_tty()
return is_a_tty.load(std::memory_order_relaxed);
}
+static bool is_nocolor()
+{
+ static const char *no_color_var = getenv("NO_COLOR");
+ static const bool no_color = no_color_var && *no_color_var; // apparently, NO_COLOR=0 means no color too (as per no-color.org)
+ return no_color;
+}
+
void set_console_color(int color, bool bright)
{
if (!is_stdout_a_tty())
return;
+ if (is_nocolor())
+ return;
+
switch(color)
{
case console_color_default:
@@ -461,6 +471,9 @@ void reset_console_color() {
if (!is_stdout_a_tty())
return;
+ if (is_nocolor())
+ return;
+
#ifdef WIN32
HANDLE h_stdout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h_stdout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
diff --git a/contrib/epee/src/readline_buffer.cpp b/contrib/epee/src/readline_buffer.cpp
index 1047d1696..ac68d1fdb 100644
--- a/contrib/epee/src/readline_buffer.cpp
+++ b/contrib/epee/src/readline_buffer.cpp
@@ -238,6 +238,10 @@ static char** attempted_completion(const char* text, int start, int end)
static void install_line_handler()
{
+#if RL_READLINE_VERSION >= 0x0801
+ rl_variable_bind("enable-bracketed-paste", "off");
+#endif
+
rl_attempted_completion_function = attempted_completion;
rl_callback_handler_install("", handle_line);
stifle_history(500);