merged changes from RC_1_0

This commit is contained in:
Arvid Norberg 2014-11-19 09:23:08 +00:00
parent edfa38cd30
commit 3f61ee0ff3
10 changed files with 122 additions and 28 deletions

View File

@ -152,7 +152,6 @@ option(exceptions "build with exception support" ON)
option(logging "build with logging" OFF) option(logging "build with logging" OFF)
option(verbose-logging "build with verbose logging" OFF) option(verbose-logging "build with verbose logging" OFF)
option(build_tests "build tests" OFF) option(build_tests "build tests" OFF)
option(build_examples "build examples" ON)
set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo) set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo)
@ -311,6 +310,10 @@ add_definitions(-D_FILE_OFFSET_BITS=64)
add_definitions(-DBOOST_EXCEPTION_DISABLE) add_definitions(-DBOOST_EXCEPTION_DISABLE)
add_definitions(-DBOOST_ASIO_ENABLE_CANCELIO) add_definitions(-DBOOST_ASIO_ENABLE_CANCELIO)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_definitions(-fcolor-diagnostics)
endif()
if (tcmalloc) if (tcmalloc)
target_link_libraries(torrent-rasterbar tcmalloc) target_link_libraries(torrent-rasterbar tcmalloc)
endif() endif()
@ -342,16 +345,10 @@ install(DIRECTORY include/libtorrent
PATTERN ".svn" EXCLUDE) PATTERN ".svn" EXCLUDE)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar.pc DESTINATION ${LIBDIR}/pkgconfig) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtorrent-rasterbar.pc DESTINATION ${LIBDIR}/pkgconfig)
# === build examples === # === set up examples directory as an independent project ===
if(build_examples) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples)
# this will make some internal functions available in the configure_file(examples/run_cmake.sh.in examples/run_cmake.sh)
# DLL interface, for the examples to access # to build the examples, run examples/run_cmake.sh after building libtorrent
add_definitions(-DTORRENT_EXPORT_EXTRA)
# to build the examples, run cmake in this subdirectory
# after libtorrent is built
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples)
endif()
# === build tests === # === build tests ===
if(build_tests) if(build_tests)

View File

@ -229,8 +229,7 @@ def main():
if f.startswith('magnet:') or f.startswith('http://') or f.startswith('https://'): if f.startswith('magnet:') or f.startswith('http://') or f.startswith('https://'):
atp["url"] = f atp["url"] = f
else: else:
e = lt.bdecode(open(f, 'rb').read()) info = lt.torrent_info(f)
info = lt.torrent_info(e)
print('Adding \'%s\'...' % info.name()) print('Adding \'%s\'...' % info.name())
try: try:

View File

@ -1 +1 @@
@COMPILETIME_OPTIONS@ @CPPFLAGS@ @LIBS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@ @OPENSSL_INCLUDES@ -I@top_srcdir@/include @COMPILETIME_OPTIONS@ @CPPFLAGS@ @LIBS@ @BOOST_CPPFLAGS@ @BOOST_SYSTEM_LIB@ @BOOST_PYTHON_LIB@ @PTHREAD_LIBS@ @OPENSSL_LIBS@ @OPENSSL_LDFLAGS@ @OPENSSL_INCLUDES@ -I@top_srcdir@/include

View File

@ -1 +1 @@
-L@top_builddir@/src/.libs @LDFLAGS@ -L@top_builddir@/src/.libs @BOOST_LDFLAGS@ @LDFLAGS@

View File

