diff --git a/src/control.cc b/src/control.cc index 8c5e6aec..55c112e2 100644 --- a/src/control.cc +++ b/src/control.cc @@ -79,6 +79,7 @@ Control::initialize() { m_core->get_poll_manager()->signal_interrupted().connect(sigc::mem_fun(*m_inputStdin, &input::InputEvent::event_read)); m_core->get_poll_manager()->signal_interrupted().connect(sigc::ptr_fun(display::Canvas::do_update)); + m_core->get_poll_manager()->get_http_stack()->set_user_agent(std::string(PACKAGE "/" VERSION "/") + torrent::get_version()); m_core->initialize_second(); diff --git a/src/core/curl_get.cc b/src/core/curl_get.cc index 8e297e28..256c595e 100644 --- a/src/core/curl_get.cc +++ b/src/core/curl_get.cc @@ -81,12 +81,13 @@ CurlGet::start() { m_handle = curl_easy_init(); - curl_easy_setopt(m_handle, CURLOPT_URL, m_url.c_str()); - curl_easy_setopt(m_handle, CURLOPT_USERAGENT, m_userAgent.c_str()); - curl_easy_setopt(m_handle, CURLOPT_WRITEFUNCTION, &curl_get_receive_write); - curl_easy_setopt(m_handle, CURLOPT_WRITEDATA, this); + curl_easy_setopt(m_handle, CURLOPT_URL, m_url.c_str()); + curl_easy_setopt(m_handle, CURLOPT_WRITEFUNCTION, &curl_get_receive_write); + curl_easy_setopt(m_handle, CURLOPT_WRITEDATA, this); + curl_easy_setopt(m_handle, CURLOPT_TIMEOUT, 60); curl_easy_setopt(m_handle, CURLOPT_FORBID_REUSE, 1); + curl_easy_setopt(m_handle, CURLOPT_NOSIGNAL, 1); curl_easy_setopt(m_handle, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(m_handle, CURLOPT_MAXREDIRS, 5); @@ -122,6 +123,11 @@ CurlGet::get_size_total() { return d; } +void +CurlGet::set_user_agent(const char* s) { + curl_easy_setopt(m_handle, CURLOPT_USERAGENT, s); +} + void CurlGet::perform(CURLMsg* msg) { if (msg->msg != CURLMSG_DONE) diff --git a/src/core/curl_get.h b/src/core/curl_get.h index 687b6da7..0cabff37 100644 --- a/src/core/curl_get.h +++ b/src/core/curl_get.h @@ -61,13 +61,15 @@ class CurlGet : public torrent::Http { void start(); void close(); - bool is_busy() { return m_handle; } + bool is_busy() { return m_handle; } double get_size_done(); double get_size_total(); + void set_user_agent(const char* s); + protected: - CURL* handle() { return m_handle; } + CURL* handle() { return m_handle; } void perform(CURLMsg* msg); diff --git a/src/core/curl_stack.cc b/src/core/curl_stack.cc index c914d689..e52acb36 100644 --- a/src/core/curl_stack.cc +++ b/src/core/curl_stack.cc @@ -103,6 +103,8 @@ CurlStack::fdset(fd_set* readfds, fd_set* writefds, fd_set* exceptfds) { void CurlStack::add_get(CurlGet* get) { + get->set_user_agent(m_userAgent.c_str()); + CURLMcode code; if ((code = curl_multi_add_handle((CURLM*)m_handle, get->handle())) > 0) diff --git a/src/core/curl_stack.h b/src/core/curl_stack.h index 611752a7..41be3639 100644 --- a/src/core/curl_stack.h +++ b/src/core/curl_stack.h @@ -38,6 +38,7 @@ #define RTORRENT_CORE_CURL_STACK_H #include +#include #include namespace core { @@ -64,6 +65,9 @@ class CurlStack { SlotFactory get_http_factory(); + const std::string& user_agent() const { return m_userAgent; } + void set_user_agent(const std::string& s) { m_userAgent = s; } + static void global_init(); static void global_cleanup(); @@ -79,6 +83,8 @@ class CurlStack { int m_size; CurlGetList m_getList; + + std::string m_userAgent; }; } diff --git a/src/display/window_file_list.cc b/src/display/window_file_list.cc index c16f92e3..6fb1a1e8 100644 --- a/src/display/window_file_list.cc +++ b/src/display/window_file_list.cc @@ -67,6 +67,8 @@ WindowFileList::redraw() { m_canvas->print(55, pos, "Size"); m_canvas->print(63, pos, "Pri"); m_canvas->print(68, pos, "Cmpl"); + m_canvas->print(74, pos, "Encoding"); + m_canvas->print(84, pos, "Chunks"); ++pos; @@ -108,7 +110,7 @@ WindowFileList::redraw() { break; }; - m_canvas->print(0, pos, "%c %s %6.1f %s %3d %s", + m_canvas->print(0, pos, "%c %s %6.1f %s %3d %9s", range.first == *m_focus ? '*' : ' ', path.c_str(), (double)e.get_size() / (double)(1 << 20), @@ -116,6 +118,10 @@ WindowFileList::redraw() { done_percentage(e), e.path_list()->encoding().c_str()); + m_canvas->print(84, pos, "%i - %i", + e.get_chunk_begin(), + e.get_chunk_end()); + ++range.first; ++pos; }