Made the Jamfile to work with boost-build.

updated documentation to reflect the new (working) Jamfile.
This commit is contained in:
Arvid Norberg 2004-02-22 22:40:45 +00:00
parent f656b34d63
commit 9a2fc89eae
12 changed files with 167 additions and 130 deletions

37
Jamfile
View File

@ -12,28 +12,30 @@ use-project /boost/date_time : $(BOOST_ROOT)/libs/date_time/build ;
project torrent project torrent
: requirements : requirements
<use>/boost/thread
<use>/boost/date_time <use>/boost/thread
<use>/boost/filesystem <use>/boost/date_time
<use>/boost/filesystem
<library>/boost/thread <library>/boost/thread
<library>/boost/date_time <library>/boost/date_time
<library>/boost/filesystem <library>/boost/filesystem
: usage-requirements : usage-requirements
<include>./include <include>./include
<include>$(BOOST_ROOT) <include>$(BOOST_ROOT)
<variant>release:<define>NDEBUG
# devstudio switches # devstudio switches
<toolset>msvc-7:<cxxflags>/Zc:wchar_t <toolset>msvc-7:<cxxflags>/Zc:wchar_t
<toolset>msvc-7.1:<cxxflags>/Zc:wchar_t <toolset>msvc-7.1:<cxxflags>/Zc:wchar_t
<toolset>msvc:<define>WIN32 <toolset>msvc:<define>WIN32
# gcc switches # gcc switches
<toolset>gcc:<cxxflags>-Wno-unused-variable <toolset>gcc:<cxxflags>-Wno-unused-variable
; ;
@ -82,11 +84,12 @@ SOURCES =
lib torrent lib torrent
: :
zlib//zlib zlib//zlib
src/$(SOURCES) src/$(SOURCES)
: <include>./include :
<threading>multi <include>./include
<link>static <threading>multi
<link>static
: debug release : debug release
; ;

View File

