diff --git a/falco.yaml b/falco.yaml index ad2d9b53662..205d182429c 100644 --- a/falco.yaml +++ b/falco.yaml @@ -566,6 +566,8 @@ http_output: client_key: "/etc/ssl/certs/client.key" # Whether to echo server answers to stdout echo: false + compress_uploads: false + keep_alive: false # [Stable] `program_output` # diff --git a/userspace/falco/configuration.cpp b/userspace/falco/configuration.cpp index 45d4222b1c7..4ffc1ebdce1 100644 --- a/userspace/falco/configuration.cpp +++ b/userspace/falco/configuration.cpp @@ -309,6 +309,14 @@ void falco_configuration::load_yaml(const std::string& config_name, const yaml_h client_key = config.get_scalar("http_output.client_key", "/etc/ssl/certs/client.key"); http_output.options["client_key"] = client_key; + bool compress_uploads; + compress_uploads = config.get_scalar("http_output.compress_uploads", false); + http_output.options["compress_uploads"] = compress_uploads? std::string("true") : std::string("false"); + + bool keep_alive; + keep_alive = config.get_scalar("http_output.keep_alive", false); + http_output.options["keep_alive"] = keep_alive? std::string("true") : std::string("false"); + m_outputs.push_back(http_output); } diff --git a/userspace/falco/outputs_http.cpp b/userspace/falco/outputs_http.cpp index c9eea08ceb1..44c94c34ba3 100644 --- a/userspace/falco/outputs_http.cpp +++ b/userspace/falco/outputs_http.cpp @@ -97,6 +97,16 @@ bool falco::outputs::output_http::init(const config& oc, bool buffered, const st CHECK_RES(curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, noop_write_callback)); } + if(m_oc.options["compress_uploads"] == std::string("true")) + { + CHECK_RES(curl_easy_setopt(m_curl, CURLOPT_TRANSFER_ENCODING, 1L)); + } + + if(m_oc.options["keep_alive"] == std::string("true")) + { + CHECK_RES(curl_easy_setopt(m_curl, CURLOPT_TCP_KEEPALIVE, 1L)); + } + if(res != CURLE_OK) { err = "libcurl error: " + std::string(curl_easy_strerror(res));