forked from premiere/premiere-libtorrent
*** empty log message ***
This commit is contained in:
parent
cfe5da0588
commit
8137e5002d
|
@ -469,6 +469,8 @@ Its declaration looks like this::
|
||||||
bool is_valid();
|
bool is_valid();
|
||||||
|
|
||||||
entry write_resume_data();
|
entry write_resume_data();
|
||||||
|
void force_reannounce();
|
||||||
|
void connect_peer(const address& adr) const;
|
||||||
|
|
||||||
boost::filsystem::path save_path() const;
|
boost::filsystem::path save_path() const;
|
||||||
|
|
||||||
|
@ -488,6 +490,17 @@ any operation on an uninitialized handle, it will throw ``invalid_handle``.
|
||||||
``save_path()`` returns the path that was given to ``add_torrent()`` when this torrent
|
``save_path()`` returns the path that was given to ``add_torrent()`` when this torrent
|
||||||
was started.
|
was started.
|
||||||
|
|
||||||
|
``force_reannounce()`` will force this torrent to do another tracker request, to receive new
|
||||||
|
peers. If the torrent is invalid, queued or in checking mode, this functions will throw
|
||||||
|
invalid_handle_.
|
||||||
|
|
||||||
|
``connect_peer()`` is a way to manually connect to peers that one believe is a part of the
|
||||||
|
torrent. If the peer does not respond, or is not a member of this torrent, it will simply
|
||||||
|
be disconnected. No harm can be done by using this other than an unnecessary connection
|
||||||
|
attempt is made. If the torrent is uninitialized or in queued or checking mode, this
|
||||||
|
will throw invalid_handle_.
|
||||||
|
|
||||||
|
|
||||||
``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
|
||||||
|
@ -676,7 +689,7 @@ the payload data.
|
||||||
|
|
||||||
``id`` is the peer's id as used in the bit torrent protocol. This id can be used to
|
``id`` is the peer's id as used in the bit torrent protocol. This id can be used to
|
||||||
extract 'fingerprints' from the peer. Sometimes it can tell you which client the peer
|
extract 'fingerprints' from the peer. Sometimes it can tell you which client the peer
|
||||||
is using.
|
is using. See identify_client_
|
||||||
|
|
||||||
``pieces`` is a vector of booleans that has as many entries as there are pieces
|
``pieces`` is a vector of booleans that has as many entries as there are pieces
|
||||||
in the torrent. Each boolean tells you if the peer has that piece (if it's set to true)
|
in the torrent. Each boolean tells you if the peer has that piece (if it's set to true)
|
||||||
|
@ -908,6 +921,18 @@ version of your client. All these numbers must be within the range [0, 9].
|
||||||
|
|
||||||
``to_string()`` will generate the actual string put in the peer-id, and return it.
|
``to_string()`` will generate the actual string put in the peer-id, and return it.
|
||||||
|
|
||||||
|
identify_client
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
There's a function, in the header ``libtorrent/identify_client.hpp``, that can be used
|
||||||
|
to extract a string describing a client version from its peer-id. It has the following
|
||||||
|
declaration::
|
||||||
|
|
||||||
|
std::string identify_client(const peer_id& id);
|
||||||
|
|
||||||
|
It will recognize most clients that have this kind of identification in the peer-id.
|
||||||
|
|
||||||
|
|
||||||
alerts
|
alerts
|
||||||
======
|
======
|
||||||
|
|
||||||
|
|
|
@ -127,10 +127,16 @@ namespace libtorrent
|
||||||
return m_next_request < boost::posix_time::second_clock::local_time();
|
return m_next_request < boost::posix_time::second_clock::local_time();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void force_tracker_request()
|
||||||
|
{
|
||||||
|
m_next_request = boost::posix_time::second_clock::local_time();
|
||||||
|
}
|
||||||
|
|
||||||
void print(std::ostream& os) const;
|
void print(std::ostream& os) const;
|
||||||
|
|
||||||
void check_files(detail::piece_checker_data& data,
|
void check_files(
|
||||||
boost::mutex& mutex);
|
detail::piece_checker_data& data
|
||||||
|
, boost::mutex& mutex);
|
||||||
|
|
||||||
stat statistics() const { return m_stat; }
|
stat statistics() const { return m_stat; }
|
||||||
size_type bytes_left() const;
|
size_type bytes_left() const;
|
||||||
|
@ -141,7 +147,7 @@ namespace libtorrent
|
||||||
const address& a
|
const address& a
|
||||||
, const peer_id& id);
|
, const peer_id& id);
|
||||||
|
|
||||||
const torrent_info& torrent_file() const throw()
|
const torrent_info& torrent_file() const
|
||||||
{ return m_torrent_file; }
|
{ return m_torrent_file; }
|
||||||
|
|
||||||
policy& get_policy() { return *m_policy; }
|
policy& get_policy() { return *m_policy; }
|
||||||
|
|
|
@ -135,12 +135,17 @@ namespace libtorrent
|
||||||
|
|
||||||
entry write_resume_data();
|
entry write_resume_data();
|
||||||
|
|
||||||
// TODO: add force reannounce
|
// forces this torrent to reannounce
|
||||||
|
// (make a rerequest from the tracker)
|
||||||
|
void force_reannounce() const;
|
||||||
|
|
||||||
// TODO: add a feature where the user can ask the torrent
|
// TODO: add a feature where the user can ask the torrent
|
||||||
// to finish all pieces currently in the pipeline, and then
|
// to finish all pieces currently in the pipeline, and then
|
||||||
// abort the torrent.
|
// abort the torrent.
|
||||||
|
|
||||||
|
// manually connect a peer
|
||||||
|
void connect_peer(const address& adr) const;
|
||||||
|
|
||||||
// TODO: add finish_file_allocation, which will force the
|
// TODO: add finish_file_allocation, which will force the
|
||||||
// torrent to allocate storage for all pieces.
|
// torrent to allocate storage for all pieces.
|
||||||
|
|
||||||
|
|
|
@ -131,8 +131,6 @@ namespace libtorrent
|
||||||
} // namespace unnamed
|
} // namespace unnamed
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TODO: document
|
|
||||||
std::string identify_client(const peer_id& p)
|
std::string identify_client(const peer_id& p)
|
||||||
{
|
{
|
||||||
peer_id::const_iterator PID = p.begin();
|
peer_id::const_iterator PID = p.begin();
|
||||||
|
|
|
@ -1264,20 +1264,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (m_active)
|
if (!m_active)
|
||||||
{
|
|
||||||
// verify peer_id
|
|
||||||
// TODO: It seems like the original client ignores to check the peer id
|
|
||||||
// can that be correct?
|
|
||||||
if (!std::equal(m_recv_buffer.begin(), m_recv_buffer.begin() + 20, (const char*)m_peer_id.begin()))
|
|
||||||
{
|
|
||||||
#ifndef NDEBUG
|
|
||||||
(*m_logger) << m_socket->sender().as_string() << " invalid peer_id (it doesn't equal the one from the tracker)\n";
|
|
||||||
#endif
|
|
||||||
throw network_error(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// check to make sure we don't have another connection with the same
|
// check to make sure we don't have another connection with the same
|
||||||
// info_hash and peer_id. If we do. close this connection.
|
// info_hash and peer_id. If we do. close this connection.
|
||||||
|
|
|
@ -721,7 +721,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: this function should also take the
|
// TODO: this function should also take the
|
||||||
// HTTP-response code as an argument
|
// HTTP-response code as an argument.
|
||||||
// with some codes, we should just consider
|
// with some codes, we should just consider
|
||||||
// the tracker as a failure and not retry
|
// the tracker as a failure and not retry
|
||||||
// it anymore
|
// it anymore
|
||||||
|
|
|
@ -276,6 +276,30 @@ namespace libtorrent
|
||||||
throw invalid_handle();
|
throw invalid_handle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void torrent_handle::connect_peer(const address& adr) const
|
||||||
|
{
|
||||||
|
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) throw invalid_handle();
|
||||||
|
|
||||||
|
peer_id id;
|
||||||
|
std::fill(id.begin(), id.end(), 0);
|
||||||
|
t->get_policy().peer_from_tracker(adr, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void torrent_handle::force_reannounce() const
|
||||||
|
{
|
||||||
|
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) throw invalid_handle();
|
||||||
|
|
||||||
|
t->force_tracker_request();
|
||||||
|
}
|
||||||
|
|
||||||
void torrent_handle::get_peer_info(std::vector<peer_info>& v) const
|
void torrent_handle::get_peer_info(std::vector<peer_info>& v) const
|
||||||
{
|
{
|
||||||
v.clear();
|
v.clear();
|
||||||
|
|
Loading…
Reference in New Issue