@ -13,63 +13,63 @@
<div class="contents topic" id="contents"> <div class="contents topic" id="contents">
<p class="topic-title"><a name="contents">Contents</a></p> <p class="topic-title"><a name="contents">Contents</a></p>
<ul class="simple"> <ul class="simple">
<li><a class="reference" href="#introduction" id="id10" name="id10">introduction</a></li> <li><a class="reference" href="#introduction" id="id12" name="id12">introduction</a></li>
<li><a class="reference" href="#building" id="id11" name="id11">building</a><ul> <li><a class="reference" href="#building" id="id13" name="id13">building</a><ul>
<li><a class="reference" href="#release-and-debug-builds" id="id12" name="id12">release and debug builds</a></li> <li><a class="reference" href="#release-and-debug-builds" id="id14" name="id14">release and debug builds</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference" href="#using" id="id13" name="id13">using</a></li> <li><a class="reference" href="#using" id="id15" name="id15">using</a></li>
<li><a class="reference" href="#session" id="id14" name="id14">session</a></li> <li><a class="reference" href="#session" id="id16" name="id16">session</a></li>
<li><a class="reference" href="#parsing-torrent-files" id="id15" name="id15">parsing torrent files</a></li> <li><a class="reference" href="#parsing-torrent-files" id="id17" name="id17">parsing torrent files</a></li>
<li><a class="reference" href="#entry" id="id16" name="id16">entry</a></li> <li><a class="reference" href="#entry" id="id18" name="id18">entry</a></li>
<li><a class="reference" href="#torrent-info" id="id17" name="id17">torrent_info</a></li> <li><a class="reference" href="#torrent-info" id="id19" name="id19">torrent_info</a></li>
<li><a class="reference" href="#torrent-handle" id="id18" name="id18">torrent_handle</a><ul> <li><a class="reference" href="#torrent-handle" id="id20" name="id20">torrent_handle</a><ul>
<li><a class="reference" href="#status" id="id19" name="id19">status()</a></li> <li><a class="reference" href="#status" id="id21" name="id21">status()</a></li>
<li><a class="reference" href="#get-download-queue" id="id20" name="id20">get_download_queue()</a></li> <li><a class="reference" href="#get-download-queue" id="id22" name="id22">get_download_queue()</a></li>
<li><a class="reference" href="#get-peer-info" id="id21" name="id21">get_peer_info()</a></li> <li><a class="reference" href="#get-peer-info" id="id23" name="id23">get_peer_info()</a></li>
<li><a class="reference" href="#get-torrent-info" id="id22" name="id22">get_torrent_info()</a></li> <li><a class="reference" href="#get-torrent-info" id="id24" name="id24">get_torrent_info()</a></li>
<li><a class="reference" href="#is-valid" id="id23" name="id23">is_valid()</a></li> <li><a class="reference" href="#is-valid" id="id25" name="id25">is_valid()</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference" href="#address" id="id24" name="id24">address</a></li> <li><a class="reference" href="#address" id="id26" name="id26">address</a></li>
<li><a class="reference" href="#http-settings" id="id25" name="id25">http_settings</a></li> <li><a class="reference" href="#http-settings" id="id27" name="id27">http_settings</a></li>
<li><a class="reference" href="#big-number" id="id26" name="id26">big_number</a></li> <li><a class="reference" href="#big-number" id="id28" name="id28">big_number</a></li>
<li><a class="reference" href="#hasher" id="id27" name="id27">hasher</a></li> <li><a class="reference" href="#hasher" id="id29" name="id29">hasher</a></li>
<li><a class="reference" href="#fingerprint" id="id28" name="id28">fingerprint</a><ul> <li><a class="reference" href="#fingerprint" id="id30" name="id30">fingerprint</a><ul>
<li><a class="reference" href="#identify-client" id="id29" name="id29">identify_client</a></li> <li><a class="reference" href="#identify-client" id="id31" name="id31">identify_client</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference" href="#alerts" id="id30" name="id30">alerts</a><ul> <li><a class="reference" href="#alerts" id="id32" name="id32">alerts</a><ul>
<li><a class="reference" href="#listen-failed-alert" id="id31" name="id31">listen_failed_alert</a></li> <li><a class="reference" href="#listen-failed-alert" id="id33" name="id33">listen_failed_alert</a></li>
<li><a class="reference" href="#file-error-alert" id="id32" name="id32">file_error_alert</a></li> <li><a class="reference" href="#file-error-alert" id="id34" name="id34">file_error_alert</a></li>
<li><a class="reference" href="#tracker-alert" id="id33" name="id33">tracker_alert</a></li> <li><a class="reference" href="#tracker-alert" id="id35" name="id35">tracker_alert</a></li>
<li><a class="reference" href="#hash-failed-alert" id="id34" name="id34">hash_failed_alert</a></li> <li><a class="reference" href="#hash-failed-alert" id="id36" name="id36">hash_failed_alert</a></li>
<li><a class="reference" href="#peer-error-alert" id="id35" name="id35">peer_error_alert</a></li> <li><a class="reference" href="#peer-error-alert" id="id37" name="id37">peer_error_alert</a></li>
<li><a class="reference" href="#invalid-request-alert" id="id36" name="id36">invalid_request_alert</a></li> <li><a class="reference" href="#invalid-request-alert" id="id38" name="id38">invalid_request_alert</a></li>
<li><a class="reference" href="#torrent-finished-alert" id="id37" name="id37">torrent_finished_alert</a></li> <li><a class="reference" href="#torrent-finished-alert" id="id39" name="id39">torrent_finished_alert</a></li>
<li><a class="reference" href="#dispatcher" id="id38" name="id38">dispatcher</a></li> <li><a class="reference" href="#dispatcher" id="id40" name="id40">dispatcher</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference" href="#exceptions" id="id39" name="id39">exceptions</a><ul> <li><a class="reference" href="#exceptions" id="id41" name="id41">exceptions</a><ul>
<li><a class="reference" href="#invalid-handle" id="id40" name="id40">invalid_handle</a></li> <li><a class="reference" href="#invalid-handle" id="id42" name="id42">invalid_handle</a></li>
<li><a class="reference" href="#duplicate-torrent" id="id41" name="id41">duplicate_torrent</a></li> <li><a class="reference" href="#duplicate-torrent" id="id43" name="id43">duplicate_torrent</a></li>
<li><a class="reference" href="#invalid-encoding" id="id42" name="id42">invalid_encoding</a></li> <li><a class="reference" href="#invalid-encoding" id="id44" name="id44">invalid_encoding</a></li>
<li><a class="reference" href="#type-error" id="id43" name="id43">type_error</a></li> <li><a class="reference" href="#type-error" id="id45" name="id45">type_error</a></li>
<li><a class="reference" href="#invalid-torrent-file" id="id44" name="id44">invalid_torrent_file</a></li> <li><a class="reference" href="#invalid-torrent-file" id="id46" name="id46">invalid_torrent_file</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference" href="#examples" id="id45" name="id45">examples</a><ul> <li><a class="reference" href="#examples" id="id47" name="id47">examples</a><ul>
<li><a class="reference" href="#dump-torrent" id="id46" name="id46">dump_torrent</a></li> <li><a class="reference" href="#dump-torrent" id="id48" name="id48">dump_torrent</a></li>
<li><a class="reference" href="#simple-client" id="id47" name="id47">simple client</a></li> <li><a class="reference" href="#simple-client" id="id49" name="id49">simple client</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference" href="#fast-resume" id="id48" name="id48">fast resume</a><ul> <li><a class="reference" href="#fast-resume" id="id50" name="id50">fast resume</a><ul>
<li><a class="reference" href="#file-format" id="id49" name="id49">file format</a></li> <li><a class="reference" href="#file-format" id="id51" name="id51">file format</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference" href="#extensions" id="id50" name="id50">extensions</a></li> <li><a class="reference" href="#extensions" id="id52" name="id52">extensions</a></li>
<li><a class="reference" href="#filenames-checks" id="id51" name="id51">filenames checks</a></li> <li><a class="reference" href="#filenames-checks" id="id53" name="id53">filenames checks</a></li>
<li><a class="reference" href="#aknowledgements" id="id52" name="id52">aknowledgements</a></li> <li><a class="reference" href="#aknowledgements" id="id54" name="id54">aknowledgements</a></li>
</ul> </ul>
</div> </div>
<div class="section" id="introduction"> <div class="section" id="introduction">
@ -148,36 +148,22 @@ boost.filesystem, boost.date_time and various other boost libraries as well as z
</div> </div>
<div class="section" id="building"> <div class="section" id="building">
<h1><a name="building">building</a></h1> <h1><a name="building">building</a></h1>
<p>To build libtorrent you need <a class="reference" href="http://www.boost.org">boost</a> and bjam installed. <p>The easiest way to build libtorrent is probably to use <a class="reference" href="http://sourceforge.net/project/showfiles.php?group_id=7586&amp;package_id=80982">boost-build</a>. Make sure you install it
Then you can use <tt class="literal"><span class="pre">bjam</span></tt> to build libtorrent.</p> correctly by setting the environment variable <tt class="literal"><span class="pre">BOOST_BUILD_PATH</span></tt> and modifying the
<!-- http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=80982 --> <tt class="literal"><span class="pre">user_config.jam</span></tt> to reflect the toolsets you have installed.</p>
<p>To make bjam work, you need to set the environment variable <tt class="literal"><span class="pre">BOOST_ROOT</span></tt> to the <p>You also need to install <a class="reference" href="http://sourceforge.net/project/showfiles.php?group_id=7586&amp;package_id=8041&amp;release_id=214915">boost 1.31.0</a>.</p>
path where boost is installed (e.g. c:\boost_1_30_2 on windows). Then you can just run <p>Before you invoke <tt class="literal"><span class="pre">bjam</span></tt> you have to set the environment variable <tt class="literal"><span class="pre">BOOST_ROOT</span></tt> to the
<tt class="literal"><span class="pre">bjam</span></tt> in the libtorrent directory.</p> path where you installed boost. This will be used to build and link against the required
<p>The Jamfile doesn't work yet. On unix-systems you can use the makefile however. You boost libraries as well as be used as include path for boost headers.</p>
first have to build boost.thread and boost.filesystem. You do this by, in the directory <p>To build you just have to run:</p>
'boost-1.30.2/tools/build/jam_src' run the build script <tt class="literal"><span class="pre">./build.sh</span></tt>. This should
produce at least one folder with the 'bin' prefix (and the rest of the name describes
your platform). Put the files in that folder somewhere in your path.</p>
<p>You can then invoke <tt class="literal"><span class="pre">bjam</span></tt> in the directories 'boost-1.30.2/libs/thread/build',
'boost-1.30.2/libs/date_time/build' and 'boost-1.30.2/libs/filesystem/build'. That will
produce the needed libraries. Put these libraries in the libtorrent root directory.
You then have to modify the makefile to use you prefered compiler and to have the
correct path to your boost istallation.</p>
<p>Then the makefile should be able to do the rest.</p>
<p>When building (with boost 1.30.2) on linux and solaris however, I found that I had to make the following
modifications to the boost.date-time library. In the file:
'boost-1.30.2/boost/date_time/gregorian_calendar.hpp' line 59. Prepend 'boost/date_time/'
to the include path.</p>
<p>And the second modification was in the file:
'boost-1.30.2/boost/date_time/microsec_time_clock.hpp' add the following include at the top
of the file:</p>
<pre class="literal-block"> <pre class="literal-block">
#include &quot;boost/cstdint.hpp&quot; bjam &lt;toolset&gt;
</pre> </pre>
<p>In developer studio, you may have to set the compiler options &quot;force conformance in for <p>in the libtorrent directory.</p>
loop scope&quot; and &quot;treat wchar_t as built-in type&quot; to Yes.</p> <p>If you're building in developer studio, you may have to set the compiler options
<p>TODO: more detailed build instructions.</p> &quot;force conformance in for loop scope&quot; and &quot;treat wchar_t as built-in type&quot; to Yes.</p>
<p>If you're building in developer studio 6, you will probably have to use the previous
version of boost, <a class="reference" href="http://sourceforge.net/project/showfiles.php?group_id=7586&amp;package_id=8041&amp;release_id=178835">boost 1.30.2</a>.</p>
<div class="section" id="release-and-debug-builds"> <div class="section" id="release-and-debug-builds">
<h2><a name="release-and-debug-builds">release and debug builds</a></h2> <h2><a name="release-and-debug-builds">release and debug builds</a></h2>
<p>If you just invoke the makefile you'll get a debug build. In debug the libtorrent vill <p>If you just invoke the makefile you'll get a debug build. In debug the libtorrent vill
@ -536,6 +522,8 @@ struct torrent_handle
void connect_peer(const address&amp; adr) const; void connect_peer(const address&amp; adr) const;
void set_ratio(float ratio); void set_ratio(float ratio);
void set_tracker_login(std::string const&amp; username, std::string const&amp; password);
boost::filsystem::path save_path() const; boost::filsystem::path save_path() const;
void set_max_uploads(int max_uploads); void set_max_uploads(int max_uploads);
@ -564,10 +552,12 @@ will throw <a class="reference" href="#invalid-handle">invalid_handle</a>.</p>
<p><tt class="literal"><span class="pre">set_ratio()</span></tt> sets the desired download / upload ratio. If set to 0, it is considered being <p><tt class="literal"><span class="pre">set_ratio()</span></tt> sets the desired download / upload ratio. If set to 0, it is considered being
infinite. i.e. the client will always upload as much as it can, no matter how much it gets back infinite. i.e. the client will always upload as much as it can, no matter how much it gets back
in return. With this setting it will work much like the standard clients.</p> in return. With this setting it will work much like the standard clients.</p>
<p>Besides 0, the ration can be set to any number greater than or equal to 1. It means how much to <p>Besides 0, the ratio can be set to any number greater than or equal to 1. It means how much to
attempt to upload in return for each download. e.g. if set to 2, the client will try to upload attempt to upload in return for each download. e.g. if set to 2, the client will try to upload
2 bytes for every byte received. The default setting for this is 0, which will make it work 2 bytes for every byte received. The default setting for this is 0, which will make it work
as a standard client.</p> as a standard client.</p>
<p><tt class="literal"><span class="pre">set_tracker_login()</span></tt> sets a username and password that will be sent along in the HTTP-request
of the tracker announce. Set this if the tracker requires authorization.</p>
<p><tt class="literal"><span class="pre">info_hash()</span></tt> returns the info hash for the torrent.</p> <p><tt class="literal"><span class="pre">info_hash()</span></tt> returns the info hash for the torrent.</p>
<p><tt class="literal"><span class="pre">set_max_uploads()</span></tt> sets the maximum number of peers that's unchoked at the same time on this <p><tt class="literal"><span class="pre">set_max_uploads()</span></tt> sets the maximum number of peers that's unchoked at the same time on this
torrent. If you set this to -1, there will be no limit.</p> torrent. If you set this to -1, there will be no limit.</p>

