forked from premiere/premiere-libtorrent
transition from intrusive_ptr to shared_ptr. don't export initialize_default_settings
This commit is contained in:
parent
4b731b8ad7
commit
0f37e3403c
|
@ -60,6 +60,7 @@ set(sources
|
||||||
session
|
session
|
||||||
session_call
|
session_call
|
||||||
session_impl
|
session_impl
|
||||||
|
session_settings
|
||||||
session_stats
|
session_stats
|
||||||
settings_pack
|
settings_pack
|
||||||
socket_io
|
socket_io
|
||||||
|
|
1
Jamfile
1
Jamfile
|
@ -617,6 +617,7 @@ SOURCES =
|
||||||
session_stats
|
session_stats
|
||||||
performance_counters
|
performance_counters
|
||||||
resolver
|
resolver
|
||||||
|
session_settings
|
||||||
|
|
||||||
# -- extensions --
|
# -- extensions --
|
||||||
metadata_transfer
|
metadata_transfer
|
||||||
|
|
|
@ -63,7 +63,6 @@ nobase_include_HEADERS = \
|
||||||
i2p_stream.hpp \
|
i2p_stream.hpp \
|
||||||
identify_client.hpp \
|
identify_client.hpp \
|
||||||
instantiate_connection.hpp \
|
instantiate_connection.hpp \
|
||||||
intrusive_ptr_base.hpp \
|
|
||||||
invariant_check.hpp \
|
invariant_check.hpp \
|
||||||
io.hpp \
|
io.hpp \
|
||||||
io_service.hpp \
|
io_service.hpp \
|
||||||
|
|
|
@ -1010,9 +1010,9 @@ namespace libtorrent
|
||||||
// this is deducted from the connect speed
|
// this is deducted from the connect speed
|
||||||
int m_boost_connections;
|
int m_boost_connections;
|
||||||
|
|
||||||
boost::intrusive_ptr<natpmp> m_natpmp;
|
boost::shared_ptr<natpmp> m_natpmp;
|
||||||
boost::intrusive_ptr<upnp> m_upnp;
|
boost::shared_ptr<upnp> m_upnp;
|
||||||
boost::intrusive_ptr<lsd> m_lsd;
|
boost::shared_ptr<lsd> m_lsd;
|
||||||
|
|
||||||
// mask is a bitmask of which protocols to remap on:
|
// mask is a bitmask of which protocols to remap on:
|
||||||
// 1: NAT-PMP
|
// 1: NAT-PMP
|
||||||
|
|
|
@ -40,6 +40,11 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
namespace libtorrent
|
||||||
|
{
|
||||||
|
TORRENT_EXTRA_EXPORT void initialize_default_settings(aux::session_settings& s);
|
||||||
|
}
|
||||||
|
|
||||||
namespace libtorrent { namespace aux
|
namespace libtorrent { namespace aux
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -65,12 +70,12 @@ namespace libtorrent { namespace aux
|
||||||
void set_bool(int name, bool value) { SET(bool); }
|
void set_bool(int name, bool value) { SET(bool); }
|
||||||
bool get_bool(int name) const { GET(bool, false); }
|
bool get_bool(int name) const { GET(bool, false); }
|
||||||
|
|
||||||
session_settings() { initialize_default_settings(*this); }
|
session_settings();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_strings[settings_pack::num_string_settings];
|
std::string m_strings[settings_pack::num_string_settings];
|
||||||
int m_ints[settings_pack::num_int_settings];
|
int m_ints[settings_pack::num_int_settings];
|
||||||
// TODO: 2 make this a bitfield
|
// TODO: make this a bitfield
|
||||||
bool m_bools[settings_pack::num_bool_settings];
|
bool m_bools[settings_pack::num_bool_settings];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -205,11 +205,6 @@ namespace libtorrent
|
||||||
|
|
||||||
// the pointers to the block data. If this is a ghost
|
// the pointers to the block data. If this is a ghost
|
||||||
// cache entry, there won't be any data here
|
// cache entry, there won't be any data here
|
||||||
|
|
||||||
// TODO: 3 could this be a scoped_array instead? does cached_piece_entry
|
|
||||||
// really need to be copyable? cached_piece_entry does need to be
|
|
||||||
// copyable since it's part of a container, but it's possible it could be
|
|
||||||
// a raw pointer or boost::unique_ptr perhaps
|
|
||||||
boost::shared_array<cached_block_entry> blocks;
|
boost::shared_array<cached_block_entry> blocks;
|
||||||
|
|
||||||
// the last time a block was written to this piece
|
// the last time a block was written to this piece
|
||||||
|
|
|
@ -66,11 +66,11 @@ namespace libtorrent
|
||||||
class TORRENT_EXTRA_EXPORT broadcast_socket
|
class TORRENT_EXTRA_EXPORT broadcast_socket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
broadcast_socket(udp::endpoint const& multicast_endpoint
|
broadcast_socket(udp::endpoint const& multicast_endpoint);
|
||||||
, receive_handler_t const& handler);
|
|
||||||
~broadcast_socket() { close(); }
|
~broadcast_socket() { close(); }
|
||||||
|
|
||||||
void open(io_service& ios, error_code& ec, bool loopback = true);
|
void open(receive_handler_t const& handler, io_service& ios
|
||||||
|
, error_code& ec, bool loopback = true);
|
||||||
|
|
||||||
enum flags_t { broadcast = 1 };
|
enum flags_t { broadcast = 1 };
|
||||||
void send(char const* buffer, int size, error_code& ec, int flags = 0);
|
void send(char const* buffer, int size, error_code& ec, int flags = 0);
|
||||||
|
|
|
@ -41,7 +41,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <boost/intrusive_ptr.hpp>
|
#include <boost/smart_ptr.hpp>
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
@ -51,7 +51,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/error_code.hpp"
|
#include "libtorrent/error_code.hpp"
|
||||||
#include "libtorrent/assert.hpp"
|
#include "libtorrent/assert.hpp"
|
||||||
#include "libtorrent/time.hpp"
|
#include "libtorrent/time.hpp"
|
||||||
#include "libtorrent/intrusive_ptr_base.hpp"
|
|
||||||
|
|
||||||
#ifdef TORRENT_WINDOWS
|
#ifdef TORRENT_WINDOWS
|
||||||
// windows part
|
// windows part
|
||||||
|
@ -216,15 +215,15 @@ namespace libtorrent
|
||||||
|
|
||||||
char stack[2048];
|
char stack[2048];
|
||||||
private:
|
private:
|
||||||
boost::intrusive_ptr<file> m_file;
|
boost::shared_ptr<file> m_file;
|
||||||
};
|
};
|
||||||
|
|
||||||
void TORRENT_EXTRA_EXPORT print_open_files(char const* event, char const* name);
|
void TORRENT_EXTRA_EXPORT print_open_files(char const* event, char const* name);
|
||||||
#else
|
#else
|
||||||
typedef boost::intrusive_ptr<file> file_handle;
|
typedef boost::shared_ptr<file> file_handle;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct TORRENT_EXTRA_EXPORT file: boost::noncopyable, intrusive_ptr_base<file>
|
struct TORRENT_EXTRA_EXPORT file: boost::noncopyable
|
||||||
{
|
{
|
||||||
// the open mode for files. Used for the file constructor or
|
// the open mode for files. Used for the file constructor or
|
||||||
// file::open().
|
// file::open().
|
||||||
|
|
|
@ -36,12 +36,12 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/socket.hpp"
|
#include "libtorrent/socket.hpp"
|
||||||
#include "libtorrent/peer_id.hpp"
|
#include "libtorrent/peer_id.hpp"
|
||||||
#include "libtorrent/broadcast_socket.hpp"
|
#include "libtorrent/broadcast_socket.hpp"
|
||||||
#include "libtorrent/intrusive_ptr_base.hpp"
|
|
||||||
#include "libtorrent/deadline_timer.hpp"
|
#include "libtorrent/deadline_timer.hpp"
|
||||||
|
|
||||||
#include <boost/function/function2.hpp>
|
#include <boost/function/function2.hpp>
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
#include <boost/enable_shared_from_this.hpp>
|
||||||
|
|
||||||
#if defined TORRENT_LOGGING
|
#if defined TORRENT_LOGGING
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -52,19 +52,21 @@ namespace libtorrent
|
||||||
|
|
||||||
typedef boost::function<void(tcp::endpoint, sha1_hash)> peer_callback_t;
|
typedef boost::function<void(tcp::endpoint, sha1_hash)> peer_callback_t;
|
||||||
|
|
||||||
class lsd : public intrusive_ptr_base<lsd>
|
class lsd : public boost::enable_shared_from_this<lsd>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
lsd(io_service& ios, peer_callback_t const& cb);
|
lsd(io_service& ios, peer_callback_t const& cb);
|
||||||
~lsd();
|
~lsd();
|
||||||
|
|
||||||
// void rebind(address const& listen_interface);
|
void start();
|
||||||
|
|
||||||
void announce(sha1_hash const& ih, int listen_port, bool broadcast = false);
|
void announce(sha1_hash const& ih, int listen_port, bool broadcast = false);
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
boost::shared_ptr<lsd> self() { return shared_from_this(); }
|
||||||
|
|
||||||
void announce_impl(sha1_hash const& ih, int listen_port
|
void announce_impl(sha1_hash const& ih, int listen_port
|
||||||
, bool broadcast, int retry_count);
|
, bool broadcast, int retry_count);
|
||||||
void resend_announce(error_code const& e, sha1_hash const& ih
|
void resend_announce(error_code const& e, sha1_hash const& ih
|
||||||
|
|
|
@ -38,11 +38,11 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/address.hpp"
|
#include "libtorrent/address.hpp"
|
||||||
#include "libtorrent/thread.hpp"
|
#include "libtorrent/thread.hpp"
|
||||||
#include "libtorrent/error_code.hpp"
|
#include "libtorrent/error_code.hpp"
|
||||||
#include "libtorrent/intrusive_ptr_base.hpp"
|
|
||||||
#include "libtorrent/deadline_timer.hpp"
|
#include "libtorrent/deadline_timer.hpp"
|
||||||
|
|
||||||
#include <boost/function/function1.hpp>
|
#include <boost/function/function1.hpp>
|
||||||
#include <boost/function/function4.hpp>
|
#include <boost/function/function4.hpp>
|
||||||
|
#include <boost/enable_shared_from_this.hpp>
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
@ -53,14 +53,13 @@ namespace libtorrent
|
||||||
typedef boost::function<void(int, address, int, error_code const&)> portmap_callback_t;
|
typedef boost::function<void(int, address, int, error_code const&)> portmap_callback_t;
|
||||||
typedef boost::function<void(char const*)> log_callback_t;
|
typedef boost::function<void(char const*)> log_callback_t;
|
||||||
|
|
||||||
class natpmp : public intrusive_ptr_base<natpmp>
|
class natpmp : public boost::enable_shared_from_this<natpmp>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
natpmp(io_service& ios, address const& listen_interface
|
natpmp(io_service& ios, portmap_callback_t const& cb
|
||||||
, portmap_callback_t const& cb
|
|
||||||
, log_callback_t const& lcb);
|
, log_callback_t const& lcb);
|
||||||
|
|
||||||
void rebind(address const& listen_interface);
|
void start();
|
||||||
|
|
||||||
// maps the ports, if a port is set to 0
|
// maps the ports, if a port is set to 0
|
||||||
// it will not be mapped
|
// it will not be mapped
|
||||||
|
@ -73,6 +72,8 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
boost::shared_ptr<natpmp> self() { return shared_from_this(); }
|
||||||
|
|
||||||
void update_mapping(int i, mutex::scoped_lock& l);
|
void update_mapping(int i, mutex::scoped_lock& l);
|
||||||
void send_map_request(int i, mutex::scoped_lock& l);
|
void send_map_request(int i, mutex::scoped_lock& l);
|
||||||
void send_get_ip_address_request(mutex::scoped_lock& l);
|
void send_get_ip_address_request(mutex::scoped_lock& l);
|
||||||
|
|
|
@ -33,13 +33,12 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#ifndef TORRENT_PEER_CLASS_HPP_INCLUDED
|
#ifndef TORRENT_PEER_CLASS_HPP_INCLUDED
|
||||||
#define TORRENT_PEER_CLASS_HPP_INCLUDED
|
#define TORRENT_PEER_CLASS_HPP_INCLUDED
|
||||||
|
|
||||||
#include "libtorrent/intrusive_ptr_base.hpp"
|
|
||||||
#include "libtorrent/bandwidth_limit.hpp"
|
#include "libtorrent/bandwidth_limit.hpp"
|
||||||
#include "libtorrent/assert.hpp"
|
#include "libtorrent/assert.hpp"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <boost/intrusive_ptr.hpp>
|
#include <boost/smart_ptr.hpp>
|
||||||
#include <boost/cstdint.hpp>
|
#include <boost/cstdint.hpp>
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
|
@ -83,7 +82,7 @@ namespace libtorrent
|
||||||
int download_priority;
|
int download_priority;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TORRENT_EXTRA_EXPORT peer_class : intrusive_ptr_base<peer_class>
|
struct TORRENT_EXTRA_EXPORT peer_class : boost::enable_shared_from_this<peer_class>
|
||||||
{
|
{
|
||||||
friend struct peer_class_pool;
|
friend struct peer_class_pool;
|
||||||
|
|
||||||
|
@ -136,7 +135,7 @@ namespace libtorrent
|
||||||
|
|
||||||
// state for peer classes (a peer can belong to multiple classes)
|
// state for peer classes (a peer can belong to multiple classes)
|
||||||
// this can control
|
// this can control
|
||||||
std::vector<boost::intrusive_ptr<peer_class> > m_peer_classes;
|
std::vector<boost::shared_ptr<peer_class> > m_peer_classes;
|
||||||
|
|
||||||
// indices in m_peer_classes that are no longer used
|
// indices in m_peer_classes that are no longer used
|
||||||
std::vector<peer_class_t> m_free_list;
|
std::vector<peer_class_t> m_free_list;
|
||||||
|
|
|
@ -48,7 +48,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include <boost/smart_ptr.hpp>
|
#include <boost/smart_ptr.hpp>
|
||||||
#include <boost/weak_ptr.hpp>
|
#include <boost/weak_ptr.hpp>
|
||||||
#include <boost/intrusive_ptr.hpp>
|
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <boost/array.hpp>
|
#include <boost/array.hpp>
|
||||||
#include <boost/optional.hpp>
|
#include <boost/optional.hpp>
|
||||||
|
|
|
@ -55,7 +55,6 @@ namespace libtorrent
|
||||||
|
|
||||||
TORRENT_EXTRA_EXPORT settings_pack* load_pack_from_dict(lazy_entry const* settings);
|
TORRENT_EXTRA_EXPORT settings_pack* load_pack_from_dict(lazy_entry const* settings);
|
||||||
TORRENT_EXTRA_EXPORT void save_settings_to_dict(aux::session_settings const& s, entry::dictionary_type& sett);
|
TORRENT_EXTRA_EXPORT void save_settings_to_dict(aux::session_settings const& s, entry::dictionary_type& sett);
|
||||||
TORRENT_EXPORT void initialize_default_settings(aux::session_settings& s);
|
|
||||||
TORRENT_EXTRA_EXPORT void apply_pack(settings_pack const* pack, aux::session_settings& sett, aux::session_impl* ses = 0);
|
TORRENT_EXTRA_EXPORT void apply_pack(settings_pack const* pack, aux::session_settings& sett, aux::session_impl* ses = 0);
|
||||||
|
|
||||||
TORRENT_EXPORT int setting_by_name(std::string const& name);
|
TORRENT_EXPORT int setting_by_name(std::string const& name);
|
||||||
|
|
|
@ -46,7 +46,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <boost/enable_shared_from_this.hpp>
|
#include <boost/enable_shared_from_this.hpp>
|
||||||
#include <boost/scoped_ptr.hpp>
|
#include <boost/scoped_ptr.hpp>
|
||||||
#include <boost/intrusive_ptr.hpp>
|
|
||||||
#include <boost/unordered_set.hpp>
|
#include <boost/unordered_set.hpp>
|
||||||
#include <boost/atomic.hpp>
|
#include <boost/atomic.hpp>
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/error_code.hpp"
|
#include "libtorrent/error_code.hpp"
|
||||||
#include "libtorrent/broadcast_socket.hpp"
|
#include "libtorrent/broadcast_socket.hpp"
|
||||||
#include "libtorrent/http_connection.hpp"
|
#include "libtorrent/http_connection.hpp"
|
||||||
#include "libtorrent/intrusive_ptr_base.hpp"
|
|
||||||
#include "libtorrent/thread.hpp"
|
#include "libtorrent/thread.hpp"
|
||||||
#include "libtorrent/deadline_timer.hpp"
|
#include "libtorrent/deadline_timer.hpp"
|
||||||
#include "libtorrent/enum_net.hpp"
|
#include "libtorrent/enum_net.hpp"
|
||||||
|
@ -47,6 +46,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/function/function4.hpp>
|
#include <boost/function/function4.hpp>
|
||||||
#include <boost/noncopyable.hpp>
|
#include <boost/noncopyable.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
#include <boost/enable_shared_from_this.hpp>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
|
@ -106,15 +106,17 @@ typedef boost::function<void(int, address, int, error_code const&)> portmap_call
|
||||||
typedef boost::function<void(char const*)> log_callback_t;
|
typedef boost::function<void(char const*)> log_callback_t;
|
||||||
|
|
||||||
// TODO: support using the windows API for UPnP operations as well
|
// TODO: support using the windows API for UPnP operations as well
|
||||||
class TORRENT_EXTRA_EXPORT upnp : public intrusive_ptr_base<upnp>
|
class TORRENT_EXTRA_EXPORT upnp : public boost::enable_shared_from_this<upnp>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
upnp(io_service& ios
|
upnp(io_service& ios
|
||||||
, address const& listen_interface, std::string const& user_agent
|
, address const& listen_interface, std::string const& user_agent
|
||||||
, portmap_callback_t const& cb, log_callback_t const& lcb
|
, portmap_callback_t const& cb, log_callback_t const& lcb
|
||||||
, bool ignore_nonrouters, void* state = 0);
|
, bool ignore_nonrouters);
|
||||||
~upnp();
|
~upnp();
|
||||||
|
|
||||||
|
void start(void* state = 0);
|
||||||
|
|
||||||
void* drain_state();
|
void* drain_state();
|
||||||
|
|
||||||
enum protocol_type { none = 0, udp = 1, tcp = 2 };
|
enum protocol_type { none = 0, udp = 1, tcp = 2 };
|
||||||
|
@ -157,6 +159,8 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
boost::shared_ptr<upnp> self() { return shared_from_this(); }
|
||||||
|
|
||||||
void map_timer(error_code const& ec);
|
void map_timer(error_code const& ec);
|
||||||
void try_map_upnp(mutex::scoped_lock& l, bool timer = false);
|
void try_map_upnp(mutex::scoped_lock& l, bool timer = false);
|
||||||
void discover_device_impl(mutex::scoped_lock& l);
|
void discover_device_impl(mutex::scoped_lock& l);
|
||||||
|
|
|
@ -104,6 +104,7 @@ libtorrent_rasterbar_la_SOURCES = \
|
||||||
session.cpp \
|
session.cpp \
|
||||||
session_call.cpp \
|
session_call.cpp \
|
||||||
session_impl.cpp \
|
session_impl.cpp \
|
||||||
|
session_settings.cpp \
|
||||||
settings_pack.cpp \
|
settings_pack.cpp \
|
||||||
sha1.cpp \
|
sha1.cpp \
|
||||||
smart_ban.cpp \
|
smart_ban.cpp \
|
||||||
|
|
|
@ -226,10 +226,8 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
broadcast_socket::broadcast_socket(
|
broadcast_socket::broadcast_socket(
|
||||||
udp::endpoint const& multicast_endpoint
|
udp::endpoint const& multicast_endpoint)
|
||||||
, receive_handler_t const& handler)
|
|
||||||
: m_multicast_endpoint(multicast_endpoint)
|
: m_multicast_endpoint(multicast_endpoint)
|
||||||
, m_on_receive(handler)
|
|
||||||
, m_outstanding_operations(0)
|
, m_outstanding_operations(0)
|
||||||
, m_abort(false)
|
, m_abort(false)
|
||||||
{
|
{
|
||||||
|
@ -238,8 +236,11 @@ namespace libtorrent
|
||||||
using namespace asio::ip::multicast;
|
using namespace asio::ip::multicast;
|
||||||
}
|
}
|
||||||
|
|
||||||
void broadcast_socket::open(io_service& ios, error_code& ec, bool loopback)
|
void broadcast_socket::open(receive_handler_t const& handler
|
||||||
|
, io_service& ios, error_code& ec, bool loopback)
|
||||||
{
|
{
|
||||||
|
m_on_receive = handler;
|
||||||
|
|
||||||
std::vector<ip_interface> interfaces = enum_net_interfaces(ios, ec);
|
std::vector<ip_interface> interfaces = enum_net_interfaces(ios, ec);
|
||||||
|
|
||||||
#if TORRENT_USE_IPV6
|
#if TORRENT_USE_IPV6
|
||||||
|
@ -279,11 +280,11 @@ namespace libtorrent
|
||||||
#endif
|
#endif
|
||||||
open_multicast_socket(ios, i->interface_address, loopback, ec);
|
open_multicast_socket(ios, i->interface_address, loopback, ec);
|
||||||
#ifdef TORRENT_DEBUG
|
#ifdef TORRENT_DEBUG
|
||||||
// fprintf(stderr, "broadcast socket [ if: %s group: %s mask: %s ] %s\n"
|
fprintf(stderr, "broadcast socket [ if: %s group: %s mask: %s ] %s\n"
|
||||||
// , i->interface_address.to_string().c_str()
|
, i->interface_address.to_string().c_str()
|
||||||
// , m_multicast_endpoint.address().to_string().c_str()
|
, m_multicast_endpoint.address().to_string().c_str()
|
||||||
// , i->netmask.to_string().c_str()
|
, i->netmask.to_string().c_str()
|
||||||
// , ec.message().c_str());
|
, ec.message().c_str());
|
||||||
#endif
|
#endif
|
||||||
open_unicast_socket(ios, i->interface_address
|
open_unicast_socket(ios, i->interface_address
|
||||||
, i->netmask.is_v4() ? i->netmask.to_v4() : address_v4());
|
, i->netmask.is_v4() ? i->netmask.to_v4() : address_v4());
|
||||||
|
|
|
@ -163,7 +163,7 @@ namespace libtorrent
|
||||||
// be outstanding operations on it, we can't close the
|
// be outstanding operations on it, we can't close the
|
||||||
// file, we can only delete our reference to it.
|
// file, we can only delete our reference to it.
|
||||||
// if this is the only reference to the file, it will be closed
|
// if this is the only reference to the file, it will be closed
|
||||||
e.file_ptr.reset(new (std::nothrow)file);
|
e.file_ptr = boost::make_shared<file>();
|
||||||
|
|
||||||
std::string full_path = fs.file_path(file_index, p);
|
std::string full_path = fs.file_path(file_index, p);
|
||||||
if (!e.file_ptr->open(full_path, m, ec))
|
if (!e.file_ptr->open(full_path, m, ec))
|
||||||
|
@ -183,7 +183,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
lru_file_entry e;
|
lru_file_entry e;
|
||||||
e.file_ptr.reset(new (std::nothrow)file);
|
e.file_ptr = boost::make_shared<file>();
|
||||||
if (!e.file_ptr)
|
if (!e.file_ptr)
|
||||||
{
|
{
|
||||||
ec = error_code(ENOMEM, get_posix_category());
|
ec = error_code(ENOMEM, get_posix_category());
|
||||||
|
@ -307,7 +307,7 @@ namespace libtorrent
|
||||||
for (file_set::const_iterator i = m_files.begin();
|
for (file_set::const_iterator i = m_files.begin();
|
||||||
i != m_files.end(); ++i)
|
i != m_files.end(); ++i)
|
||||||
{
|
{
|
||||||
if (i->second.key == st && i->second.file_ptr->refcount() > 1)
|
if (i->second.key == st && !i->second.file_ptr.unique())
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
21
src/lsd.cpp
21
src/lsd.cpp
|
@ -67,11 +67,9 @@ static error_code ec;
|
||||||
|
|
||||||
lsd::lsd(io_service& ios, peer_callback_t const& cb)
|
lsd::lsd(io_service& ios, peer_callback_t const& cb)
|
||||||
: m_callback(cb)
|
: m_callback(cb)
|
||||||
, m_socket(udp::endpoint(address_v4::from_string("239.192.152.143", ec), 6771)
|
, m_socket(udp::endpoint(address_v4::from_string("239.192.152.143", ec), 6771))
|
||||||
, boost::bind(&lsd::on_announce, self(), _1, _2, _3))
|
|
||||||
#if TORRENT_USE_IPV6
|
#if TORRENT_USE_IPV6
|
||||||
, m_socket6(udp::endpoint(address_v6::from_string("ff15::efc0:988f", ec), 6771)
|
, m_socket6(udp::endpoint(address_v6::from_string("ff15::efc0:988f", ec), 6771))
|
||||||
, boost::bind(&lsd::on_announce, self(), _1, _2, _3))
|
|
||||||
#endif
|
#endif
|
||||||
, m_broadcast_timer(ios)
|
, m_broadcast_timer(ios)
|
||||||
, m_cookie(random())
|
, m_cookie(random())
|
||||||
|
@ -79,9 +77,16 @@ lsd::lsd(io_service& ios, peer_callback_t const& cb)
|
||||||
#if TORRENT_USE_IPV6
|
#if TORRENT_USE_IPV6
|
||||||
, m_disabled6(false)
|
, m_disabled6(false)
|
||||||
#endif
|
#endif
|
||||||
|
#if defined TORRENT_LOGGING
|
||||||
|
, m_log(NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void lsd::start()
|
||||||
{
|
{
|
||||||
#if defined TORRENT_LOGGING
|
#if defined TORRENT_LOGGING
|
||||||
// TODO: instead if writing to a file, post alerts. Or call a log callback
|
// TODO: 3 instead if writing to a file, post alerts. Or call a log callback
|
||||||
m_log = fopen("lsd.log", "w+");
|
m_log = fopen("lsd.log", "w+");
|
||||||
if (m_log == NULL)
|
if (m_log == NULL)
|
||||||
{
|
{
|
||||||
|
@ -91,7 +96,8 @@ lsd::lsd(io_service& ios, peer_callback_t const& cb)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
error_code ec;
|
error_code ec;
|
||||||
m_socket.open(ios, ec);
|
m_socket.open(boost::bind(&lsd::on_announce, self(), _1, _2, _3)
|
||||||
|
, m_broadcast_timer.get_io_service(), ec);
|
||||||
|
|
||||||
#if defined TORRENT_LOGGING
|
#if defined TORRENT_LOGGING
|
||||||
if (ec)
|
if (ec)
|
||||||
|
@ -102,7 +108,8 @@ lsd::lsd(io_service& ios, peer_callback_t const& cb)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TORRENT_USE_IPV6
|
#if TORRENT_USE_IPV6
|
||||||
m_socket6.open(ios, ec);
|
m_socket6.open(boost::bind(&lsd::on_announce, self(), _1, _2, _3)
|
||||||
|
, m_broadcast_timer.get_io_service(), ec);
|
||||||
#if defined TORRENT_LOGGING
|
#if defined TORRENT_LOGGING
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
|
|
@ -63,7 +63,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
|
|
||||||
natpmp::natpmp(io_service& ios, address const& listen_interface
|
natpmp::natpmp(io_service& ios
|
||||||
, portmap_callback_t const& cb, log_callback_t const& lcb)
|
, portmap_callback_t const& cb, log_callback_t const& lcb)
|
||||||
: m_callback(cb)
|
: m_callback(cb)
|
||||||
, m_log_callback(lcb)
|
, m_log_callback(lcb)
|
||||||
|
@ -80,10 +80,9 @@ natpmp::natpmp(io_service& ios, address const& listen_interface
|
||||||
// for this array not to be reallocated, by passing
|
// for this array not to be reallocated, by passing
|
||||||
// around pointers to its elements. so reserve size for now
|
// around pointers to its elements. so reserve size for now
|
||||||
m_mappings.reserve(10);
|
m_mappings.reserve(10);
|
||||||
rebind(listen_interface);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void natpmp::rebind(address const& listen_interface)
|
void natpmp::start()
|
||||||
{
|
{
|
||||||
mutex::scoped_lock l(m_mutex);
|
mutex::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
|
|
@ -88,11 +88,11 @@ namespace libtorrent
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ret = m_peer_classes.size();
|
ret = m_peer_classes.size();
|
||||||
m_peer_classes.push_back(boost::intrusive_ptr<peer_class>());
|
m_peer_classes.push_back(boost::shared_ptr<peer_class>());
|
||||||
}
|
}
|
||||||
|
|
||||||
TORRENT_ASSERT(m_peer_classes[ret].get() == 0);
|
TORRENT_ASSERT(m_peer_classes[ret].get() == 0);
|
||||||
m_peer_classes[ret] = new peer_class(label);
|
m_peer_classes[ret] = boost::make_shared<peer_class>(label);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3163,7 +3163,7 @@ namespace libtorrent
|
||||||
i->locked = true;
|
i->locked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: 3 it would be nice if this could be folded into lock_piece()
|
// TODO: 2 it would be nice if this could be folded into lock_piece()
|
||||||
// the main distinction is that this also maintains the m_num_passed
|
// the main distinction is that this also maintains the m_num_passed
|
||||||
// counter and the passed_hash_check member
|
// counter and the passed_hash_check member
|
||||||
void piece_picker::write_failed(piece_block block)
|
void piece_picker::write_failed(piece_block block)
|
||||||
|
|
|
@ -1989,7 +1989,7 @@ retry:
|
||||||
|
|
||||||
void session_impl::remap_tcp_ports(boost::uint32_t mask, int tcp_port, int ssl_port)
|
void session_impl::remap_tcp_ports(boost::uint32_t mask, int tcp_port, int ssl_port)
|
||||||
{
|
{
|
||||||
if ((mask & 1) && m_natpmp.get())
|
if ((mask & 1) && m_natpmp)
|
||||||
{
|
{
|
||||||
if (m_tcp_mapping[0] != -1) m_natpmp->delete_mapping(m_tcp_mapping[0]);
|
if (m_tcp_mapping[0] != -1) m_natpmp->delete_mapping(m_tcp_mapping[0]);
|
||||||
m_tcp_mapping[0] = m_natpmp->add_mapping(natpmp::tcp, tcp_port, tcp_port);
|
m_tcp_mapping[0] = m_natpmp->add_mapping(natpmp::tcp, tcp_port, tcp_port);
|
||||||
|
@ -1999,7 +1999,7 @@ retry:
|
||||||
, ssl_port, ssl_port);
|
, ssl_port, ssl_port);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if ((mask & 2) && m_upnp.get())
|
if ((mask & 2) && m_upnp)
|
||||||
{
|
{
|
||||||
if (m_tcp_mapping[1] != -1) m_upnp->delete_mapping(m_tcp_mapping[1]);
|
if (m_tcp_mapping[1] != -1) m_upnp->delete_mapping(m_tcp_mapping[1]);
|
||||||
m_tcp_mapping[1] = m_upnp->add_mapping(upnp::tcp, tcp_port, tcp_port);
|
m_tcp_mapping[1] = m_upnp->add_mapping(upnp::tcp, tcp_port, tcp_port);
|
||||||
|
@ -2841,7 +2841,8 @@ retry:
|
||||||
if (now - m_last_second_tick < seconds(1)) return;
|
if (now - m_last_second_tick < seconds(1)) return;
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
if (m_dht_interval_update_torrents < 40
|
if (m_dht
|
||||||
|
&& m_dht_interval_update_torrents < 40
|
||||||
&& m_dht_interval_update_torrents != int(m_torrents.size()))
|
&& m_dht_interval_update_torrents != int(m_torrents.size()))
|
||||||
update_dht_announce_interval();
|
update_dht_announce_interval();
|
||||||
#endif
|
#endif
|
||||||
|
@ -5135,7 +5136,7 @@ retry:
|
||||||
void session_impl::announce_lsd(sha1_hash const& ih, int port, bool broadcast)
|
void session_impl::announce_lsd(sha1_hash const& ih, int port, bool broadcast)
|
||||||
{
|
{
|
||||||
// use internal listen port for local peers
|
// use internal listen port for local peers
|
||||||
if (m_lsd.get())
|
if (m_lsd)
|
||||||
m_lsd->announce(ih, port, broadcast);
|
m_lsd->announce(ih, port, broadcast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5514,7 +5515,7 @@ retry:
|
||||||
void session_impl::maybe_update_udp_mapping(int nat, int local_port, int external_port)
|
void session_impl::maybe_update_udp_mapping(int nat, int local_port, int external_port)
|
||||||
{
|
{
|
||||||
int local, external, protocol;
|
int local, external, protocol;
|
||||||
if (nat == 0 && m_natpmp.get())
|
if (nat == 0 && m_natpmp)
|
||||||
{
|
{
|
||||||
if (m_udp_mapping[nat] != -1)
|
if (m_udp_mapping[nat] != -1)
|
||||||
{
|
{
|
||||||
|
@ -5530,7 +5531,7 @@ retry:
|
||||||
, local_port, external_port);
|
, local_port, external_port);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (nat == 1 && m_upnp.get())
|
else if (nat == 1 && m_upnp)
|
||||||
{
|
{
|
||||||
if (m_udp_mapping[nat] != -1)
|
if (m_udp_mapping[nat] != -1)
|
||||||
{
|
{
|
||||||
|
@ -6206,7 +6207,7 @@ retry:
|
||||||
|
|
||||||
if (m_lsd) return;
|
if (m_lsd) return;
|
||||||
|
|
||||||
m_lsd = new lsd(m_io_service
|
m_lsd = boost::make_shared<lsd>(m_io_service
|
||||||
, boost::bind(&session_impl::on_lsd_peer, this, _1, _2));
|
, boost::bind(&session_impl::on_lsd_peer, this, _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6218,15 +6219,12 @@ retry:
|
||||||
|
|
||||||
// the natpmp constructor may fail and call the callbacks
|
// the natpmp constructor may fail and call the callbacks
|
||||||
// into the session_impl.
|
// into the session_impl.
|
||||||
natpmp* n = new (std::nothrow) natpmp(m_io_service
|
m_natpmp = boost::make_shared<natpmp>(m_io_service
|
||||||
, m_listen_interface.address()
|
|
||||||
, boost::bind(&session_impl::on_port_mapping
|
, boost::bind(&session_impl::on_port_mapping
|
||||||
, this, _1, _2, _3, _4, 0)
|
, this, _1, _2, _3, _4, 0)
|
||||||
, boost::bind(&session_impl::on_port_map_log
|
, boost::bind(&session_impl::on_port_map_log
|
||||||
, this, _1, 0));
|
, this, _1, 0));
|
||||||
if (n == 0) return 0;
|
m_natpmp->start();
|
||||||
|
|
||||||
m_natpmp = n;
|
|
||||||
|
|
||||||
int ssl_port = ssl_listen_port();
|
int ssl_port = ssl_listen_port();
|
||||||
|
|
||||||
|
@ -6246,7 +6244,7 @@ retry:
|
||||||
, ssl_port, ssl_port);
|
, ssl_port, ssl_port);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return n;
|
return m_natpmp.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
upnp* session_impl::start_upnp()
|
upnp* session_impl::start_upnp()
|
||||||
|
@ -6256,7 +6254,7 @@ retry:
|
||||||
if (m_upnp) return m_upnp.get();
|
if (m_upnp) return m_upnp.get();
|
||||||
|
|
||||||
// the upnp constructor may fail and call the callbacks
|
// the upnp constructor may fail and call the callbacks
|
||||||
upnp* u = new (std::nothrow) upnp(m_io_service
|
m_upnp = boost::make_shared<upnp>(m_io_service
|
||||||
, m_listen_interface.address()
|
, m_listen_interface.address()
|
||||||
, m_settings.get_str(settings_pack::user_agent)
|
, m_settings.get_str(settings_pack::user_agent)
|
||||||
, boost::bind(&session_impl::on_port_mapping
|
, boost::bind(&session_impl::on_port_mapping
|
||||||
|
@ -6264,10 +6262,7 @@ retry:
|
||||||
, boost::bind(&session_impl::on_port_map_log
|
, boost::bind(&session_impl::on_port_map_log
|
||||||
, this, _1, 1)
|
, this, _1, 1)
|
||||||
, m_settings.get_bool(settings_pack::upnp_ignore_nonrouters));
|
, m_settings.get_bool(settings_pack::upnp_ignore_nonrouters));
|
||||||
|
m_upnp->start();
|
||||||
if (u == 0) return 0;
|
|
||||||
|
|
||||||
m_upnp = u;
|
|
||||||
|
|
||||||
int ssl_port = ssl_listen_port();
|
int ssl_port = ssl_listen_port();
|
||||||
|
|
||||||
|
@ -6288,7 +6283,7 @@ retry:
|
||||||
, ssl_port, ssl_port);
|
, ssl_port, ssl_port);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return u;
|
return m_upnp.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
int session_impl::add_port_mapping(int t, int external_port
|
int session_impl::add_port_mapping(int t, int external_port
|
||||||
|
@ -6310,14 +6305,14 @@ retry:
|
||||||
|
|
||||||
void session_impl::stop_lsd()
|
void session_impl::stop_lsd()
|
||||||
{
|
{
|
||||||
if (m_lsd.get())
|
if (m_lsd)
|
||||||
m_lsd->close();
|
m_lsd->close();
|
||||||
m_lsd = 0;
|
m_lsd.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_impl::stop_natpmp()
|
void session_impl::stop_natpmp()
|
||||||
{
|
{
|
||||||
if (m_natpmp.get())
|
if (m_natpmp)
|
||||||
{
|
{
|
||||||
m_natpmp->close();
|
m_natpmp->close();
|
||||||
m_udp_mapping[0] = -1;
|
m_udp_mapping[0] = -1;
|
||||||
|
@ -6327,12 +6322,12 @@ retry:
|
||||||
m_ssl_udp_mapping[0] = -1;
|
m_ssl_udp_mapping[0] = -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
m_natpmp = 0;
|
m_natpmp.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_impl::stop_upnp()
|
void session_impl::stop_upnp()
|
||||||
{
|
{
|
||||||
if (m_upnp.get())
|
if (m_upnp)
|
||||||
{
|
{
|
||||||
m_upnp->close();
|
m_upnp->close();
|
||||||
m_udp_mapping[1] = -1;
|
m_udp_mapping[1] = -1;
|
||||||
|
@ -6342,7 +6337,7 @@ retry:
|
||||||
m_ssl_udp_mapping[1] = -1;
|
m_ssl_udp_mapping[1] = -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
m_upnp = 0;
|
m_upnp.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
external_ip const& session_impl::external_address() const
|
external_ip const& session_impl::external_address() const
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Copyright (c) 2007-2014, Arvid Norberg
|
Copyright (c) 2015, Arvid Norberg
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -30,57 +30,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TORRENT_INTRUSIVE_PTR_BASE
|
#include "libtorrent/aux_/session_settings.hpp"
|
||||||
#define TORRENT_INTRUSIVE_PTR_BASE
|
|
||||||
|
|
||||||
#include <boost/checked_delete.hpp>
|
namespace libtorrent { namespace aux
|
||||||
#include <boost/intrusive_ptr.hpp>
|
|
||||||
#include "libtorrent/config.hpp"
|
|
||||||
#include "libtorrent/assert.hpp"
|
|
||||||
#include <boost/atomic.hpp>
|
|
||||||
|
|
||||||
namespace libtorrent
|
|
||||||
{
|
{
|
||||||
// TODO: 2 remove this class and transition over to using shared_ptr and
|
session_settings::session_settings()
|
||||||
// make_shared instead
|
|
||||||
template<class T>
|
|
||||||
struct intrusive_ptr_base
|
|
||||||
{
|
{
|
||||||
intrusive_ptr_base(intrusive_ptr_base<T> const&)
|
initialize_default_settings(*this);
|
||||||
: m_refs(0) {}
|
}
|
||||||
|
} }
|
||||||
friend void intrusive_ptr_add_ref(intrusive_ptr_base<T> const* s)
|
|
||||||
{
|
|
||||||
TORRENT_ASSERT(s != 0);
|
|
||||||
TORRENT_ASSERT(s->m_refs >= 0);
|
|
||||||
++s->m_refs;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend void intrusive_ptr_release(intrusive_ptr_base<T> const* s)
|
|
||||||
{
|
|
||||||
TORRENT_ASSERT(s != 0);
|
|
||||||
TORRENT_ASSERT(s->m_refs > 0);
|
|
||||||
if (--s->m_refs == 0)
|
|
||||||
boost::checked_delete(static_cast<T const*>(s));
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::intrusive_ptr<T> self()
|
|
||||||
{ return boost::intrusive_ptr<T>((T*)this); }
|
|
||||||
|
|
||||||
boost::intrusive_ptr<const T> self() const
|
|
||||||
{ return boost::intrusive_ptr<const T>((T const*)this); }
|
|
||||||
|
|
||||||
int refcount() const { return m_refs; }
|
|
||||||
|
|
||||||
intrusive_ptr_base(): m_refs(0) {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
// reference counter for intrusive_ptr
|
|
||||||
mutable boost::atomic<int> m_refs;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -7710,7 +7710,7 @@ namespace libtorrent
|
||||||
// if it's lower rank than the incoming connection
|
// if it's lower rank than the incoming connection
|
||||||
peer_connection* peer = find_lowest_ranking_peer();
|
peer_connection* peer = find_lowest_ranking_peer();
|
||||||
|
|
||||||
// TODO: 3 if peer is a really good peer, maybe we shouldn't disconnect it
|
// TODO: 2 if peer is a really good peer, maybe we shouldn't disconnect it
|
||||||
if (peer && peer->peer_rank() < p->peer_rank())
|
if (peer && peer->peer_rank() < p->peer_rank())
|
||||||
{
|
{
|
||||||
peer->disconnect(errors::too_many_connections, peer_connection_interface::op_bittorrent);
|
peer->disconnect(errors::too_many_connections, peer_connection_interface::op_bittorrent);
|
||||||
|
|
25
src/upnp.cpp
25
src/upnp.cpp
|
@ -72,15 +72,14 @@ static error_code ec;
|
||||||
upnp::upnp(io_service& ios
|
upnp::upnp(io_service& ios
|
||||||
, address const& listen_interface, std::string const& user_agent
|
, address const& listen_interface, std::string const& user_agent
|
||||||
, portmap_callback_t const& cb, log_callback_t const& lcb
|
, portmap_callback_t const& cb, log_callback_t const& lcb
|
||||||
, bool ignore_nonrouters, void* state)
|
, bool ignore_nonrouters)
|
||||||
: m_user_agent(user_agent)
|
: m_user_agent(user_agent)
|
||||||
, m_callback(cb)
|
, m_callback(cb)
|
||||||
, m_log_callback(lcb)
|
, m_log_callback(lcb)
|
||||||
, m_retry_count(0)
|
, m_retry_count(0)
|
||||||
, m_io_service(ios)
|
, m_io_service(ios)
|
||||||
, m_resolver(ios)
|
, m_resolver(ios)
|
||||||
, m_socket(udp::endpoint(address_v4::from_string("239.255.255.250", ec), 1900)
|
, m_socket(udp::endpoint(address_v4::from_string("239.255.255.250", ec), 1900))
|
||||||
, boost::bind(&upnp::on_reply, self(), _1, _2, _3))
|
|
||||||
, m_broadcast_timer(ios)
|
, m_broadcast_timer(ios)
|
||||||
, m_refresh_timer(ios)
|
, m_refresh_timer(ios)
|
||||||
, m_map_timer(ios)
|
, m_map_timer(ios)
|
||||||
|
@ -90,9 +89,13 @@ upnp::upnp(io_service& ios
|
||||||
, m_last_if_update(min_time())
|
, m_last_if_update(min_time())
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(cb);
|
TORRENT_ASSERT(cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
void upnp::start(void* state)
|
||||||
|
{
|
||||||
error_code ec;
|
error_code ec;
|
||||||
m_socket.open(ios, ec);
|
m_socket.open(boost::bind(&upnp::on_reply, self(), _1, _2, _3)
|
||||||
|
, m_refresh_timer.get_io_service(), ec);
|
||||||
|
|
||||||
if (state)
|
if (state)
|
||||||
{
|
{
|
||||||
|
@ -275,7 +278,7 @@ void upnp::resend_request(error_code const& ec)
|
||||||
#endif
|
#endif
|
||||||
if (ec) return;
|
if (ec) return;
|
||||||
|
|
||||||
boost::intrusive_ptr<upnp> me(self());
|
boost::shared_ptr<upnp> me(self());
|
||||||
|
|
||||||
mutex::scoped_lock l(m_mutex);
|
mutex::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
@ -330,7 +333,7 @@ void upnp::resend_request(error_code const& ec)
|
||||||
void upnp::on_reply(udp::endpoint const& from, char* buffer
|
void upnp::on_reply(udp::endpoint const& from, char* buffer
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
boost::intrusive_ptr<upnp> me(self());
|
boost::shared_ptr<upnp> me(self());
|
||||||
|
|
||||||
mutex::scoped_lock l(m_mutex);
|
mutex::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
@ -742,7 +745,7 @@ void upnp::update_map(rootdevice& d, int i, mutex::scoped_lock& l)
|
||||||
|
|
||||||
if (d.upnp_connection) return;
|
if (d.upnp_connection) return;
|
||||||
|
|
||||||
boost::intrusive_ptr<upnp> me(self());
|
boost::shared_ptr<upnp> me(self());
|
||||||
|
|
||||||
mapping_t& m = d.mapping[i];
|
mapping_t& m = d.mapping[i];
|
||||||
|
|
||||||
|
@ -920,7 +923,7 @@ void upnp::on_upnp_xml(error_code const& e
|
||||||
, libtorrent::http_parser const& p, rootdevice& d
|
, libtorrent::http_parser const& p, rootdevice& d
|
||||||
, http_connection& c)
|
, http_connection& c)
|
||||||
{
|
{
|
||||||
boost::intrusive_ptr<upnp> me(self());
|
boost::shared_ptr<upnp> me(self());
|
||||||
|
|
||||||
mutex::scoped_lock l(m_mutex);
|
mutex::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
@ -1227,7 +1230,7 @@ void upnp::on_upnp_get_ip_address_response(error_code const& e
|
||||||
, libtorrent::http_parser const& p, rootdevice& d
|
, libtorrent::http_parser const& p, rootdevice& d
|
||||||
, http_connection& c)
|
, http_connection& c)
|
||||||
{
|
{
|
||||||
boost::intrusive_ptr<upnp> me(self());
|
boost::shared_ptr<upnp> me(self());
|
||||||
|
|
||||||
mutex::scoped_lock l(m_mutex);
|
mutex::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
@ -1307,7 +1310,7 @@ void upnp::on_upnp_map_response(error_code const& e
|
||||||
, libtorrent::http_parser const& p, rootdevice& d, int mapping
|
, libtorrent::http_parser const& p, rootdevice& d, int mapping
|
||||||
, http_connection& c)
|
, http_connection& c)
|
||||||
{
|
{
|
||||||
boost::intrusive_ptr<upnp> me(self());
|
boost::shared_ptr<upnp> me(self());
|
||||||
|
|
||||||
mutex::scoped_lock l(m_mutex);
|
mutex::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
@ -1475,7 +1478,7 @@ void upnp::on_upnp_unmap_response(error_code const& e
|
||||||
, libtorrent::http_parser const& p, rootdevice& d, int mapping
|
, libtorrent::http_parser const& p, rootdevice& d, int mapping
|
||||||
, http_connection& c)
|
, http_connection& c)
|
||||||
{
|
{
|
||||||
boost::intrusive_ptr<upnp> me(self());
|
boost::shared_ptr<upnp> me(self());
|
||||||
|
|
||||||
mutex::scoped_lock l(m_mutex);
|
mutex::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
|
|
@ -433,7 +433,7 @@ bool get_item_cb(dht::item& i)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: 3 test obfuscated_get_peers
|
// TODO: 2 test obfuscated_get_peers
|
||||||
int test_main()
|
int test_main()
|
||||||
{
|
{
|
||||||
dht_settings sett;
|
dht_settings sett;
|
||||||
|
|
|
@ -285,7 +285,7 @@ void test_transfer(int proxy_type, settings_pack const& sett
|
||||||
// us catch all events that failed (and would put the torrent
|
// us catch all events that failed (and would put the torrent
|
||||||
// back into upload mode) before we restart it.
|
// back into upload mode) before we restart it.
|
||||||
|
|
||||||
// TODO: 3 factor out the disk-full test into its own unit test
|
// TODO: 2 factor out the disk-full test into its own unit test
|
||||||
if (test_disk_full && st2.upload_mode && ++upload_mode_timer > 10)
|
if (test_disk_full && st2.upload_mode && ++upload_mode_timer > 10)
|
||||||
{
|
{
|
||||||
test_disk_full = false;
|
test_disk_full = false;
|
||||||
|
|
|
@ -38,7 +38,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/ref.hpp>
|
#include <boost/ref.hpp>
|
||||||
#include <boost/intrusive_ptr.hpp>
|
#include <boost/smart_ptr.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
|
@ -144,15 +144,17 @@ int run_upnp_test(char const* root_filename, char const* router_model, char cons
|
||||||
xml.write(soap_add_response, sizeof(soap_add_response)-1);
|
xml.write(soap_add_response, sizeof(soap_add_response)-1);
|
||||||
xml.close();
|
xml.close();
|
||||||
|
|
||||||
sock = new broadcast_socket(udp::endpoint(address_v4::from_string("239.255.255.250"), 1900)
|
sock = new broadcast_socket(udp::endpoint(address_v4::from_string("239.255.255.250")
|
||||||
, &incoming_msearch);
|
, 1900));
|
||||||
|
|
||||||
sock->open(ios, ec);
|
sock->open(&incoming_msearch, ios, ec);
|
||||||
|
|
||||||
std::string user_agent = "test agent";
|
std::string user_agent = "test agent";
|
||||||
|
|
||||||
boost::intrusive_ptr<upnp> upnp_handler = new upnp(ios, address_v4::from_string("127.0.0.1")
|
boost::shared_ptr<upnp> upnp_handler = boost::make_shared<upnp>(ios
|
||||||
|
, address_v4::from_string("127.0.0.1")
|
||||||
, user_agent, &callback, &log_callback, false);
|
, user_agent, &callback, &log_callback, false);
|
||||||
|
upnp_handler->start();
|
||||||
upnp_handler->discover_device();
|
upnp_handler->discover_device();
|
||||||
|
|
||||||
for (int i = 0; i < 20; ++i)
|
for (int i = 0; i < 20; ++i)
|
||||||
|
|
Loading…
Reference in New Issue