diff options
author | amdmi3 <amdmi3@FreeBSD.org> | 2016-08-19 22:22:45 +0800 |
---|---|---|
committer | amdmi3 <amdmi3@FreeBSD.org> | 2016-08-19 22:22:45 +0800 |
commit | e44475cdb1321cda0535a76aa0f06c273b2753d9 (patch) | |
tree | d2f576f525f99e3909eed30d3970c2476ee4144d /net-p2p | |
parent | 74391bf16ceb6f795e34816f09e1c2d57a1f07b5 (diff) | |
download | freebsd-ports-gnome-e44475cdb1321cda0535a76aa0f06c273b2753d9.tar.gz freebsd-ports-gnome-e44475cdb1321cda0535a76aa0f06c273b2753d9.tar.zst freebsd-ports-gnome-e44475cdb1321cda0535a76aa0f06c273b2753d9.zip |
Update net-p2p/libtorrent-rasterbar and its slave libtorrent-rasterbar-python to 1.1.0
* USE_OPENSSL -> USES=ssl
* remove GeoIP bits as those have been removed from the library
* update LIB_DEPENDS and switch to += in the master as the slave needs the same boost libs
* remove 2 obsolete patches, regen 1 patch
* add a patch from upstream git to resolve CVE-2016-5301
* add a TEST option and a patch from upstream git to let tests compile
* simplify the install of DOCS and EXAMPLES
* remove stale portscout restriction so updates can be discovered
* update text and WWW in pkg-descr
* update pkg-plist
* cleanup the slave port's Makefile
* assume maintainership
PR: 211963
Submitted by: matthew@reztek.cz
Diffstat (limited to 'net-p2p')
-rw-r--r-- | net-p2p/libtorrent-rasterbar-python/Makefile | 4 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/Makefile | 63 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/distinfo | 5 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/files/patch-git_3624ce6c | 279 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/files/patch-git_95e348be | 132 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/files/patch-include-libtorrent-config.hpp | 16 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/files/patch-src_lazy__bdecode.cpp | 12 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/files/patch-src_utp__stream.cpp | 11 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/pkg-descr | 16 | ||||
-rw-r--r-- | net-p2p/libtorrent-rasterbar/pkg-plist | 173 |
10 files changed, 520 insertions, 191 deletions
diff --git a/net-p2p/libtorrent-rasterbar-python/Makefile b/net-p2p/libtorrent-rasterbar-python/Makefile index 612922a5e082..fc84a3b4bdee 100644 --- a/net-p2p/libtorrent-rasterbar-python/Makefile +++ b/net-p2p/libtorrent-rasterbar-python/Makefile @@ -22,9 +22,9 @@ PYDISTUTILS_PKGNAME= python_libtorrent PLIST= ${NONEXISTENT} PLIST_FILES= %%PYTHON_SITELIBDIR%%/libtorrent.so -OPTIONS_EXCLUDE= DOCS EXAMPLES STRIP +OPTIONS_EXCLUDE= DOCS EXAMPLES -# insure python paths are correctly identified +# ensure python paths are correctly identified CONFIGURE_ENV= PYTHON_INCLUDEDIR="${PYTHON_INCLUDEDIR}" \ PYTHON_VERSION="${PYTHON_VERSION}" diff --git a/net-p2p/libtorrent-rasterbar/Makefile b/net-p2p/libtorrent-rasterbar/Makefile index 26fd12f37df6..6ce81c6f835c 100644 --- a/net-p2p/libtorrent-rasterbar/Makefile +++ b/net-p2p/libtorrent-rasterbar/Makefile @@ -2,22 +2,23 @@ # $FreeBSD$ PORTNAME= libtorrent-rasterbar -PORTVERSION= 1.0.9 +PORTVERSION= 1.1.0 CATEGORIES?= net-p2p ipv6 -MASTER_SITES= https://github.com/arvidn/libtorrent/releases/download/libtorrent-${PORTVERSION:S/./_/g}/ +MASTER_SITES= https://github.com/arvidn/libtorrent/releases/download/libtorrent-${PORTVERSION:R:S/./_/g}/ -MAINTAINER= ports@FreeBSD.org +MAINTAINER= matthew@reztek.cz COMMENT?= C++ library implementing a BitTorrent client LICENSE= BSD3CLAUSE -LIB_DEPENDS?= libboost_date_time.so:devel/boost-libs \ - libGeoIP.so:net/GeoIP +LIB_DEPENDS+= libboost_chrono.so:devel/boost-libs \ + libboost_random.so:devel/boost-libs \ + libboost_system.so:devel/boost-libs -USES+= compiler:c++11-lang iconv:wchar_t libtool pathfix pkgconfig -USE_OPENSSL= yes +USES+= compiler:c++11-lang iconv:wchar_t libtool pathfix pkgconfig ssl GNU_CONFIGURE= yes USE_LDCONFIG= yes +TEST_TARGET= check CONFIGURE_ARGS= --disable-static \ --enable-dht \ @@ -26,37 +27,24 @@ CONFIGURE_ARGS= --disable-static \ --enable-deprecated-functions \ --with-boost=${LOCALBASE} \ --with-boost-system=boost_system \ - --enable-geoip \ - --with-libgeoip \ --with-libiconv \ --with-openssl=${OPENSSLBASE} -SHLIB_VER= 8 +SHLIB_VER= 9 PLIST_SUB+= SHLIB_VER="${SHLIB_VER}" -DOCSRCDIR1= ${WRKSRC} -DOC_FILES1= AUTHORS ChangeLog - -DOCSRCDIR2= ${WRKSRC}/docs -DOCSDIR2= ${DOCSDIR}/docs -DOC_FILES2= *.* - -DOCSRCDIR3= ${WRKSRC}/docs/img -DOCSDIR3= ${DOCSDIR}/docs/img -DOC_FILES3= * - +DOCFILES= AUTHORS ChangeLog +PORTDOCS= ${DOCFILES} docs/* PORTEXAMPLES= *.cpp -OPTIONS_DEFINE= DEBUG DOCS EXAMPLES +OPTIONS_DEFINE= DEBUG DOCS EXAMPLES TEST +TEST_DESC= Build and run tests (increases library size) DEBUG_CONFIGURE_ENABLE= debug +TEST_CONFIGURE_ENABLE= tests .include <bsd.port.options.mk> -# Restrict to stable (even) versions, indicated by the second component. -# With Versions 1.x not build yet net-p2p/qbittorrent -PORTSCOUT= limit:^0.16\..* - .if defined(SLAVE_PORT) && ${SLAVE_PORT:tl} == "yes" && defined(USE_PYTHON) CONFIGURE_ARGS+= --enable-python-binding \ --with-boost-python=boost_python @@ -68,27 +56,26 @@ post-patch: @${REINPLACE_CMD} -e 's|/usr/local/include|${PREFIX}/include|' \ ${WRKSRC}/Jamfile +post-configure: + ${FIND} ${WRKSRC} -name Makefile -o -name link_flags | \ + ${XARGS} ${REINPLACE_CMD} 's| *-R${LOCALBASE}/lib||' + post-install: .if defined(SLAVE_PORT) && ${SLAVE_PORT:tl} == "yes" && defined(USE_PYTHON) - ${STRIP_CMD} \ - ${STAGEDIR}${PYTHON_SITELIBDIR}/libtorrent.so + ${STRIP_CMD} ${STAGEDIR}${PYTHON_SITELIBDIR}/libtorrent.so .else ${STRIP_CMD} \ ${STAGEDIR}${PREFIX}/lib/libtorrent-rasterbar.so.${SHLIB_VER} .endif -.if ${PORT_OPTIONS:MDOCS} - @${MKDIR} ${STAGEDIR}${DOCSDIR} ${STAGEDIR}${DOCSDIR2} - @${MKDIR} ${STAGEDIR}${DOCSDIR} ${STAGEDIR}${DOCSDIR3} - ${INSTALL_DATA} ${DOC_FILES1:S|^|${DOCSRCDIR1}/|} ${STAGEDIR}${DOCSDIR} - ${INSTALL_DATA} ${DOC_FILES2:S|^|${DOCSRCDIR2}/|} ${STAGEDIR}${DOCSDIR2} - ${INSTALL_DATA} ${DOC_FILES3:S|^|${DOCSRCDIR3}/|} ${STAGEDIR}${DOCSDIR3} -.endif +post-install-DOCS-on: + @${MKDIR} ${STAGEDIR}${DOCSDIR} + ${INSTALL_MAN} ${DOCFILES:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR} + (cd ${WRKSRC} && ${COPYTREE_SHARE} docs ${STAGEDIR}${DOCSDIR}) -.if ${PORT_OPTIONS:MEXAMPLES} +post-install-EXAMPLES-on: @${MKDIR} ${STAGEDIR}${EXAMPLESDIR} - ${INSTALL_DATA} ${PORTEXAMPLES:S|^|${WRKSRC}/examples/|} \ + ${INSTALL_DATA} ${WRKSRC}/examples/${PORTEXAMPLES} \ ${STAGEDIR}${EXAMPLESDIR} -.endif .include <bsd.port.mk> diff --git a/net-p2p/libtorrent-rasterbar/distinfo b/net-p2p/libtorrent-rasterbar/distinfo index 35f64b90e501..44693a2b29f9 100644 --- a/net-p2p/libtorrent-rasterbar/distinfo +++ b/net-p2p/libtorrent-rasterbar/distinfo @@ -1,2 +1,3 @@ -SHA256 (libtorrent-rasterbar-1.0.9.tar.gz) = 11a93125ed49f796fca83da925ab7dc29e91d88b915f078caaddaaf559d63db6 -SIZE (libtorrent-rasterbar-1.0.9.tar.gz) = 3292886 +TIMESTAMP = 1471285838 +SHA256 (libtorrent-rasterbar-1.1.0.tar.gz) = 2713df7da4aec5263ac11b6626ea966f368a5a8081103fd8f2f2ed97b5cd731d +SIZE (libtorrent-rasterbar-1.1.0.tar.gz) = 3629123 diff --git a/net-p2p/libtorrent-rasterbar/files/patch-git_3624ce6c b/net-p2p/libtorrent-rasterbar/files/patch-git_3624ce6c new file mode 100644 index 000000000000..87154b158ed4 --- /dev/null +++ b/net-p2p/libtorrent-rasterbar/files/patch-git_3624ce6c @@ -0,0 +1,279 @@ +From 3624ce6cfd4d197db75f01ae4be37723d7d9b638 Mon Sep 17 00:00:00 2001 +From: Arvid Norberg <arvid.norberg@gmail.com> +Date: Sat, 4 Jun 2016 09:53:23 -0400 +Subject: [PATCH] fixed crash on invalid input in http_parser (#782) + +fixed crash on invalid input to http_parser +--- + ChangeLog | 1 + + include/libtorrent/add_torrent_params.hpp | 3 +- + src/http_parser.cpp | 32 +++++++ + test/test_http_parser.cpp | 139 +++++++++++++++++++++++++----- + 4 files changed, 151 insertions(+), 24 deletions(-) + +diff --git a/src/http_parser.cpp b/src/http_parser.cpp +index a9497f8..52f6152 100644 +--- src/http_parser.cpp ++++ src/http_parser.cpp +@@ -174,6 +174,7 @@ namespace libtorrent + if (m_state == read_status) + { + TORRENT_ASSERT(!m_finished); ++ TORRENT_ASSERT(pos <= recv_buffer.end); + char const* newline = std::find(pos, recv_buffer.end, '\n'); + // if we don't have a full line yet, wait. + if (newline == recv_buffer.end) +@@ -194,6 +195,7 @@ namespace libtorrent + + char const* line = pos; + ++newline; ++ TORRENT_ASSERT(newline >= pos); + int incoming = int(newline - pos); + m_recv_pos += incoming; + boost::get<1>(ret) += newline - (m_recv_buffer.begin + start_pos); +@@ -227,6 +229,7 @@ namespace libtorrent + if (m_state == read_header) + { + TORRENT_ASSERT(!m_finished); ++ TORRENT_ASSERT(pos <= recv_buffer.end); + char const* newline = std::find(pos, recv_buffer.end, '\n'); + std::string line; + +@@ -277,6 +280,12 @@ namespace libtorrent + if (name == "content-length") + { + m_content_length = strtoll(value.c_str(), 0, 10); ++ if (m_content_length < 0) ++ { ++ m_state = error_state; ++ error = true; ++ return ret; ++ } + } + else if (name == "connection") + { +@@ -294,12 +303,24 @@ namespace libtorrent + if (string_begins_no_case("bytes ", ptr)) ptr += 6; + char* end; + m_range_start = strtoll(ptr, &end, 10); ++ if (m_range_start < 0) ++ { ++ m_state = error_state; ++ error = true; ++ return ret; ++ } + if (end == ptr) success = false; + else if (*end != '-') success = false; + else + { + ptr = end + 1; + m_range_end = strtoll(ptr, &end, 10); ++ if (m_range_end < 0) ++ { ++ m_state = error_state; ++ error = true; ++ return ret; ++ } + if (end == ptr) success = false; + } + +@@ -318,6 +339,7 @@ namespace libtorrent + } + + TORRENT_ASSERT(m_recv_pos <= recv_buffer.left()); ++ TORRENT_ASSERT(pos <= recv_buffer.end); + newline = std::find(pos, recv_buffer.end, '\n'); + } + boost::get<1>(ret) += newline - (m_recv_buffer.begin + start_pos); +@@ -347,6 +369,12 @@ namespace libtorrent + int header_size; + if (parse_chunk_header(buf, &chunk_size, &header_size)) + { ++ if (chunk_size < 0) ++ { ++ m_state = error_state; ++ error = true; ++ return ret; ++ } + if (chunk_size > 0) + { + std::pair<boost::int64_t, boost::int64_t> chunk_range(m_cur_chunk_end + header_size +@@ -419,6 +447,7 @@ namespace libtorrent + bool http_parser::parse_chunk_header(buffer::const_interval buf + , boost::int64_t* chunk_size, int* header_size) + { ++ TORRENT_ASSERT(buf.begin <= buf.end); + char const* pos = buf.begin; + + // ignore one optional new-line. This is since each chunk +@@ -429,6 +458,7 @@ namespace libtorrent + if (pos < buf.end && pos[0] == '\n') ++pos; + if (pos == buf.end) return false; + ++ TORRENT_ASSERT(pos <= buf.end); + char const* newline = std::find(pos, buf.end, '\n'); + if (newline == buf.end) return false; + ++newline; +@@ -441,6 +471,8 @@ namespace libtorrent + + // first, read the chunk length + *chunk_size = strtoll(pos, 0, 16); ++ if (*chunk_size < 0) return true; ++ + if (*chunk_size != 0) + { + *header_size = newline - buf.begin; +diff --git a/test/test_http_parser.cpp b/test/test_http_parser.cpp +index c26d1c8..6835a12 100644 +--- test/test_http_parser.cpp ++++ test/test_http_parser.cpp +@@ -361,29 +361,6 @@ TORRENT_TEST(http_parser) + TEST_EQUAL(parser.headers().find("test2")->second, "bar"); + } + +- // test chunked encoding +- +- parser.reset(); +- +- char const* chunked_input = +- "HTTP/1.1 200 OK\r\n" +- "Transfer-Encoding: chunked\r\n" +- "Content-Type: text/plain\r\n" +- "\r\n" +- "4\r\ntest\r\n4\r\n1234\r\n10\r\n0123456789abcdef\r\n" +- "0\r\n\r\n"; +- received = feed_bytes(parser, chunked_input); +- +- TEST_EQUAL(strlen(chunked_input), 24 + 94) +- TEST_CHECK(received == make_tuple(24, 94, false)); +- TEST_CHECK(parser.finished()); +- +- char mutable_buffer[100]; +- memcpy(mutable_buffer, parser.get_body().begin, parser.get_body().left()); +- int len = parser.collapse_chunk_headers(mutable_buffer, parser.get_body().left()); +- +- TEST_CHECK(std::equal(mutable_buffer, mutable_buffer + len, "test12340123456789abcdef")); +- + // test url parsing + + error_code ec; +@@ -476,3 +453,119 @@ TORRENT_TEST(http_parser) + TEST_EQUAL(is_redirect(400), false); + } + ++TORRENT_TEST(chunked_encoding) ++{ ++ char const* chunked_input = ++ "HTTP/1.1 200 OK\r\n" ++ "Transfer-Encoding: chunked\r\n" ++ "Content-Type: text/plain\r\n" ++ "\r\n" ++ "4\r\ntest\r\n4\r\n1234\r\n10\r\n0123456789abcdef\r\n" ++ "0\r\n\r\n"; ++ ++ http_parser parser; ++ boost::tuple<int, int, bool> const received ++ = feed_bytes(parser, chunked_input); ++ ++ TEST_EQUAL(strlen(chunked_input), 24 + 94) ++ TEST_CHECK(received == make_tuple(24, 94, false)); ++ TEST_CHECK(parser.finished()); ++ ++ char mutable_buffer[100]; ++ memcpy(mutable_buffer, parser.get_body().begin, parser.get_body().left()); ++ int len = parser.collapse_chunk_headers(mutable_buffer, parser.get_body().left()); ++ ++ TEST_CHECK(std::equal(mutable_buffer, mutable_buffer + len, "test12340123456789abcdef")); ++} ++ ++TORRENT_TEST(invalid_content_length) ++{ ++ char const* chunked_input = ++ "HTTP/1.1 200 OK\r\n" ++ "Transfer-Encoding: chunked\r\n" ++ "Content-Length: -45345\r\n" ++ "\r\n"; ++ ++ http_parser parser; ++ boost::tuple<int, int, bool> const received ++ = feed_bytes(parser, chunked_input); ++ ++ TEST_CHECK(boost::get<2>(received) == true); ++} ++ ++TORRENT_TEST(invalid_chunked) ++{ ++ char const* chunked_input = ++ "HTTP/1.1 200 OK\r\n" ++ "Transfer-Encoding: chunked\r\n" ++ "\r\n" ++ "-53465234545\r\n" ++ "foobar"; ++ ++ http_parser parser; ++ boost::tuple<int, int, bool> const received ++ = feed_bytes(parser, chunked_input); ++ ++ TEST_CHECK(boost::get<2>(received) == true); ++} ++ ++TORRENT_TEST(invalid_content_range_start) ++{ ++ char const* chunked_input = ++ "HTTP/1.1 206 OK\n" ++ "Content-Range: bYTes -3-4\n" ++ "\n"; ++ ++ http_parser parser; ++ boost::tuple<int, int, bool> const received ++ = feed_bytes(parser, chunked_input); ++ ++ TEST_CHECK(boost::get<2>(received) == true); ++} ++ ++TORRENT_TEST(invalid_content_range_end) ++{ ++ char const* chunked_input = ++ "HTTP/1.1 206 OK\n" ++ "Content-Range: bYTes 3--434\n" ++ "\n"; ++ ++ http_parser parser; ++ boost::tuple<int, int, bool> const received ++ = feed_bytes(parser, chunked_input); ++ ++ TEST_CHECK(boost::get<2>(received) == true); ++} ++ ++TORRENT_TEST(invalid_chunk_afl) ++{ ++ boost::uint8_t const invalid_chunked_input[] = { ++ 0x48, 0x6f, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, // HoTP/1.1 200 OK ++ 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 0x4b, 0x0d, // Cont-Length: 20 ++ 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x2d, 0x4c, 0x65, // Contente: tn ++ 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x20, 0x32, 0x30, // Transfer-Encoding: chunked ++ 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, // ++ 0x74, 0x65, 0x3a, 0x20, 0x74, 0x6e, 0x0d, 0x0a, // ++ 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, // ++ 0x2d, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, // -89abc9abcdef ++ 0x67, 0x3a, 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, // � ++ 0x65, 0x64, 0x0d, 0x0a, 0x0d, 0x0d, 0x0a, 0x0d, // T����������def ++ 0x0a, 0x0a, 0x2d, 0x38, 0x39, 0x61, 0x62, 0x63, // � ++ 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x0d, // T�����������est-headyr: foobar ++ 0x0a, 0xd6, 0x0d, 0x0a, 0x54, 0xbd, 0xbd, 0xbd, ++ 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0x64, ++ 0x65, 0x66, 0x0d, 0x0a, 0xd6, 0x0d, 0x0a, 0x54, ++ 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, ++ 0xbd, 0xbd, 0xbd, 0x65, 0x73, 0x74, 0x2d, 0x68, ++ 0x65, 0x61, 0x64, 0x79, 0x72, 0x3a, 0x20, 0x66, ++ 0x6f, 0x6f, 0x62, 0x61, 0x72, 0x0d, 0x0a, 0x0d, ++ 0x0a, 0x00 ++ }; ++ ++ http_parser parser; ++ boost::tuple<int, int, bool> const received ++ = feed_bytes(parser, reinterpret_cast<char const*>(invalid_chunked_input)); ++ ++ TEST_CHECK(boost::get<2>(received) == true); ++} ++ diff --git a/net-p2p/libtorrent-rasterbar/files/patch-git_95e348be b/net-p2p/libtorrent-rasterbar/files/patch-git_95e348be new file mode 100644 index 000000000000..805ff5f97883 --- /dev/null +++ b/net-p2p/libtorrent-rasterbar/files/patch-git_95e348be @@ -0,0 +1,132 @@ +From 95e348bef7ad92d7e26da712b4df478c8c739f87 Mon Sep 17 00:00:00 2001 +From: Arvid Norberg <arvid.norberg@gmail.com> +Date: Fri, 29 Apr 2016 12:00:39 -0400 +Subject: [PATCH] fix name clash with 'thread' on freebsd (#664) + +--- + test/dht_server.cpp | 2 +- + test/peer_server.cpp | 2 +- + test/test_alert_manager.cpp | 2 +- + test/test_threads.cpp | 12 ++++++------ + test/test_time.cpp | 8 ++++---- + test/udp_tracker.cpp | 2 +- + 6 files changed, 14 insertions(+), 14 deletions(-) + +diff --git a/test/dht_server.cpp b/test/dht_server.cpp +index 93a3b63..84b8a34 100644 +--- test/dht_server.cpp ++++ test/dht_server.cpp +@@ -89,7 +89,7 @@ struct dht_server + + fprintf(stderr, "%s: DHT initialized on port %d\n", time_now_string(), m_port); + +- m_thread.reset(new thread(boost::bind(&dht_server::thread_fun, this))); ++ m_thread.reset(new libtorrent::thread(boost::bind(&dht_server::thread_fun, this))); + } + + ~dht_server() +diff --git a/test/peer_server.cpp b/test/peer_server.cpp +index 315c055..8297acf 100644 +--- test/peer_server.cpp ++++ test/peer_server.cpp +@@ -92,7 +92,7 @@ struct peer_server + + fprintf(stderr, "%s: PEER peer initialized on port %d\n", time_now_string(), m_port); + +- m_thread.reset(new thread(boost::bind(&peer_server::thread_fun, this))); ++ m_thread.reset(new libtorrent::thread(boost::bind(&peer_server::thread_fun, this))); + } + + ~peer_server() +diff --git a/test/test_alert_manager.cpp b/test/test_alert_manager.cpp +index 3432336..bf0c28f 100644 +--- test/test_alert_manager.cpp ++++ test/test_alert_manager.cpp +@@ -262,7 +262,7 @@ TORRENT_TEST(wait_for_alert) + mgr.get_all(alerts, num_resume); + + start = clock_type::now(); +- thread posting_thread(boost::bind(&post_torrent_added, &mgr)); ++ libtorrent::thread posting_thread(boost::bind(&post_torrent_added, &mgr)); + + a = mgr.wait_for_alert(seconds(10)); + end = clock_type::now(); +diff --git a/test/test_threads.cpp b/test/test_threads.cpp +index 5c9475d..55b6010 100644 +--- test/test_threads.cpp ++++ test/test_threads.cpp +@@ -77,11 +77,11 @@ TORRENT_TEST(threads) + { + condition_variable cond; + libtorrent::mutex m; +- std::list<thread*> threads; ++ std::list<libtorrent::thread*> threads; + int waiting = 0; + for (int i = 0; i < 20; ++i) + { +- threads.push_back(new thread(boost::bind(&fun, &cond, &m, &waiting, i))); ++ threads.push_back(new libtorrent::thread(boost::bind(&fun, &cond, &m, &waiting, i))); + } + + // make sure all threads are waiting on the condition_variable +@@ -96,7 +96,7 @@ TORRENT_TEST(threads) + cond.notify_all(); + l.unlock(); + +- for (std::list<thread*>::iterator i = threads.begin(); i != threads.end(); ++i) ++ for (std::list<libtorrent::thread*>::iterator i = threads.begin(); i != threads.end(); ++i) + { + (*i)->join(); + delete *i; +@@ -107,8 +107,8 @@ TORRENT_TEST(threads) + boost::atomic<int> c(0); + for (int i = 0; i < 3; ++i) + { +- threads.push_back(new thread(boost::bind(&increment, &cond, &m, &waiting, &c))); +- threads.push_back(new thread(boost::bind(&decrement, &cond, &m, &waiting, &c))); ++ threads.push_back(new libtorrent::thread(boost::bind(&increment, &cond, &m, &waiting, &c))); ++ threads.push_back(new libtorrent::thread(boost::bind(&decrement, &cond, &m, &waiting, &c))); + } + + // make sure all threads are waiting on the condition_variable +@@ -123,7 +123,7 @@ TORRENT_TEST(threads) + cond.notify_all(); + l.unlock(); + +- for (std::list<thread*>::iterator i = threads.begin(); i != threads.end(); ++i) ++ for (std::list<libtorrent::thread*>::iterator i = threads.begin(); i != threads.end(); ++i) + { + (*i)->join(); + delete *i; +diff --git a/test/test_time.cpp b/test/test_time.cpp +index 817dd1d..f8ddd30 100644 +--- test/test_time.cpp ++++ test/test_time.cpp +@@ -83,10 +83,10 @@ TORRENT_TEST(time) + + mutex m; + condition_variable cv; +- thread t1(boost::bind(&check_timer_loop, boost::ref(m), boost::ref(last), boost::ref(cv))); +- thread t2(boost::bind(&check_timer_loop, boost::ref(m), boost::ref(last), boost::ref(cv))); +- thread t3(boost::bind(&check_timer_loop, boost::ref(m), boost::ref(last), boost::ref(cv))); +- thread t4(boost::bind(&check_timer_loop, boost::ref(m), boost::ref(last), boost::ref(cv))); ++ libtorrent::thread t1(boost::bind(&check_timer_loop, boost::ref(m), boost::ref(last), boost::ref(cv))); ++ libtorrent::thread t2(boost::bind(&check_timer_loop, boost::ref(m), boost::ref(last), boost::ref(cv))); ++ libtorrent::thread t3(boost::bind(&check_timer_loop, boost::ref(m), boost::ref(last), boost::ref(cv))); ++ libtorrent::thread t4(boost::bind(&check_timer_loop, boost::ref(m), boost::ref(last), boost::ref(cv))); + + test_sleep(100); + +diff --git a/test/udp_tracker.cpp b/test/udp_tracker.cpp +index bb63434..5d5a59f 100644 +--- test/udp_tracker.cpp ++++ test/udp_tracker.cpp +@@ -171,7 +171,7 @@ struct udp_tracker + + fprintf(stderr, "%s: UDP tracker initialized on port %d\n", time_now_string(), m_port); + +- m_thread.reset(new thread(boost::bind(&udp_tracker::thread_fun, this))); ++ m_thread.reset(new libtorrent::thread(boost::bind(&udp_tracker::thread_fun, this))); + } + + void stop() diff --git a/net-p2p/libtorrent-rasterbar/files/patch-include-libtorrent-config.hpp b/net-p2p/libtorrent-rasterbar/files/patch-include-libtorrent-config.hpp index e1ab293b3062..93cd9bfb602e 100644 --- a/net-p2p/libtorrent-rasterbar/files/patch-include-libtorrent-config.hpp +++ b/net-p2p/libtorrent-rasterbar/files/patch-include-libtorrent-config.hpp @@ -1,15 +1,15 @@ ---- include/libtorrent/config.hpp.orig 2014-12-05 01:00:07 UTC +--- include/libtorrent/config.hpp.orig 2016-04-10 21:39:14 UTC +++ include/libtorrent/config.hpp -@@ -166,12 +166,6 @@ POSSIBILITY OF SUCH DAMAGE. - - #endif // __APPLE__ +@@ -180,12 +180,6 @@ POSSIBILITY OF SUCH DAMAGE. + #define TORRENT_USE_EXECINFO 1 + #endif --#else +-#else // __APPLE__ -// FreeBSD has a reasonable iconv signature -// unless we're on glibc -#ifndef __GLIBC__ -# define TORRENT_ICONV_ARG (const char**) -#endif - #endif - #define TORRENT_HAS_FALLOCATE 0 - #define TORRENT_USE_IFADDRS 1 + #endif // __APPLE__ + + #define TORRENT_HAVE_MMAP 1 diff --git a/net-p2p/libtorrent-rasterbar/files/patch-src_lazy__bdecode.cpp b/net-p2p/libtorrent-rasterbar/files/patch-src_lazy__bdecode.cpp deleted file mode 100644 index b9edb7711d93..000000000000 --- a/net-p2p/libtorrent-rasterbar/files/patch-src_lazy__bdecode.cpp +++ /dev/null @@ -1,12 +0,0 @@ ---- src/lazy_bdecode.cpp.orig 2014-12-05 01:00:07 UTC -+++ src/lazy_bdecode.cpp -@@ -30,6 +30,9 @@ POSSIBILITY OF SUCH DAMAGE. - - */ - -+#define __STDC_LIMIT_MACROS -+#include <stdint.h> -+ - #include "libtorrent/config.hpp" - #include "libtorrent/lazy_entry.hpp" - #include <cstring> diff --git a/net-p2p/libtorrent-rasterbar/files/patch-src_utp__stream.cpp b/net-p2p/libtorrent-rasterbar/files/patch-src_utp__stream.cpp deleted file mode 100644 index 661582fb3267..000000000000 --- a/net-p2p/libtorrent-rasterbar/files/patch-src_utp__stream.cpp +++ /dev/null @@ -1,11 +0,0 @@ ---- src/utp_stream.cpp.orig 2014-12-05 01:00:07 UTC -+++ src/utp_stream.cpp -@@ -30,6 +30,8 @@ POSSIBILITY OF SUCH DAMAGE. - - */ - -+#define __STDC_LIMIT_MACROS -+#include <stdint.h> - #include "libtorrent/config.hpp" - #include "libtorrent/utp_stream.hpp" - #include "libtorrent/sliding_average.hpp" diff --git a/net-p2p/libtorrent-rasterbar/pkg-descr b/net-p2p/libtorrent-rasterbar/pkg-descr index 0507e0a054a6..a36034d2a81f 100644 --- a/net-p2p/libtorrent-rasterbar/pkg-descr +++ b/net-p2p/libtorrent-rasterbar/pkg-descr @@ -1,10 +1,10 @@ -libtorrent is a C++ library that aims to be a good alternative to all the -other bittorrent implementations around. It is a library and not a full -featured client, although it comes with a working example client. +libtorrent is an open source C++ library implementing the BitTorrent +protocol, along with most popular extensions, making it suitable for +real world deployment. It is configurable to be able to fit both +servers and embedded devices. + +The main goals of libtorrent are to be efficient and easy to use. -The main goals of libtorrent are to be cpu efficient, memory efficient and -very easy to use. +NB: this is NOT the same library as the net-p2p/libtorrent port! -Note that this is NOT the same library as the libtorrent port! - -WWW: http://www.rasterbar.com/products/libtorrent/ +WWW: http://libtorrent.org/ diff --git a/net-p2p/libtorrent-rasterbar/pkg-plist b/net-p2p/libtorrent-rasterbar/pkg-plist index e60f7315bb14..bf4115eb936e 100644 --- a/net-p2p/libtorrent-rasterbar/pkg-plist +++ b/net-p2p/libtorrent-rasterbar/pkg-plist @@ -2,43 +2,65 @@ include/libtorrent/ConvertUTF.h include/libtorrent/add_torrent_params.hpp include/libtorrent/address.hpp include/libtorrent/alert.hpp -include/libtorrent/alert_dispatcher.hpp include/libtorrent/alert_manager.hpp +include/libtorrent/alert_observer.hpp include/libtorrent/alert_types.hpp include/libtorrent/alloca.hpp include/libtorrent/allocator.hpp +include/libtorrent/announce_entry.hpp include/libtorrent/assert.hpp +include/libtorrent/aux_/alert_manager_variadic_emplace.hpp +include/libtorrent/aux_/allocating_handler.hpp +include/libtorrent/aux_/byteswap.hpp +include/libtorrent/aux_/cpuid.hpp +include/libtorrent/aux_/disable_warnings_pop.hpp +include/libtorrent/aux_/disable_warnings_push.hpp +include/libtorrent/aux_/escape_string.hpp +include/libtorrent/aux_/file_progress.hpp +include/libtorrent/aux_/merkle.hpp +include/libtorrent/aux_/openssl.hpp +include/libtorrent/aux_/proxy_settings.hpp +include/libtorrent/aux_/session_call.hpp include/libtorrent/aux_/session_impl.hpp +include/libtorrent/aux_/session_interface.hpp +include/libtorrent/aux_/session_settings.hpp +include/libtorrent/aux_/time.hpp include/libtorrent/bandwidth_limit.hpp include/libtorrent/bandwidth_manager.hpp include/libtorrent/bandwidth_queue_entry.hpp include/libtorrent/bandwidth_socket.hpp +include/libtorrent/bdecode.hpp include/libtorrent/bencode.hpp include/libtorrent/bitfield.hpp +include/libtorrent/block_cache.hpp include/libtorrent/bloom_filter.hpp include/libtorrent/broadcast_socket.hpp include/libtorrent/bt_peer_connection.hpp include/libtorrent/buffer.hpp include/libtorrent/build_config.hpp include/libtorrent/chained_buffer.hpp +include/libtorrent/choker.hpp +include/libtorrent/close_reason.hpp include/libtorrent/config.hpp -include/libtorrent/connection_queue.hpp include/libtorrent/copy_ptr.hpp +include/libtorrent/crc32c.hpp include/libtorrent/create_torrent.hpp include/libtorrent/deadline_timer.hpp include/libtorrent/debug.hpp include/libtorrent/disk_buffer_holder.hpp include/libtorrent/disk_buffer_pool.hpp +include/libtorrent/disk_interface.hpp +include/libtorrent/disk_io_job.hpp include/libtorrent/disk_io_thread.hpp +include/libtorrent/disk_job_pool.hpp +include/libtorrent/disk_observer.hpp include/libtorrent/ed25519.hpp include/libtorrent/entry.hpp include/libtorrent/enum_net.hpp include/libtorrent/error.hpp include/libtorrent/error_code.hpp -include/libtorrent/escape_string.hpp include/libtorrent/export.hpp include/libtorrent/extensions.hpp -include/libtorrent/extensions/logger.hpp include/libtorrent/extensions/lt_trackers.hpp include/libtorrent/extensions/metadata_transfer.hpp include/libtorrent/extensions/smart_ban.hpp @@ -50,6 +72,8 @@ include/libtorrent/file_storage.hpp include/libtorrent/fingerprint.hpp include/libtorrent/gzip.hpp include/libtorrent/hasher.hpp +include/libtorrent/heterogeneous_queue.hpp +include/libtorrent/hex.hpp include/libtorrent/http_connection.hpp include/libtorrent/http_parser.hpp include/libtorrent/http_seed_connection.hpp @@ -58,7 +82,6 @@ include/libtorrent/http_tracker_connection.hpp include/libtorrent/i2p_stream.hpp include/libtorrent/identify_client.hpp include/libtorrent/instantiate_connection.hpp -include/libtorrent/intrusive_ptr_base.hpp include/libtorrent/invariant_check.hpp include/libtorrent/io.hpp include/libtorrent/io_service.hpp @@ -66,48 +89,69 @@ include/libtorrent/io_service_fwd.hpp include/libtorrent/ip_filter.hpp include/libtorrent/ip_voter.hpp include/libtorrent/kademlia/dht_observer.hpp +include/libtorrent/kademlia/dht_storage.hpp include/libtorrent/kademlia/dht_tracker.hpp +include/libtorrent/kademlia/direct_request.hpp +include/libtorrent/kademlia/dos_blocker.hpp include/libtorrent/kademlia/find_data.hpp include/libtorrent/kademlia/get_item.hpp include/libtorrent/kademlia/get_peers.hpp include/libtorrent/kademlia/item.hpp -include/libtorrent/kademlia/logging.hpp include/libtorrent/kademlia/msg.hpp include/libtorrent/kademlia/node.hpp include/libtorrent/kademlia/node_entry.hpp include/libtorrent/kademlia/node_id.hpp include/libtorrent/kademlia/observer.hpp +include/libtorrent/kademlia/put_data.hpp include/libtorrent/kademlia/refresh.hpp include/libtorrent/kademlia/routing_table.hpp include/libtorrent/kademlia/rpc_manager.hpp include/libtorrent/kademlia/traversal_algorithm.hpp include/libtorrent/lazy_entry.hpp +include/libtorrent/link.hpp +include/libtorrent/linked_list.hpp include/libtorrent/lsd.hpp include/libtorrent/magnet_uri.hpp include/libtorrent/max.hpp include/libtorrent/natpmp.hpp +include/libtorrent/network_thread_pool.hpp +include/libtorrent/operations.hpp include/libtorrent/packet_buffer.hpp include/libtorrent/parse_url.hpp +include/libtorrent/part_file.hpp include/libtorrent/pe_crypto.hpp include/libtorrent/peer.hpp +include/libtorrent/peer_class.hpp +include/libtorrent/peer_class_set.hpp +include/libtorrent/peer_class_type_filter.hpp include/libtorrent/peer_connection.hpp +include/libtorrent/peer_connection_handle.hpp +include/libtorrent/peer_connection_interface.hpp include/libtorrent/peer_id.hpp include/libtorrent/peer_info.hpp +include/libtorrent/peer_list.hpp include/libtorrent/peer_request.hpp +include/libtorrent/performance_counters.hpp include/libtorrent/piece_block_progress.hpp include/libtorrent/piece_picker.hpp -include/libtorrent/policy.hpp +include/libtorrent/platform_util.hpp include/libtorrent/proxy_base.hpp -include/libtorrent/ptime.hpp include/libtorrent/puff.hpp include/libtorrent/random.hpp +include/libtorrent/receive_buffer.hpp +include/libtorrent/request_blocks.hpp +include/libtorrent/resolve_links.hpp +include/libtorrent/resolver.hpp +include/libtorrent/resolver_interface.hpp include/libtorrent/rss.hpp include/libtorrent/session.hpp +include/libtorrent/session_handle.hpp include/libtorrent/session_settings.hpp +include/libtorrent/session_stats.hpp include/libtorrent/session_status.hpp -include/libtorrent/settings.hpp +include/libtorrent/settings_pack.hpp +include/libtorrent/sha1.hpp include/libtorrent/sha1_hash.hpp -include/libtorrent/size_type.hpp include/libtorrent/sliding_average.hpp include/libtorrent/socket.hpp include/libtorrent/socket_io.hpp @@ -115,11 +159,15 @@ include/libtorrent/socket_type.hpp include/libtorrent/socket_type_fwd.hpp include/libtorrent/socks5_stream.hpp include/libtorrent/ssl_stream.hpp +include/libtorrent/stack_allocator.hpp include/libtorrent/stat.hpp +include/libtorrent/stat_cache.hpp include/libtorrent/storage.hpp include/libtorrent/storage_defs.hpp include/libtorrent/string_util.hpp +include/libtorrent/tailqueue.hpp include/libtorrent/thread.hpp +include/libtorrent/thread_pool.hpp include/libtorrent/time.hpp include/libtorrent/timestamp_history.hpp include/libtorrent/tommath.h @@ -128,14 +176,19 @@ include/libtorrent/tommath_superclass.h include/libtorrent/torrent.hpp include/libtorrent/torrent_handle.hpp include/libtorrent/torrent_info.hpp +include/libtorrent/torrent_peer.hpp +include/libtorrent/torrent_peer_allocator.hpp +include/libtorrent/torrent_status.hpp include/libtorrent/tracker_manager.hpp include/libtorrent/udp_socket.hpp include/libtorrent/udp_tracker_connection.hpp +include/libtorrent/uncork_interface.hpp include/libtorrent/union_endpoint.hpp include/libtorrent/upnp.hpp include/libtorrent/utf8.hpp include/libtorrent/utp_socket_manager.hpp include/libtorrent/utp_stream.hpp +include/libtorrent/vector_utils.hpp include/libtorrent/version.hpp include/libtorrent/web_connection_base.hpp include/libtorrent/web_peer_connection.hpp @@ -144,103 +197,3 @@ lib/libtorrent-rasterbar.so lib/libtorrent-rasterbar.so.%%SHLIB_VER%% lib/libtorrent-rasterbar.so.%%SHLIB_VER%%.0.0 libdata/pkgconfig/libtorrent-rasterbar.pc -%%PORTDOCS%%%%DOCSDIR%%/AUTHORS -%%PORTDOCS%%%%DOCSDIR%%/ChangeLog -%%PORTDOCS%%%%DOCSDIR%%/docs/building.html -%%PORTDOCS%%%%DOCSDIR%%/docs/building.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/client_test.html -%%PORTDOCS%%%%DOCSDIR%%/docs/client_test.png -%%PORTDOCS%%%%DOCSDIR%%/docs/client_test.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/complete_bit_prefixes.png -%%PORTDOCS%%%%DOCSDIR%%/docs/contributing.html -%%PORTDOCS%%%%DOCSDIR%%/docs/contributing.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/cwnd.png -%%PORTDOCS%%%%DOCSDIR%%/docs/cwnd_thumb.png -%%PORTDOCS%%%%DOCSDIR%%/docs/delays.png -%%PORTDOCS%%%%DOCSDIR%%/docs/delays_thumb.png -%%PORTDOCS%%%%DOCSDIR%%/docs/dht_extensions.html -%%PORTDOCS%%%%DOCSDIR%%/docs/dht_extensions.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/dht_rss.html -%%PORTDOCS%%%%DOCSDIR%%/docs/dht_rss.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/dht_sec.html -%%PORTDOCS%%%%DOCSDIR%%/docs/dht_sec.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/dht_store.html -%%PORTDOCS%%%%DOCSDIR%%/docs/dht_store.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/disk_access.png -%%PORTDOCS%%%%DOCSDIR%%/docs/disk_access_elevator.png -%%PORTDOCS%%%%DOCSDIR%%/docs/disk_access_no_elevator.png -%%PORTDOCS%%%%DOCSDIR%%/docs/disk_buffer.png -%%PORTDOCS%%%%DOCSDIR%%/docs/disk_buffer_before_optimization.png -%%PORTDOCS%%%%DOCSDIR%%/docs/disk_buffer_sample.png -%%PORTDOCS%%%%DOCSDIR%%/docs/disk_io.png -%%PORTDOCS%%%%DOCSDIR%%/docs/examples.html -%%PORTDOCS%%%%DOCSDIR%%/docs/examples.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/extension_protocol.html -%%PORTDOCS%%%%DOCSDIR%%/docs/extension_protocol.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/features.html -%%PORTDOCS%%%%DOCSDIR%%/docs/features.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/hacking.diagram -%%PORTDOCS%%%%DOCSDIR%%/docs/hacking.html -%%PORTDOCS%%%%DOCSDIR%%/docs/hacking.png -%%PORTDOCS%%%%DOCSDIR%%/docs/hash_distribution.png -%%PORTDOCS%%%%DOCSDIR%%/docs/im_thumb.jpg -%%PORTDOCS%%%%DOCSDIR%%/docs/img/bg.png -%%PORTDOCS%%%%DOCSDIR%%/docs/img/blue_bottom.png -%%PORTDOCS%%%%DOCSDIR%%/docs/img/blue_top.png -%%PORTDOCS%%%%DOCSDIR%%/docs/img/dotline.gif -%%PORTDOCS%%%%DOCSDIR%%/docs/img/minus.gif -%%PORTDOCS%%%%DOCSDIR%%/docs/img/orange.png -%%PORTDOCS%%%%DOCSDIR%%/docs/index.html -%%PORTDOCS%%%%DOCSDIR%%/docs/index.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/ip_id_v4.png -%%PORTDOCS%%%%DOCSDIR%%/docs/ip_id_v6.png -%%PORTDOCS%%%%DOCSDIR%%/docs/manual-ref.html -%%PORTDOCS%%%%DOCSDIR%%/docs/manual-ref.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/merkle_tree.png -%%PORTDOCS%%%%DOCSDIR%%/docs/our_delay_base.png -%%PORTDOCS%%%%DOCSDIR%%/docs/our_delay_base_thumb.png -%%PORTDOCS%%%%DOCSDIR%%/docs/projects.html -%%PORTDOCS%%%%DOCSDIR%%/docs/projects.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/python_binding.html -%%PORTDOCS%%%%DOCSDIR%%/docs/python_binding.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/read_disk_buffers.diagram -%%PORTDOCS%%%%DOCSDIR%%/docs/read_disk_buffers.png -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Alerts.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Bencoding.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Core.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Create_Torrents.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Custom_Storage.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Error_Codes.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Filter.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Plugins.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-RSS.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Session.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Settings.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Storage.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-String.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Time.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference-Utility.html -%%PORTDOCS%%%%DOCSDIR%%/docs/reference.html -%%PORTDOCS%%%%DOCSDIR%%/docs/rst.css -%%PORTDOCS%%%%DOCSDIR%%/docs/session_stats_peers.png -%%PORTDOCS%%%%DOCSDIR%%/docs/storage.png -%%PORTDOCS%%%%DOCSDIR%%/docs/streaming.html -%%PORTDOCS%%%%DOCSDIR%%/docs/streaming.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/style.css -%%PORTDOCS%%%%DOCSDIR%%/docs/todo.html -%%PORTDOCS%%%%DOCSDIR%%/docs/troubleshooting.dot -%%PORTDOCS%%%%DOCSDIR%%/docs/troubleshooting.html -%%PORTDOCS%%%%DOCSDIR%%/docs/troubleshooting.png -%%PORTDOCS%%%%DOCSDIR%%/docs/troubleshooting.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/troubleshooting_thumb.png -%%PORTDOCS%%%%DOCSDIR%%/docs/tuning.html -%%PORTDOCS%%%%DOCSDIR%%/docs/tuning.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/udp_tracker_protocol.html -%%PORTDOCS%%%%DOCSDIR%%/docs/udp_tracker_protocol.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/utp.html -%%PORTDOCS%%%%DOCSDIR%%/docs/utp.rst -%%PORTDOCS%%%%DOCSDIR%%/docs/utp_stack.diagram -%%PORTDOCS%%%%DOCSDIR%%/docs/utp_stack.png -%%PORTDOCS%%%%DOCSDIR%%/docs/write_disk_buffers.diagram -%%PORTDOCS%%%%DOCSDIR%%/docs/write_disk_buffers.png -%%PORTDOCS%%%%DOCSDIR%%/docs/ziptorrent_thumb.gif |