View File

@ -83,47 +83,33 @@ libtorrent is released under the BSD-license_.
building building
======== ========
To build libtorrent you need boost_ and bjam installed. The easiest way to build libtorrent is probably to use `boost-build`_. Make sure you install it
Then you can use ``bjam`` to build libtorrent. correctly by setting the environment variable ``BOOST_BUILD_PATH`` and modifying the
``user_config.jam`` to reflect the toolsets you have installed.
.. _boost: http://www.boost.org .. _`boost-build`: http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=80982
.. http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=80982 You also need to install `boost 1.31.0`__.
To make bjam work, you need to set the environment variable ``BOOST_ROOT`` to the __ http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041&release_id=214915
path where boost is installed (e.g. c:\\boost_1_30_2 on windows). Then you can just run
``bjam`` in the libtorrent directory.
The Jamfile doesn't work yet. On unix-systems you can use the makefile however. You Before you invoke ``bjam`` you have to set the environment variable ``BOOST_ROOT`` to the
first have to build boost.thread and boost.filesystem. You do this by, in the directory path where you installed boost. This will be used to build and link against the required
'boost-1.30.2/tools/build/jam_src' run the build script ``./build.sh``. This should boost libraries as well as be used as include path for boost headers.
produce at least one folder with the 'bin' prefix (and the rest of the name describes
your platform). Put the files in that folder somewhere in your path.
You can then invoke ``bjam`` in the directories 'boost-1.30.2/libs/thread/build', To build you just have to run::
'boost-1.30.2/libs/date_time/build' and 'boost-1.30.2/libs/filesystem/build'. That will
produce the needed libraries. Put these libraries in the libtorrent root directory.
You then have to modify the makefile to use you prefered compiler and to have the
correct path to your boost istallation.
Then the makefile should be able to do the rest. bjam <toolset>
When building (with boost 1.30.2) on linux and solaris however, I found that I had to make the following in the libtorrent directory.
modifications to the boost.date-time library. In the file:
'boost-1.30.2/boost/date_time/gregorian_calendar.hpp' line 59. Prepend 'boost/date_time/'
to the include path.
And the second modification was in the file: If you're building in developer studio, you may have to set the compiler options
'boost-1.30.2/boost/date_time/microsec_time_clock.hpp' add the following include at the top "force conformance in for loop scope" and "treat wchar_t as built-in type" to Yes.
of the file::
#include "boost/cstdint.hpp" If you're building in developer studio 6, you will probably have to use the previous
version of boost, `boost 1.30.2`__.
In developer studio, you may have to set the compiler options "force conformance in for
loop scope" and "treat wchar_t as built-in type" to Yes.
TODO: more detailed build instructions.
__ http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041&release_id=178835
release and debug builds release and debug builds
------------------------ ------------------------
@ -523,6 +509,8 @@ Its declaration looks like this::
void connect_peer(const address& adr) const; void connect_peer(const address& adr) const;
void set_ratio(float ratio); void set_ratio(float ratio);
void set_tracker_login(std::string const& username, std::string const& password);
boost::filsystem::path save_path() const; boost::filsystem::path save_path() const;
void set_max_uploads(int max_uploads); void set_max_uploads(int max_uploads);
@ -556,11 +544,14 @@ will throw invalid_handle_.
infinite. i.e. the client will always upload as much as it can, no matter how much it gets back infinite. i.e. the client will always upload as much as it can, no matter how much it gets back
in return. With this setting it will work much like the standard clients. in return. With this setting it will work much like the standard clients.
Besides 0, the ration can be set to any number greater than or equal to 1. It means how much to Besides 0, the ratio can be set to any number greater than or equal to 1. It means how much to
attempt to upload in return for each download. e.g. if set to 2, the client will try to upload attempt to upload in return for each download. e.g. if set to 2, the client will try to upload
2 bytes for every byte received. The default setting for this is 0, which will make it work 2 bytes for every byte received. The default setting for this is 0, which will make it work
as a standard client. as a standard client.
``set_tracker_login()`` sets a username and password that will be sent along in the HTTP-request
of the tracker announce. Set this if the tracker requires authorization.
``info_hash()`` returns the info hash for the torrent. ``info_hash()`` returns the info hash for the torrent.
``set_max_uploads()`` sets the maximum number of peers that's unchoked at the same time on this ``set_max_uploads()`` sets the maximum number of peers that's unchoked at the same time on this

