mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-09 03:32:29 +00:00
* Enforce an http transfer timeout when libcurl fails to honor
it. Also set a 5-minute timeout for (previously unlimited) torrent transfers and fixes the argument type for curl_easy_setopt values. * Allows bandwidth throttles to work without floating point support. * Adds a d.add_peer=host[:port] command to manually add a peer (not for torrents marked "private"), port is 6881 by default. * Allows banning the selected peer with "B". No unbanning is possible yet. All the above patches were written by Josef Drexler. * Differentiate between commands that have no target, and those that take generic targets, when using XMLRPC. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@1073 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
+14
-9
@@ -111,15 +111,7 @@ CurlStack::receive_action(CurlSocket* socket, int events) {
|
||||
if (msg->msg != CURLMSG_DONE)
|
||||
throw torrent::internal_error("CurlStack::receive_action() msg->msg != CURLMSG_DONE.");
|
||||
|
||||
iterator itr = std::find_if(begin(), end(), rak::equal(msg->easy_handle, std::mem_fun(&CurlGet::handle)));
|
||||
|
||||
if (itr == end())
|
||||
throw torrent::internal_error("Could not find CurlGet with the right easy_handle.");
|
||||
|
||||
if (msg->data.result == CURLE_OK)
|
||||
(*itr)->signal_done().emit();
|
||||
else
|
||||
(*itr)->signal_failed().emit(curl_easy_strerror(msg->data.result));
|
||||
transfer_done(msg->easy_handle, msg->data.result == CURLE_OK ? NULL : curl_easy_strerror(msg->data.result));
|
||||
}
|
||||
|
||||
if (empty())
|
||||
@@ -129,6 +121,19 @@ CurlStack::receive_action(CurlSocket* socket, int events) {
|
||||
} while (code == CURLM_CALL_MULTI_PERFORM);
|
||||
}
|
||||
|
||||
void
|
||||
CurlStack::transfer_done(void* handle, const char* msg) {
|
||||
iterator itr = std::find_if(begin(), end(), rak::equal(handle, std::mem_fun(&CurlGet::handle)));
|
||||
|
||||
if (itr == end())
|
||||
throw torrent::internal_error("Could not find CurlGet with the right easy_handle.");
|
||||
|
||||
if (msg == NULL)
|
||||
(*itr)->signal_done().emit();
|
||||
else
|
||||
(*itr)->signal_failed().emit(msg);
|
||||
}
|
||||
|
||||
void
|
||||
CurlStack::receive_timeout() {
|
||||
receive_action(NULL, 0);
|
||||
|
||||
Reference in New Issue
Block a user