@ -177,6 +177,26 @@ namespace
} // namespace unnamed } // namespace unnamed
boost::intrusive_ptr<torrent_info> buffer_constructor(char const* buf, int len, int flags)
{
error_code ec;
boost::intrusive_ptr<torrent_info> ret(new torrent_info(buf, len, ec, flags));
#ifndef BOOST_NO_EXCEPTIONS
if (ec) throw libtorrent_exception(ec);
#endif
return ret;
}
boost::intrusive_ptr<torrent_info> file_constructor(std::string const& filename, int flags)
{
error_code ec;
boost::intrusive_ptr<torrent_info> ret(new torrent_info(filename, ec, flags));
#ifndef BOOST_NO_EXCEPTIONS
if (ec) throw libtorrent_exception(ec);
#endif
return ret;
}
void bind_torrent_info() void bind_torrent_info()
{ {
return_value_policy<copy_const_reference> copy; return_value_policy<copy_const_reference> copy;
@ -196,10 +216,12 @@ void bind_torrent_info()
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
.def(init<entry const&>(arg("e"))) .def(init<entry const&>(arg("e")))
#endif #endif
.def(init<sha1_hash const&, int>((arg("info_hash"), arg("flags") = 0))) .def(init<sha1_hash const&, int>((arg("info_hash"), arg("flags") = 0)))
.def(init<char const*, int, int>((arg("buffer"), arg("length"), arg("flags") = 0))) .def("__init__", make_constructor(&buffer_constructor))
.def(init<std::string, int>((arg("file"), arg("flags") = 0))) .def("__init__", make_constructor(&file_constructor))
.def(init<torrent_info const&>((arg("ti")))) .def(init<torrent_info const&>((arg("ti"))))
#if TORRENT_USE_WSTRING && !defined TORRENT_NO_DEPRECATE #if TORRENT_USE_WSTRING && !defined TORRENT_NO_DEPRECATE
.def(init<std::wstring, int>((arg("file"), arg("flags") = 0))) .def(init<std::wstring, int>((arg("file"), arg("flags") = 0)))
#endif #endif

View File

@ -13,7 +13,7 @@ bin_PROGRAMS = $(example_programs)
endif endif
EXTRA_PROGRAMS = $(example_programs) EXTRA_PROGRAMS = $(example_programs)
EXTRA_DIST = Jamfile CMakeLists.txt cmake/FindLibtorrentRasterbar.cmake EXTRA_DIST = Jamfile CMakeLists.txt run_cmake.sh.in cmake/FindLibtorrentRasterbar.cmake
client_test_SOURCES = client_test.cpp print.cpp session_view.cpp torrent_view.cpp client_test_SOURCES = client_test.cpp print.cpp session_view.cpp torrent_view.cpp
#client_test_LDADD = $(top_builddir)/src/libtorrent-rasterbar.la #client_test_LDADD = $(top_builddir)/src/libtorrent-rasterbar.la

View File

@ -34,6 +34,10 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/config.hpp" #include "libtorrent/config.hpp"
#ifdef TORRENT_WINDOWS
#include <direct.h> // for _mkdir
#endif
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(push, 1) #pragma warning(push, 1)
#endif #endif
@ -634,8 +638,8 @@ std::vector<std::string> list_dir(std::string path
{ {
std::vector<std::string> ret; std::vector<std::string> ret;
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
if (!f.empty() && f[f.size()-1] != '\\') f += "\\*"; if (!path.empty() && path[path.size()-1] != '\\') path += "\\*";
else f += "*"; else path += "*";
std::wstring wpath; std::wstring wpath;
libtorrent::utf8_wchar(path, wpath); libtorrent::utf8_wchar(path, wpath);
@ -822,24 +826,36 @@ bool handle_alert(libtorrent::session& ses, libtorrent::alert* a
if (torrent_need_cert_alert* p = alert_cast<torrent_need_cert_alert>(a)) if (torrent_need_cert_alert* p = alert_cast<torrent_need_cert_alert>(a))
{ {
torrent_handle h = p->handle; torrent_handle h = p->handle;
error_code ec;
file_status st;
std::string base_name = path_append("certificates", to_hex(h.info_hash().to_string())); std::string base_name = path_append("certificates", to_hex(h.info_hash().to_string()));
std::string cert = base_name + ".pem"; std::string cert = base_name + ".pem";
std::string priv = base_name + "_key.pem"; std::string priv = base_name + "_key.pem";
stat_file(cert, &st, ec);
if (ec) #ifdef TORRENT_WINDOWS
struct ::_stat st;
int ret = ::_stat(cert.c_str(), &st);
if (ret < 0 || (st.st_mode & _S_IFREG) == 0)
#else
struct ::stat st;
int ret = ::stat(cert.c_str(), &st);
if (ret < 0 || (st.st_mode & S_IFREG) == 0)
#endif
{ {
char msg[256]; char msg[256];
snprintf(msg, sizeof(msg), "ERROR. could not load certificate %s: %s\n", cert.c_str(), ec.message().c_str()); snprintf(msg, sizeof(msg), "ERROR. could not load certificate %s: %s\n", cert.c_str(), strerror(errno));
if (g_log_file) fprintf(g_log_file, "[%s] %s\n", timestamp(), msg); if (g_log_file) fprintf(g_log_file, "[%s] %s\n", timestamp(), msg);
return true; return true;
} }
stat_file(priv, &st, ec);
if (ec) #ifdef TORRENT_WINDOWS
ret = ::_stat(priv.c_str(), &st);
if (ret < 0 || (st.st_mode & _S_IFREG) == 0)
#else
ret = ::stat(priv.c_str(), &st);
if (ret < 0 || (st.st_mode & S_IFREG) == 0)
#endif
{ {
char msg[256]; char msg[256];
snprintf(msg, sizeof(msg), "ERROR. could not load private key %s: %s\n", priv.c_str(), ec.message().c_str()); snprintf(msg, sizeof(msg), "ERROR. could not load private key %s: %s\n", priv.c_str(), strerror(errno));
if (g_log_file) fprintf(g_log_file, "[%s] %s\n", timestamp(), msg); if (g_log_file) fprintf(g_log_file, "[%s] %s\n", timestamp(), msg);
return true; return true;
} }
@ -1408,7 +1424,11 @@ int main(int argc, char* argv[])
} }
// create directory for resume files // create directory for resume files
#ifdef TORRENT_WINDOWS
int ret = _mkdir(path_append(save_path, ".resume").c_str());
#else
int ret = mkdir(path_append(save_path, ".resume").c_str(), 0777); int ret = mkdir(path_append(save_path, ".resume").c_str(), 0777);
#endif
if (ret < 0) if (ret < 0)
fprintf(stderr, "failed to create resume file directory: (%d) %s\n" fprintf(stderr, "failed to create resume file directory: (%d) %s\n"
, errno, strerror(errno)); , errno, strerror(errno));

8
examples/run_cmake.sh.in Normal file
View File

@ -0,0 +1,8 @@
#!/bin/sh
cd ${libtorrent_BINARY_DIR}/examples
cmake \
-D libtorrent_includes_asio_source=${asio_source} \
-G "${CMAKE_GENERATOR}" \
$@ \
${libtorrent_SOURCE_DIR}/examples

View File

@ -109,7 +109,11 @@ std::vector<char> generate_resume_data(torrent_info* ti)
entry::list_type& httpseeds = rd["httpseeds"].list(); entry::list_type& httpseeds = rd["httpseeds"].list();
httpseeds.push_back(entry("http://resume_data_http_seed.com")); httpseeds.push_back(entry("http://resume_data_http_seed.com"));
#ifdef TORRENT_WINDOWS
rd["save_path"] = "c:\\resume_data save_path";
#else
rd["save_path"] = "/resume_data save_path"; rd["save_path"] = "/resume_data save_path";
#endif
std::vector<char> ret; std::vector<char> ret;
bencode(back_inserter(ret), rd); bencode(back_inserter(ret), rd);
@ -127,7 +131,11 @@ torrent_status test_resume_flags(int flags)
p.ti = ti; p.ti = ti;
p.flags = flags; p.flags = flags;
#ifdef TORRENT_WINDOWS
p.save_path = "c:\\add_torrent_params save_path";
#else
p.save_path = "/add_torrent_params save_path"; p.save_path = "/add_torrent_params save_path";
#endif
p.trackers.push_back("http://add_torrent_params_tracker.com/announce"); p.trackers.push_back("http://add_torrent_params_tracker.com/announce");
p.url_seeds.push_back("http://add_torrent_params_url_seed.com"); p.url_seeds.push_back("http://add_torrent_params_url_seed.com");
@ -165,7 +173,11 @@ int test_main()
fprintf(stderr, "flags: 0\n"); fprintf(stderr, "flags: 0\n");
s = test_resume_flags(0); s = test_resume_flags(0);
default_tests(s); default_tests(s);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(s.save_path, "c:\\add_torrent_params save_path");
#else
TEST_EQUAL(s.save_path, "/add_torrent_params save_path"); TEST_EQUAL(s.save_path, "/add_torrent_params save_path");
#endif
TEST_EQUAL(s.sequential_download, false); TEST_EQUAL(s.sequential_download, false);
TEST_EQUAL(s.paused, false); TEST_EQUAL(s.paused, false);
TEST_EQUAL(s.auto_managed, false); TEST_EQUAL(s.auto_managed, false);
@ -180,7 +192,11 @@ int test_main()
fprintf(stderr, "flags: use_resume_save_path\n"); fprintf(stderr, "flags: use_resume_save_path\n");
s = test_resume_flags(add_torrent_params::flag_use_resume_save_path); s = test_resume_flags(add_torrent_params::flag_use_resume_save_path);
default_tests(s); default_tests(s);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(s.save_path, "c:\\resume_data save_path");
#else
TEST_EQUAL(s.save_path, "/resume_data save_path"); TEST_EQUAL(s.save_path, "/resume_data save_path");
#endif
TEST_EQUAL(s.sequential_download, false); TEST_EQUAL(s.sequential_download, false);
TEST_EQUAL(s.paused, false); TEST_EQUAL(s.paused, false);
TEST_EQUAL(s.auto_managed, false); TEST_EQUAL(s.auto_managed, false);
@ -197,7 +213,11 @@ int test_main()
| add_torrent_params::flag_paused); | add_torrent_params::flag_paused);
default_tests(s); default_tests(s);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(s.save_path, "c:\\add_torrent_params save_path");
#else
TEST_EQUAL(s.save_path, "/add_torrent_params save_path"); TEST_EQUAL(s.save_path, "/add_torrent_params save_path");
#endif
TEST_EQUAL(s.sequential_download, false); TEST_EQUAL(s.sequential_download, false);
TEST_EQUAL(s.paused, true); TEST_EQUAL(s.paused, true);
TEST_EQUAL(s.auto_managed, false); TEST_EQUAL(s.auto_managed, false);
@ -213,7 +233,11 @@ int test_main()
s = test_resume_flags(add_torrent_params::flag_override_resume_data s = test_resume_flags(add_torrent_params::flag_override_resume_data
| add_torrent_params::flag_seed_mode); | add_torrent_params::flag_seed_mode);
default_tests(s); default_tests(s);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(s.save_path, "c:\\add_torrent_params save_path");
#else
TEST_EQUAL(s.save_path, "/add_torrent_params save_path"); TEST_EQUAL(s.save_path, "/add_torrent_params save_path");
#endif
TEST_EQUAL(s.sequential_download, false); TEST_EQUAL(s.sequential_download, false);
TEST_EQUAL(s.paused, false); TEST_EQUAL(s.paused, false);
TEST_EQUAL(s.auto_managed, false); TEST_EQUAL(s.auto_managed, false);
@ -228,7 +252,11 @@ int test_main()
fprintf(stderr, "flags: upload_mode\n"); fprintf(stderr, "flags: upload_mode\n");
s = test_resume_flags(add_torrent_params::flag_upload_mode); s = test_resume_flags(add_torrent_params::flag_upload_mode);
default_tests(s); default_tests(s);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(s.save_path, "c:\\add_torrent_params save_path");
#else
TEST_EQUAL(s.save_path, "/add_torrent_params save_path"); TEST_EQUAL(s.save_path, "/add_torrent_params save_path");
#endif
TEST_EQUAL(s.sequential_download, false); TEST_EQUAL(s.sequential_download, false);
TEST_EQUAL(s.paused, false); TEST_EQUAL(s.paused, false);
TEST_EQUAL(s.auto_managed, false); TEST_EQUAL(s.auto_managed, false);
@ -244,7 +272,11 @@ int test_main()
s = test_resume_flags(add_torrent_params::flag_override_resume_data s = test_resume_flags(add_torrent_params::flag_override_resume_data
| add_torrent_params::flag_share_mode); | add_torrent_params::flag_share_mode);
default_tests(s); default_tests(s);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(s.save_path, "c:\\add_torrent_params save_path");
#else
TEST_EQUAL(s.save_path, "/add_torrent_params save_path"); TEST_EQUAL(s.save_path, "/add_torrent_params save_path");
#endif
TEST_EQUAL(s.sequential_download, false); TEST_EQUAL(s.sequential_download, false);
TEST_EQUAL(s.paused, false); TEST_EQUAL(s.paused, false);
TEST_EQUAL(s.auto_managed, false); TEST_EQUAL(s.auto_managed, false);
@ -260,7 +292,11 @@ int test_main()
fprintf(stderr, "flags: auto_managed\n"); fprintf(stderr, "flags: auto_managed\n");
s = test_resume_flags(add_torrent_params::flag_auto_managed); s = test_resume_flags(add_torrent_params::flag_auto_managed);
default_tests(s); default_tests(s);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(s.save_path, "c:\\add_torrent_params save_path");
#else
TEST_EQUAL(s.save_path, "/add_torrent_params save_path"); TEST_EQUAL(s.save_path, "/add_torrent_params save_path");
#endif
TEST_EQUAL(s.sequential_download, false); TEST_EQUAL(s.sequential_download, false);
TEST_EQUAL(s.paused, false); TEST_EQUAL(s.paused, false);
TEST_EQUAL(s.auto_managed, false); TEST_EQUAL(s.auto_managed, false);
@ -276,7 +312,11 @@ int test_main()
fprintf(stderr, "flags: paused\n"); fprintf(stderr, "flags: paused\n");
s = test_resume_flags(add_torrent_params::flag_paused); s = test_resume_flags(add_torrent_params::flag_paused);
default_tests(s); default_tests(s);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(s.save_path, "c:\\add_torrent_params save_path");
#else
TEST_EQUAL(s.save_path, "/add_torrent_params save_path"); TEST_EQUAL(s.save_path, "/add_torrent_params save_path");
#endif
TEST_EQUAL(s.sequential_download, false); TEST_EQUAL(s.sequential_download, false);
TEST_EQUAL(s.paused, false); TEST_EQUAL(s.paused, false);
TEST_EQUAL(s.auto_managed, false); TEST_EQUAL(s.auto_managed, false);

View File

@ -439,12 +439,20 @@ int test_main()
else if (std::string(test_torrents[i].file) == "slash_path.torrent") else if (std::string(test_torrents[i].file) == "slash_path.torrent")
{ {
TEST_EQUAL(ti->num_files(), 1); TEST_EQUAL(ti->num_files(), 1);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(ti->file_at(0).path, "temp\\bar");
#else
TEST_EQUAL(ti->file_at(0).path, "temp/bar"); TEST_EQUAL(ti->file_at(0).path, "temp/bar");
#endif
} }
else if (std::string(test_torrents[i].file) == "slash_path2.torrent") else if (std::string(test_torrents[i].file) == "slash_path2.torrent")
{ {
TEST_EQUAL(ti->num_files(), 1); TEST_EQUAL(ti->num_files(), 1);
#ifdef TORRENT_WINDOWS
TEST_EQUAL(ti->file_at(0).path, "temp\\abc....def\\bar");
#else
TEST_EQUAL(ti->file_at(0).path, "temp/abc....def/bar"); TEST_EQUAL(ti->file_at(0).path, "temp/abc....def/bar");
#endif
} }
else if (std::string(test_torrents[i].file) == "slash_path3.torrent") else if (std::string(test_torrents[i].file) == "slash_path3.torrent")
{ {