View File

@ -71,7 +71,8 @@ namespace libtorrent
, unsigned short port , unsigned short port
, std::string const& request , std::string const& request
, request_callback* c , request_callback* c
, const http_settings& stn); , const http_settings& stn
, std::string const& password = "");
virtual bool tick(); virtual bool tick();
virtual bool send_finished() const virtual bool send_finished() const
{ return m_send_buffer.empty(); } { return m_send_buffer.empty(); }

View File

@ -187,6 +187,7 @@ namespace libtorrent
// generates a request string for sending // generates a request string for sending
// to the tracker // to the tracker
tracker_request generate_tracker_request(int port); tracker_request generate_tracker_request(int port);
std::string tracker_password() const;
boost::posix_time::ptime next_announce() const boost::posix_time::ptime next_announce() const
{ return m_next_request; } { return m_next_request; }
@ -261,6 +262,12 @@ namespace libtorrent
alert_manager& alerts() const; alert_manager& alerts() const;
torrent_handle get_handle() const; torrent_handle get_handle() const;
void set_tracker_login(std::string const& name, std::string const& pw)
{
m_username = name;
m_password = pw;
}
// DEBUG // DEBUG
#ifndef NDEBUG #ifndef NDEBUG
logger* spawn_logger(const char* title); logger* spawn_logger(const char* title);
@ -349,6 +356,9 @@ namespace libtorrent
// tries to maintain. // tries to maintain.
// 0 is infinite // 0 is infinite
float m_ratio; float m_ratio;
std::string m_username;
std::string m_password;
}; };
} }

View File

@ -181,6 +181,8 @@ namespace libtorrent
// -1 means unlimited connections // -1 means unlimited connections
void set_max_connections(int max_connections); void set_max_connections(int max_connections);
void set_tracker_login(std::string const& name, std::string const& password);
const sha1_hash& info_hash() const const sha1_hash& info_hash() const
{ return m_info_hash; } { return m_info_hash; }

View File

@ -137,7 +137,10 @@ namespace libtorrent
: m_settings(s) {} : m_settings(s) {}
void tick(); void tick();
void queue_request(tracker_request const& r, request_callback* c = 0); void queue_request(
tracker_request const& r
, request_callback* c = 0
, std::string const& password = "");
void abort_request(request_callback* c); void abort_request(request_callback* c);
void abort_all_requests(); void abort_all_requests();
bool send_finished() const; bool send_finished() const;

View File

@ -81,7 +81,8 @@ namespace libtorrent
, unsigned short port , unsigned short port
, std::string const& request , std::string const& request
, request_callback* c , request_callback* c
, const http_settings& stn) , const http_settings& stn
, std::string const& password)
: tracker_connection(c) : tracker_connection(c)
, m_state(read_status) , m_state(read_status)
, m_content_encoding(plain) , m_content_encoding(plain)
@ -121,6 +122,7 @@ namespace libtorrent
} }
m_send_buffer += request; m_send_buffer += request;
/*
m_send_buffer += "?info_hash="; m_send_buffer += "?info_hash=";
m_send_buffer += escape_string( m_send_buffer += escape_string(
reinterpret_cast<const char*>(req.info_hash.begin()), 20); reinterpret_cast<const char*>(req.info_hash.begin()), 20);
@ -151,7 +153,7 @@ namespace libtorrent
// extension that tells the tracker that // extension that tells the tracker that
// we don't need any peer_id's in the response // we don't need any peer_id's in the response
m_send_buffer += "&no_peer_id=1"; m_send_buffer += "&no_peer_id=1";
*/
m_send_buffer += " HTTP/1.0\r\nAccept-Encoding: gzip\r\n" m_send_buffer += " HTTP/1.0\r\nAccept-Encoding: gzip\r\n"
"User-Agent: "; "User-Agent: ";
m_send_buffer += m_settings.user_agent; m_send_buffer += m_settings.user_agent;
@ -168,6 +170,11 @@ namespace libtorrent
m_send_buffer += "\r\nProxy-Authorization: Basic "; m_send_buffer += "\r\nProxy-Authorization: Basic ";
m_send_buffer += base64encode(m_settings.proxy_login + ":" + m_settings.proxy_password); m_send_buffer += base64encode(m_settings.proxy_login + ":" + m_settings.proxy_password);
} }
if (password != "")
{
m_send_buffer += "\r\nAuthorization: Basic ";
m_send_buffer += base64encode(password);
}
m_send_buffer += "\r\n\r\n"; m_send_buffer += "\r\n\r\n";
#ifndef NDEBUG #ifndef NDEBUG
if (c) c->debug_log("==> TRACKER_REQUEST [ str: " + m_send_buffer + " ]"); if (c) c->debug_log("==> TRACKER_REQUEST [ str: " + m_send_buffer + " ]");

View File

@ -590,7 +590,8 @@ namespace libtorrent
++i) ++i)
{ {
i->second->abort(); i->second->abort();
m_tracker_manager.queue_request(i->second->generate_tracker_request(m_listen_port)); m_tracker_manager.queue_request(
i->second->generate_tracker_request(m_listen_port));
} }
m_connections.clear(); m_connections.clear();
m_torrents.clear(); m_torrents.clear();
@ -844,8 +845,9 @@ namespace libtorrent
else if (i->second->should_request()) else if (i->second->should_request())
{ {
m_tracker_manager.queue_request( m_tracker_manager.queue_request(
i->second->generate_tracker_request(m_listen_port), i->second->generate_tracker_request(m_listen_port)
boost::get_pointer(i->second)); , boost::get_pointer(i->second)
, i->second->tracker_password());
} }
i->second->second_tick(); i->second->second_tick();

View File

@ -459,6 +459,12 @@ namespace libtorrent
i->second->announce_piece(index); i->second->announce_piece(index);
} }
std::string torrent::tracker_password() const
{
if (m_username.empty() && m_password.empty()) return "";
return m_username + ":" + m_password;
}
tracker_request torrent::generate_tracker_request(int port) tracker_request torrent::generate_tracker_request(int port)
{ {
assert(port > 0); assert(port > 0);

View File

@ -185,6 +185,26 @@ namespace libtorrent
throw invalid_handle(); throw invalid_handle();
} }
void torrent_handle::set_tracker_login(std::string const& name, std::string const& password)
{
if (m_ses == 0) throw invalid_handle();
{
boost::mutex::scoped_lock l(m_ses->m_mutex);
torrent* t = m_ses->find_torrent(m_info_hash);
if (t != 0) t->set_tracker_login(name, password);
}
if (m_chk)
{
boost::mutex::scoped_lock l(m_chk->m_mutex);
detail::piece_checker_data* d = m_chk->find_torrent(m_info_hash);
if (d != 0) d->torrent_ptr->set_tracker_login(name, password);
}
throw invalid_handle();
}
bool torrent_handle::is_valid() const bool torrent_handle::is_valid() const
{ {
if (m_ses == 0) return false; if (m_ses == 0) return false;

View File

@ -304,7 +304,8 @@ namespace libtorrent
void tracker_manager::queue_request( void tracker_manager::queue_request(
tracker_request const& req tracker_request const& req
, request_callback* c) , request_callback* c
, std::string const& password)
{ {
try try
{ {
@ -363,7 +364,8 @@ namespace libtorrent
, port , port
, request_string , request_string
, c , c
, m_settings)); , m_settings
, password));
} }
else if (protocol == "udp") else if (protocol == "udp")
{ {