switched over to asio from boost-1.35
This commit is contained in:
parent
cb5f783987
commit
c7e6c04705
1
Jamfile
1
Jamfile
|
@ -330,7 +330,6 @@ ZLIB_SOURCES =
|
||||||
|
|
||||||
local usage-requirements =
|
local usage-requirements =
|
||||||
<include>./include
|
<include>./include
|
||||||
<include>./include/libtorrent
|
|
||||||
<zlib>shipped:<include>./zlib
|
<zlib>shipped:<include>./zlib
|
||||||
<variant>release:<define>NDEBUG
|
<variant>release:<define>NDEBUG
|
||||||
<define>_FILE_OFFSET_BITS=64
|
<define>_FILE_OFFSET_BITS=64
|
||||||
|
|
|
@ -9,7 +9,7 @@ using namespace libtorrent;
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
io_service ios;
|
io_service ios;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
|
|
||||||
address local = guess_local_address(ios);
|
address local = guess_local_address(ios);
|
||||||
std::cout << "Local address: " << local << std::endl;
|
std::cout << "Local address: " << local << std::endl;
|
||||||
|
|
|
@ -151,7 +151,7 @@ namespace libtorrent
|
||||||
|
|
||||||
void async_accept(boost::shared_ptr<socket_acceptor> const& listener);
|
void async_accept(boost::shared_ptr<socket_acceptor> const& listener);
|
||||||
void on_incoming_connection(boost::shared_ptr<socket_type> const& s
|
void on_incoming_connection(boost::shared_ptr<socket_type> const& s
|
||||||
, boost::weak_ptr<socket_acceptor> listener, asio::error_code const& e);
|
, boost::weak_ptr<socket_acceptor> listener, error_code const& e);
|
||||||
|
|
||||||
// must be locked to access the data
|
// must be locked to access the data
|
||||||
// in this struct
|
// in this struct
|
||||||
|
@ -498,7 +498,7 @@ namespace libtorrent
|
||||||
// NAT or not.
|
// NAT or not.
|
||||||
bool m_incoming_connection;
|
bool m_incoming_connection;
|
||||||
|
|
||||||
void second_tick(asio::error_code const& e);
|
void second_tick(error_code const& e);
|
||||||
void recalculate_auto_managed_torrents();
|
void recalculate_auto_managed_torrents();
|
||||||
void recalculate_unchoke_slots(int congested_torrents
|
void recalculate_unchoke_slots(int congested_torrents
|
||||||
, int uncongested_torrents);
|
, int uncongested_torrents);
|
||||||
|
@ -528,7 +528,7 @@ namespace libtorrent
|
||||||
|
|
||||||
udp_socket m_dht_socket;
|
udp_socket m_dht_socket;
|
||||||
|
|
||||||
void on_receive_udp(asio::error_code const& e
|
void on_receive_udp(error_code const& e
|
||||||
, udp::endpoint const& ep, char const* buf, int len);
|
, udp::endpoint const& ep, char const* buf, int len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -256,12 +256,12 @@ private:
|
||||||
|
|
||||||
if (m_abort) return;
|
if (m_abort) return;
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_history_timer.expires_at(e.expires_at, ec);
|
m_history_timer.expires_at(e.expires_at, ec);
|
||||||
m_history_timer.async_wait(bind(&bandwidth_manager::on_history_expire, this, _1));
|
m_history_timer.async_wait(bind(&bandwidth_manager::on_history_expire, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_history_expire(asio::error_code const& e)
|
void on_history_expire(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -298,7 +298,7 @@ private:
|
||||||
// now, wait for the next chunk to expire
|
// now, wait for the next chunk to expire
|
||||||
if (!m_history.empty() && !m_abort)
|
if (!m_history.empty() && !m_abort)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_history_timer.expires_at(m_history.back().expires_at, ec);
|
m_history_timer.expires_at(m_history.back().expires_at, ec);
|
||||||
m_history_timer.async_wait(bind(&bandwidth_manager::on_history_expire, this, _1));
|
m_history_timer.async_wait(bind(&bandwidth_manager::on_history_expire, this, _1));
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ namespace libtorrent
|
||||||
int common_bits(unsigned char const* b1
|
int common_bits(unsigned char const* b1
|
||||||
, unsigned char const* b2, int n);
|
, unsigned char const* b2, int n);
|
||||||
|
|
||||||
TORRENT_EXPORT address guess_local_address(asio::io_service&);
|
TORRENT_EXPORT address guess_local_address(io_service&);
|
||||||
|
|
||||||
typedef boost::function<void(udp::endpoint const& from
|
typedef boost::function<void(udp::endpoint const& from
|
||||||
, char* buffer, int size)> receive_handler_t;
|
, char* buffer, int size)> receive_handler_t;
|
||||||
|
@ -59,11 +59,11 @@ namespace libtorrent
|
||||||
class TORRENT_EXPORT broadcast_socket
|
class TORRENT_EXPORT broadcast_socket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
broadcast_socket(asio::io_service& ios, udp::endpoint const& multicast_endpoint
|
broadcast_socket(io_service& ios, udp::endpoint const& multicast_endpoint
|
||||||
, receive_handler_t const& handler, bool loopback = true);
|
, receive_handler_t const& handler, bool loopback = true);
|
||||||
~broadcast_socket() { close(); }
|
~broadcast_socket() { close(); }
|
||||||
|
|
||||||
void send(char const* buffer, int size, asio::error_code& ec);
|
void send(char const* buffer, int size, error_code& ec);
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -77,12 +77,12 @@ namespace libtorrent
|
||||||
void close()
|
void close()
|
||||||
{
|
{
|
||||||
if (!socket) return;
|
if (!socket) return;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
socket->close(ec);
|
socket->close(ec);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void on_receive(socket_entry* s, asio::error_code const& ec
|
void on_receive(socket_entry* s, error_code const& ec
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
void open_unicast_socket(io_service& ios, address const& addr);
|
void open_unicast_socket(io_service& ios, address const& addr);
|
||||||
void open_multicast_socket(io_service& ios, address const& addr
|
void open_multicast_socket(io_service& ios, address const& addr
|
||||||
|
|
|
@ -141,9 +141,9 @@ namespace libtorrent
|
||||||
// called from the main loop when this connection has any
|
// called from the main loop when this connection has any
|
||||||
// work to do.
|
// work to do.
|
||||||
|
|
||||||
void on_sent(asio::error_code const& error
|
void on_sent(error_code const& error
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
void on_receive(asio::error_code const& error
|
void on_receive(error_code const& error
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
|
|
||||||
virtual void get_specific_peer_info(peer_info& p) const;
|
virtual void get_specific_peer_info(peer_info& p) const;
|
||||||
|
|
|
@ -34,12 +34,14 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#define TORRENT_CHAINED_BUFFER_HPP_INCLUDED
|
#define TORRENT_CHAINED_BUFFER_HPP_INCLUDED
|
||||||
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
#include <asio/buffer.hpp>
|
#include <boost/asio/buffer.hpp>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
namespace asio = boost::asio;
|
||||||
|
|
||||||
struct chained_buffer
|
struct chained_buffer
|
||||||
{
|
{
|
||||||
chained_buffer(): m_bytes(0), m_capacity(0) {}
|
chained_buffer(): m_bytes(0), m_capacity(0) {}
|
||||||
|
|
|
@ -71,7 +71,7 @@ public:
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void try_connect();
|
void try_connect();
|
||||||
void on_timeout(asio::error_code const& e);
|
void on_timeout(error_code const& e);
|
||||||
|
|
||||||
struct entry
|
struct entry
|
||||||
{
|
{
|
||||||
|
|
|
@ -149,7 +149,7 @@ namespace libtorrent
|
||||||
// of disk io jobs
|
// of disk io jobs
|
||||||
struct disk_io_thread : boost::noncopyable
|
struct disk_io_thread : boost::noncopyable
|
||||||
{
|
{
|
||||||
disk_io_thread(asio::io_service& ios, int block_size = 16 * 1024);
|
disk_io_thread(io_service& ios, int block_size = 16 * 1024);
|
||||||
~disk_io_thread();
|
~disk_io_thread();
|
||||||
|
|
||||||
#ifdef TORRENT_STATS
|
#ifdef TORRENT_STATS
|
||||||
|
@ -292,7 +292,7 @@ namespace libtorrent
|
||||||
size_type m_writes;
|
size_type m_writes;
|
||||||
size_type m_blocks_written;
|
size_type m_blocks_written;
|
||||||
|
|
||||||
asio::io_service& m_ios;
|
io_service& m_ios;
|
||||||
|
|
||||||
// thread for performing blocking disk io operations
|
// thread for performing blocking disk io operations
|
||||||
boost::thread m_disk_io_thread;
|
boost::thread m_disk_io_thread;
|
||||||
|
|
|
@ -56,10 +56,10 @@ namespace libtorrent
|
||||||
|
|
||||||
// returns a list of the configured IP interfaces
|
// returns a list of the configured IP interfaces
|
||||||
// on the machine
|
// on the machine
|
||||||
TORRENT_EXPORT std::vector<ip_interface> enum_net_interfaces(asio::io_service& ios
|
TORRENT_EXPORT std::vector<ip_interface> enum_net_interfaces(io_service& ios
|
||||||
, asio::error_code& ec);
|
, error_code& ec);
|
||||||
|
|
||||||
TORRENT_EXPORT std::vector<ip_route> enum_routes(asio::io_service& ios, asio::error_code& ec);
|
TORRENT_EXPORT std::vector<ip_route> enum_routes(io_service& ios, error_code& ec);
|
||||||
|
|
||||||
// returns true if the specified address is on the same
|
// returns true if the specified address is on the same
|
||||||
// local network as the specified interface
|
// local network as the specified interface
|
||||||
|
@ -67,11 +67,11 @@ namespace libtorrent
|
||||||
|
|
||||||
// returns true if the specified address is on the same
|
// returns true if the specified address is on the same
|
||||||
// local network as us
|
// local network as us
|
||||||
TORRENT_EXPORT bool in_local_network(asio::io_service& ios, address const& addr
|
TORRENT_EXPORT bool in_local_network(io_service& ios, address const& addr
|
||||||
, asio::error_code& ec);
|
, error_code& ec);
|
||||||
|
|
||||||
TORRENT_EXPORT address get_default_gateway(asio::io_service& ios
|
TORRENT_EXPORT address get_default_gateway(io_service& ios
|
||||||
, asio::error_code& ec);
|
, error_code& ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -59,7 +59,7 @@ namespace libtorrent
|
||||||
struct http_connection;
|
struct http_connection;
|
||||||
class connection_queue;
|
class connection_queue;
|
||||||
|
|
||||||
typedef boost::function<void(asio::error_code const&
|
typedef boost::function<void(error_code const&
|
||||||
, http_parser const&, char const* data, int size)> http_handler;
|
, http_parser const&, char const* data, int size)> http_handler;
|
||||||
|
|
||||||
typedef boost::function<void(http_connection&)> http_connect_handler;
|
typedef boost::function<void(http_connection&)> http_connect_handler;
|
||||||
|
@ -70,7 +70,7 @@ typedef boost::function<void(http_connection&)> http_connect_handler;
|
||||||
// will always be 0
|
// will always be 0
|
||||||
struct http_connection : boost::enable_shared_from_this<http_connection>, boost::noncopyable
|
struct http_connection : boost::enable_shared_from_this<http_connection>, boost::noncopyable
|
||||||
{
|
{
|
||||||
http_connection(asio::io_service& ios, connection_queue& cc
|
http_connection(io_service& ios, connection_queue& cc
|
||||||
, http_handler const& handler, bool bottled = true
|
, http_handler const& handler, bool bottled = true
|
||||||
, http_connect_handler const& ch = http_connect_handler())
|
, http_connect_handler const& ch = http_connect_handler())
|
||||||
: m_sock(ios)
|
: m_sock(ios)
|
||||||
|
@ -121,19 +121,19 @@ struct http_connection : boost::enable_shared_from_this<http_connection>, boost:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void on_resolve(asio::error_code const& e
|
void on_resolve(error_code const& e
|
||||||
, tcp::resolver::iterator i);
|
, tcp::resolver::iterator i);
|
||||||
void connect(int ticket, tcp::endpoint target_address);
|
void connect(int ticket, tcp::endpoint target_address);
|
||||||
void on_connect_timeout();
|
void on_connect_timeout();
|
||||||
void on_connect(asio::error_code const& e
|
void on_connect(error_code const& e
|
||||||
/* , tcp::resolver::iterator i*/);
|
/* , tcp::resolver::iterator i*/);
|
||||||
void on_write(asio::error_code const& e);
|
void on_write(error_code const& e);
|
||||||
void on_read(asio::error_code const& e, std::size_t bytes_transferred);
|
void on_read(error_code const& e, std::size_t bytes_transferred);
|
||||||
static void on_timeout(boost::weak_ptr<http_connection> p
|
static void on_timeout(boost::weak_ptr<http_connection> p
|
||||||
, asio::error_code const& e);
|
, error_code const& e);
|
||||||
void on_assign_bandwidth(asio::error_code const& e);
|
void on_assign_bandwidth(error_code const& e);
|
||||||
|
|
||||||
void callback(asio::error_code const& e, char const* data = 0, int size = 0);
|
void callback(error_code const& e, char const* data = 0, int size = 0);
|
||||||
|
|
||||||
std::vector<char> m_recvbuffer;
|
std::vector<char> m_recvbuffer;
|
||||||
#ifdef TORRENT_USE_OPENSSL
|
#ifdef TORRENT_USE_OPENSSL
|
||||||
|
|
|
@ -41,7 +41,7 @@ class http_stream : public proxy_base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
explicit http_stream(asio::io_service& io_service)
|
explicit http_stream(io_service& io_service)
|
||||||
: proxy_base(io_service)
|
: proxy_base(io_service)
|
||||||
, m_no_connect(false)
|
, m_no_connect(false)
|
||||||
{}
|
{}
|
||||||
|
@ -55,7 +55,7 @@ public:
|
||||||
m_password = password;
|
m_password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef boost::function<void(asio::error_code const&)> handler_type;
|
typedef boost::function<void(error_code const&)> handler_type;
|
||||||
|
|
||||||
template <class Handler>
|
template <class Handler>
|
||||||
void async_connect(endpoint_type const& endpoint, Handler const& handler)
|
void async_connect(endpoint_type const& endpoint, Handler const& handler)
|
||||||
|
@ -80,11 +80,11 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, boost::shared_ptr<handler_type> h);
|
, boost::shared_ptr<handler_type> h);
|
||||||
void connected(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void connected(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void handshake1(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void handshake1(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void handshake2(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void handshake2(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
|
|
||||||
// send and receive buffer
|
// send and receive buffer
|
||||||
std::vector<char> m_buffer;
|
std::vector<char> m_buffer;
|
||||||
|
|
|
@ -82,7 +82,7 @@ namespace libtorrent
|
||||||
boost::intrusive_ptr<http_tracker_connection> self()
|
boost::intrusive_ptr<http_tracker_connection> self()
|
||||||
{ return boost::intrusive_ptr<http_tracker_connection>(this); }
|
{ return boost::intrusive_ptr<http_tracker_connection>(this); }
|
||||||
|
|
||||||
void on_response(asio::error_code const& ec, http_parser const& parser
|
void on_response(error_code const& ec, http_parser const& parser
|
||||||
, char const* data, int size);
|
, char const* data, int size);
|
||||||
|
|
||||||
virtual void on_timeout() {}
|
virtual void on_timeout() {}
|
||||||
|
|
|
@ -34,14 +34,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#define TORRENT_INSTANTIATE_CONNECTION
|
#define TORRENT_INSTANTIATE_CONNECTION
|
||||||
|
|
||||||
#include "libtorrent/socket_type.hpp"
|
#include "libtorrent/socket_type.hpp"
|
||||||
#include <asio/io_service.hpp>
|
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
struct proxy_settings;
|
struct proxy_settings;
|
||||||
|
|
||||||
bool instantiate_connection(asio::io_service& ios
|
bool instantiate_connection(io_service& ios
|
||||||
, proxy_settings const& ps, socket_type& s);
|
, proxy_settings const& ps, socket_type& s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void done();
|
void done();
|
||||||
void invoke(node_id const& id, asio::ip::udp::endpoint addr);
|
void invoke(node_id const& id, udp::endpoint addr);
|
||||||
|
|
||||||
closest_nodes(
|
closest_nodes(
|
||||||
node_id target
|
node_id target
|
||||||
|
|
|
@ -53,6 +53,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/session_settings.hpp"
|
#include "libtorrent/session_settings.hpp"
|
||||||
#include "libtorrent/session_status.hpp"
|
#include "libtorrent/session_status.hpp"
|
||||||
#include "libtorrent/udp_socket.hpp"
|
#include "libtorrent/udp_socket.hpp"
|
||||||
|
#include "libtorrent/socket.hpp"
|
||||||
|
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
@ -95,13 +96,13 @@ namespace libtorrent { namespace dht
|
||||||
boost::intrusive_ptr<dht_tracker> self()
|
boost::intrusive_ptr<dht_tracker> self()
|
||||||
{ return boost::intrusive_ptr<dht_tracker>(this); }
|
{ return boost::intrusive_ptr<dht_tracker>(this); }
|
||||||
|
|
||||||
void on_name_lookup(asio::error_code const& e
|
void on_name_lookup(error_code const& e
|
||||||
, udp::resolver::iterator host);
|
, udp::resolver::iterator host);
|
||||||
void on_router_name_lookup(asio::error_code const& e
|
void on_router_name_lookup(error_code const& e
|
||||||
, udp::resolver::iterator host);
|
, udp::resolver::iterator host);
|
||||||
void connection_timeout(asio::error_code const& e);
|
void connection_timeout(error_code const& e);
|
||||||
void refresh_timeout(asio::error_code const& e);
|
void refresh_timeout(error_code const& e);
|
||||||
void tick(asio::error_code const& e);
|
void tick(error_code const& e);
|
||||||
|
|
||||||
void on_bootstrap();
|
void on_bootstrap();
|
||||||
void send_packet(msg const& m);
|
void send_packet(msg const& m);
|
||||||
|
|
|
@ -48,8 +48,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
|
|
||||||
typedef std::vector<char> packet_t;
|
typedef std::vector<char> packet_t;
|
||||||
|
|
||||||
class rpc_manager;
|
class rpc_manager;
|
||||||
|
|
|
@ -36,15 +36,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <libtorrent/kademlia/node_id.hpp>
|
#include <libtorrent/kademlia/node_id.hpp>
|
||||||
#include "libtorrent/entry.hpp"
|
#include "libtorrent/entry.hpp"
|
||||||
#include <asio/ip/udp.hpp>
|
#include <boost/asio/ip/udp.hpp>
|
||||||
|
|
||||||
namespace libtorrent {
|
namespace libtorrent {
|
||||||
namespace dht {
|
namespace dht {
|
||||||
|
|
||||||
typedef std::vector<char> packet_t;
|
typedef std::vector<char> packet_t;
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
|
|
||||||
namespace messages
|
namespace messages
|
||||||
{
|
{
|
||||||
enum { ping = 0, find_node = 1, get_peers = 2, announce_peer = 3, error = 4 };
|
enum { ping = 0, find_node = 1, get_peers = 2, announce_peer = 3, error = 4 };
|
||||||
|
|
|
@ -56,8 +56,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
|
|
||||||
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
||||||
TORRENT_DECLARE_LOG(node);
|
TORRENT_DECLARE_LOG(node);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,11 +41,11 @@ namespace libtorrent { namespace dht
|
||||||
|
|
||||||
struct node_entry
|
struct node_entry
|
||||||
{
|
{
|
||||||
node_entry(node_id const& id_, asio::ip::udp::endpoint addr_)
|
node_entry(node_id const& id_, udp::endpoint addr_)
|
||||||
: id(id_)
|
: id(id_)
|
||||||
, addr(addr_)
|
, addr(addr_)
|
||||||
, fail_count(0) {}
|
, fail_count(0) {}
|
||||||
node_entry(asio::ip::udp::endpoint addr_)
|
node_entry(udp::endpoint addr_)
|
||||||
: id(0)
|
: id(0)
|
||||||
, addr(addr_)
|
, addr(addr_)
|
||||||
, fail_count(0) {}
|
, fail_count(0) {}
|
||||||
|
|
|
@ -55,8 +55,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
|
|
||||||
//TORRENT_DECLARE_LOG(table);
|
//TORRENT_DECLARE_LOG(table);
|
||||||
|
|
||||||
typedef std::vector<node_entry> bucket_t;
|
typedef std::vector<node_entry> bucket_t;
|
||||||
|
|
|
@ -56,7 +56,6 @@ namespace libtorrent { namespace dht
|
||||||
|
|
||||||
struct observer;
|
struct observer;
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
||||||
TORRENT_DECLARE_LOG(rpc);
|
TORRENT_DECLARE_LOG(rpc);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -67,7 +67,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void resend_announce(asio::error_code const& e, std::string msg);
|
void resend_announce(error_code const& e, std::string msg);
|
||||||
void on_announce(udp::endpoint const& from, char* buffer
|
void on_announce(udp::endpoint const& from, char* buffer
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
// void setup_receive();
|
// void setup_receive();
|
||||||
|
|
|
@ -70,12 +70,12 @@ private:
|
||||||
|
|
||||||
void update_mapping(int i);
|
void update_mapping(int i);
|
||||||
void send_map_request(int i);
|
void send_map_request(int i);
|
||||||
void resend_request(int i, asio::error_code const& e);
|
void resend_request(int i, error_code const& e);
|
||||||
void on_reply(asio::error_code const& e
|
void on_reply(error_code const& e
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
void try_next_mapping(int i);
|
void try_next_mapping(int i);
|
||||||
void update_expiration_timer();
|
void update_expiration_timer();
|
||||||
void mapping_expired(asio::error_code const& e, int i);
|
void mapping_expired(error_code const& e, int i);
|
||||||
|
|
||||||
void disable(char const* message);
|
void disable(char const* message);
|
||||||
|
|
||||||
|
|
|
@ -248,7 +248,7 @@ namespace libtorrent
|
||||||
// this is called when the connection attempt has succeeded
|
// this is called when the connection attempt has succeeded
|
||||||
// and the peer_connection is supposed to set m_connecting
|
// and the peer_connection is supposed to set m_connecting
|
||||||
// to false, and stop monitor writability
|
// to false, and stop monitor writability
|
||||||
void on_connection_complete(asio::error_code const& e);
|
void on_connection_complete(error_code const& e);
|
||||||
|
|
||||||
// returns true if this connection is still waiting to
|
// returns true if this connection is still waiting to
|
||||||
// finish the connection attempt
|
// finish the connection attempt
|
||||||
|
@ -449,9 +449,9 @@ namespace libtorrent
|
||||||
virtual void on_connected() = 0;
|
virtual void on_connected() = 0;
|
||||||
virtual void on_tick() {}
|
virtual void on_tick() {}
|
||||||
|
|
||||||
virtual void on_receive(asio::error_code const& error
|
virtual void on_receive(error_code const& error
|
||||||
, std::size_t bytes_transferred) = 0;
|
, std::size_t bytes_transferred) = 0;
|
||||||
virtual void on_sent(asio::error_code const& error
|
virtual void on_sent(error_code const& error
|
||||||
, std::size_t bytes_transferred) = 0;
|
, std::size_t bytes_transferred) = 0;
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_ENCRYPTION
|
#ifndef TORRENT_DISABLE_ENCRYPTION
|
||||||
|
@ -501,9 +501,9 @@ namespace libtorrent
|
||||||
|
|
||||||
// called from the main loop when this connection has any
|
// called from the main loop when this connection has any
|
||||||
// work to do.
|
// work to do.
|
||||||
void on_send_data(asio::error_code const& error
|
void on_send_data(error_code const& error
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
void on_receive_data(asio::error_code const& error
|
void on_receive_data(error_code const& error
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
|
|
||||||
// this is the limit on the number of outstanding requests
|
// this is the limit on the number of outstanding requests
|
||||||
|
|
|
@ -38,8 +38,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
#include <asio/read.hpp>
|
#include <boost/asio/read.hpp>
|
||||||
#include <asio/write.hpp>
|
#include <boost/asio/write.hpp>
|
||||||
|
|
||||||
|
|
||||||
namespace libtorrent {
|
namespace libtorrent {
|
||||||
|
@ -52,7 +52,7 @@ public:
|
||||||
typedef stream_socket::endpoint_type endpoint_type;
|
typedef stream_socket::endpoint_type endpoint_type;
|
||||||
typedef stream_socket::protocol_type protocol_type;
|
typedef stream_socket::protocol_type protocol_type;
|
||||||
|
|
||||||
explicit proxy_base(asio::io_service& io_service)
|
explicit proxy_base(io_service& io_service)
|
||||||
: m_sock(io_service)
|
: m_sock(io_service)
|
||||||
, m_resolver(io_service)
|
, m_resolver(io_service)
|
||||||
{}
|
{}
|
||||||
|
@ -70,7 +70,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Mutable_Buffers>
|
template <class Mutable_Buffers>
|
||||||
std::size_t read_some(Mutable_Buffers const& buffers, asio::error_code& ec)
|
std::size_t read_some(Mutable_Buffers const& buffers, error_code& ec)
|
||||||
{
|
{
|
||||||
return m_sock.read_some(buffers, ec);
|
return m_sock.read_some(buffers, ec);
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ public:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class IO_Control_Command>
|
template <class IO_Control_Command>
|
||||||
void io_control(IO_Control_Command& ioc, asio::error_code& ec)
|
void io_control(IO_Control_Command& ioc, error_code& ec)
|
||||||
{
|
{
|
||||||
m_sock.io_control(ioc, ec);
|
m_sock.io_control(ioc, ec);
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ public:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class SettableSocketOption>
|
template <class SettableSocketOption>
|
||||||
asio::error_code set_option(SettableSocketOption const& opt, asio::error_code& ec)
|
error_code set_option(SettableSocketOption const& opt, error_code& ec)
|
||||||
{
|
{
|
||||||
return m_sock.set_option(opt, ec);
|
return m_sock.set_option(opt, ec);
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void bind(endpoint_type const& endpoint, asio::error_code& ec)
|
void bind(endpoint_type const& endpoint, error_code& ec)
|
||||||
{
|
{
|
||||||
m_sock.bind(endpoint, ec);
|
m_sock.bind(endpoint, ec);
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void open(protocol_type const& p, asio::error_code& ec)
|
void open(protocol_type const& p, error_code& ec)
|
||||||
{
|
{
|
||||||
m_sock.open(p, ec);
|
m_sock.open(p, ec);
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void close(asio::error_code& ec)
|
void close(error_code& ec)
|
||||||
{
|
{
|
||||||
m_sock.close(ec);
|
m_sock.close(ec);
|
||||||
m_resolver.cancel();
|
m_resolver.cancel();
|
||||||
|
@ -161,7 +161,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
endpoint_type remote_endpoint(asio::error_code& ec) const
|
endpoint_type remote_endpoint(error_code& ec) const
|
||||||
{
|
{
|
||||||
return m_remote_endpoint;
|
return m_remote_endpoint;
|
||||||
}
|
}
|
||||||
|
@ -173,14 +173,14 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
endpoint_type local_endpoint(asio::error_code& ec) const
|
endpoint_type local_endpoint(error_code& ec) const
|
||||||
{
|
{
|
||||||
return m_sock.local_endpoint(ec);
|
return m_sock.local_endpoint(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
asio::io_service& io_service()
|
io_service& get_io_service()
|
||||||
{
|
{
|
||||||
return m_sock.io_service();
|
return m_sock.get_io_service();
|
||||||
}
|
}
|
||||||
|
|
||||||
lowest_layer_type& lowest_layer()
|
lowest_layer_type& lowest_layer()
|
||||||
|
|
|
@ -45,13 +45,15 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#define Protocol Protocol_
|
#define Protocol Protocol_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <asio/ip/tcp.hpp>
|
#include <boost/asio/ip/tcp.hpp>
|
||||||
#include <asio/ip/udp.hpp>
|
#include <boost/asio/ip/udp.hpp>
|
||||||
#include <asio/io_service.hpp>
|
#include <boost/asio/io_service.hpp>
|
||||||
#include <asio/deadline_timer.hpp>
|
#include <boost/asio/deadline_timer.hpp>
|
||||||
#include <asio/write.hpp>
|
#include <boost/asio/write.hpp>
|
||||||
#include <asio/time_traits.hpp>
|
#include <boost/asio/read.hpp>
|
||||||
#include <asio/basic_deadline_timer.hpp>
|
#include <boost/asio/time_traits.hpp>
|
||||||
|
#include <boost/asio/basic_deadline_timer.hpp>
|
||||||
|
#include <boost/system/error_code.hpp>
|
||||||
|
|
||||||
#ifdef __OBJC__
|
#ifdef __OBJC__
|
||||||
#undef Protocol
|
#undef Protocol
|
||||||
|
@ -83,23 +85,27 @@ namespace libtorrent
|
||||||
*/
|
*/
|
||||||
// namespace asio = ::asio;
|
// namespace asio = ::asio;
|
||||||
|
|
||||||
using asio::ip::tcp;
|
using boost::system::error_code;
|
||||||
using asio::ip::udp;
|
using boost::asio::ip::tcp;
|
||||||
typedef asio::ip::tcp::socket stream_socket;
|
using boost::asio::ip::udp;
|
||||||
typedef asio::ip::address address;
|
using boost::asio::async_write;
|
||||||
typedef asio::ip::address_v4 address_v4;
|
using boost::asio::async_read;
|
||||||
typedef asio::ip::address_v6 address_v6;
|
|
||||||
typedef asio::ip::udp::socket datagram_socket;
|
|
||||||
typedef asio::ip::tcp::acceptor socket_acceptor;
|
|
||||||
typedef asio::io_service io_service;
|
|
||||||
|
|
||||||
using asio::async_write;
|
typedef boost::asio::ip::tcp::socket stream_socket;
|
||||||
|
typedef boost::asio::ip::address address;
|
||||||
|
typedef boost::asio::ip::address_v4 address_v4;
|
||||||
|
typedef boost::asio::ip::address_v6 address_v6;
|
||||||
|
typedef boost::asio::ip::udp::socket datagram_socket;
|
||||||
|
typedef boost::asio::ip::tcp::acceptor socket_acceptor;
|
||||||
|
typedef boost::asio::io_service io_service;
|
||||||
|
|
||||||
|
namespace asio = boost::asio;
|
||||||
|
|
||||||
typedef asio::basic_deadline_timer<libtorrent::ptime> deadline_timer;
|
typedef boost::asio::basic_deadline_timer<libtorrent::ptime> deadline_timer;
|
||||||
|
|
||||||
inline std::ostream& print_address(std::ostream& os, address const& addr)
|
inline std::ostream& print_address(std::ostream& os, address const& addr)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
std::string a = addr.to_string(ec);
|
std::string a = addr.to_string(ec);
|
||||||
if (ec) return os;
|
if (ec) return os;
|
||||||
os << a;
|
os << a;
|
||||||
|
@ -109,7 +115,7 @@ namespace libtorrent
|
||||||
inline std::ostream& print_endpoint(std::ostream& os, tcp::endpoint const& ep)
|
inline std::ostream& print_endpoint(std::ostream& os, tcp::endpoint const& ep)
|
||||||
{
|
{
|
||||||
address const& addr = ep.address();
|
address const& addr = ep.address();
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
std::string a = addr.to_string(ec);
|
std::string a = addr.to_string(ec);
|
||||||
if (ec) return os;
|
if (ec) return os;
|
||||||
|
|
||||||
|
@ -132,7 +138,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
else if (a.is_v6())
|
else if (a.is_v6())
|
||||||
{
|
{
|
||||||
asio::ip::address_v6::bytes_type bytes
|
address_v6::bytes_type bytes
|
||||||
= a.to_v6().to_bytes();
|
= a.to_v6().to_bytes();
|
||||||
std::copy(bytes.begin(), bytes.end(), out);
|
std::copy(bytes.begin(), bytes.end(), out);
|
||||||
}
|
}
|
||||||
|
@ -142,18 +148,18 @@ namespace libtorrent
|
||||||
address read_v4_address(InIt& in)
|
address read_v4_address(InIt& in)
|
||||||
{
|
{
|
||||||
unsigned long ip = read_uint32(in);
|
unsigned long ip = read_uint32(in);
|
||||||
return asio::ip::address_v4(ip);
|
return address_v4(ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class InIt>
|
template<class InIt>
|
||||||
address read_v6_address(InIt& in)
|
address read_v6_address(InIt& in)
|
||||||
{
|
{
|
||||||
typedef asio::ip::address_v6::bytes_type bytes_t;
|
typedef address_v6::bytes_type bytes_t;
|
||||||
bytes_t bytes;
|
bytes_t bytes;
|
||||||
for (bytes_t::iterator i = bytes.begin()
|
for (bytes_t::iterator i = bytes.begin()
|
||||||
, end(bytes.end()); i != end; ++i)
|
, end(bytes.end()); i != end; ++i)
|
||||||
*i = read_uint8(in);
|
*i = read_uint8(in);
|
||||||
return asio::ip::address_v6(bytes);
|
return address_v6(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Endpoint, class OutIt>
|
template<class Endpoint, class OutIt>
|
||||||
|
|
|
@ -41,8 +41,8 @@ class socks4_stream : public proxy_base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
explicit socks4_stream(asio::io_service& io_service)
|
explicit socks4_stream(io_service& io_service_)
|
||||||
: proxy_base(io_service)
|
: proxy_base(io_service_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void set_username(std::string const& user)
|
void set_username(std::string const& user)
|
||||||
|
@ -50,7 +50,7 @@ public:
|
||||||
m_user = user;
|
m_user = user;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef boost::function<void(asio::error_code const&)> handler_type;
|
typedef boost::function<void(error_code const&)> handler_type;
|
||||||
|
|
||||||
template <class Handler>
|
template <class Handler>
|
||||||
void async_connect(endpoint_type const& endpoint, Handler const& handler)
|
void async_connect(endpoint_type const& endpoint, Handler const& handler)
|
||||||
|
@ -74,11 +74,11 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, boost::shared_ptr<handler_type> h);
|
, boost::shared_ptr<handler_type> h);
|
||||||
void connected(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void connected(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void handshake1(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void handshake1(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void handshake2(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void handshake2(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
|
|
||||||
// send and receive buffer
|
// send and receive buffer
|
||||||
std::vector<char> m_buffer;
|
std::vector<char> m_buffer;
|
||||||
|
|
|
@ -41,7 +41,7 @@ class socks5_stream : public proxy_base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
explicit socks5_stream(asio::io_service& io_service)
|
explicit socks5_stream(io_service& io_service)
|
||||||
: proxy_base(io_service)
|
: proxy_base(io_service)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ public:
|
||||||
m_password = password;
|
m_password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef boost::function<void(asio::error_code const&)> handler_type;
|
typedef boost::function<void(error_code const&)> handler_type;
|
||||||
|
|
||||||
template <class Handler>
|
template <class Handler>
|
||||||
void async_connect(endpoint_type const& endpoint, Handler const& handler)
|
void async_connect(endpoint_type const& endpoint, Handler const& handler)
|
||||||
|
@ -79,17 +79,17 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, boost::shared_ptr<handler_type> h);
|
, boost::shared_ptr<handler_type> h);
|
||||||
void connected(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void connected(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void handshake1(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void handshake1(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void handshake2(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void handshake2(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void handshake3(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void handshake3(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void handshake4(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void handshake4(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void socks_connect(boost::shared_ptr<handler_type> h);
|
void socks_connect(boost::shared_ptr<handler_type> h);
|
||||||
void connect1(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void connect1(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void connect2(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void connect2(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
void connect3(asio::error_code const& e, boost::shared_ptr<handler_type> h);
|
void connect3(error_code const& e, boost::shared_ptr<handler_type> h);
|
||||||
|
|
||||||
// send and receive buffer
|
// send and receive buffer
|
||||||
std::vector<char> m_buffer;
|
std::vector<char> m_buffer;
|
||||||
|
|
|
@ -34,7 +34,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#define TORRENT_SSL_STREAM_HPP_INCLUDED
|
#define TORRENT_SSL_STREAM_HPP_INCLUDED
|
||||||
|
|
||||||
#include "libtorrent/socket.hpp"
|
#include "libtorrent/socket.hpp"
|
||||||
#include <asio/ssl.hpp>
|
#include <boost/asio/ssl.hpp>
|
||||||
|
|
||||||
// openssl seems to believe it owns
|
// openssl seems to believe it owns
|
||||||
// this name in every single scope
|
// this name in every single scope
|
||||||
|
@ -47,7 +47,7 @@ class ssl_stream
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
explicit ssl_stream(asio::io_service& io_service)
|
explicit ssl_stream(io_service& io_service)
|
||||||
: m_context(io_service, asio::ssl::context::sslv23_client)
|
: m_context(io_service, asio::ssl::context::sslv23_client)
|
||||||
, m_sock(io_service, m_context)
|
, m_sock(io_service, m_context)
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,7 @@ public:
|
||||||
typedef typename Stream::protocol_type protocol_type;
|
typedef typename Stream::protocol_type protocol_type;
|
||||||
typedef typename asio::ssl::stream<Stream> sock_type;
|
typedef typename asio::ssl::stream<Stream> sock_type;
|
||||||
|
|
||||||
typedef boost::function<void(asio::error_code const&)> handler_type;
|
typedef boost::function<void(error_code const&)> handler_type;
|
||||||
|
|
||||||
template <class Handler>
|
template <class Handler>
|
||||||
void async_connect(endpoint_type const& endpoint, Handler const& handler)
|
void async_connect(endpoint_type const& endpoint, Handler const& handler)
|
||||||
|
@ -70,7 +70,7 @@ public:
|
||||||
// 2. perform SSL client handshake
|
// 2. perform SSL client handshake
|
||||||
|
|
||||||
// to avoid unnecessary copying of the handler,
|
// to avoid unnecessary copying of the handler,
|
||||||
// store it in a shaed_ptr
|
// store it in a shared_ptr
|
||||||
boost::shared_ptr<handler_type> h(new handler_type(handler));
|
boost::shared_ptr<handler_type> h(new handler_type(handler));
|
||||||
|
|
||||||
m_sock.next_layer().async_connect(endpoint
|
m_sock.next_layer().async_connect(endpoint
|
||||||
|
@ -84,7 +84,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Mutable_Buffers>
|
template <class Mutable_Buffers>
|
||||||
std::size_t read_some(Mutable_Buffers const& buffers, asio::error_code& ec)
|
std::size_t read_some(Mutable_Buffers const& buffers, error_code& ec)
|
||||||
{
|
{
|
||||||
return m_sock.read_some(buffers, ec);
|
return m_sock.read_some(buffers, ec);
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ public:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <class IO_Control_Command>
|
template <class IO_Control_Command>
|
||||||
void io_control(IO_Control_Command& ioc, asio::error_code& ec)
|
void io_control(IO_Control_Command& ioc, error_code& ec)
|
||||||
{
|
{
|
||||||
m_sock.next_layer().io_control(ioc, ec);
|
m_sock.next_layer().io_control(ioc, ec);
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void bind(endpoint_type const& endpoint, asio::error_code& ec)
|
void bind(endpoint_type const& endpoint, error_code& ec)
|
||||||
{
|
{
|
||||||
m_sock.next_layer().bind(endpoint, ec);
|
m_sock.next_layer().bind(endpoint, ec);
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void open(protocol_type const& p, asio::error_code& ec)
|
void open(protocol_type const& p, error_code& ec)
|
||||||
{
|
{
|
||||||
m_sock.next_layer().open(p, ec);
|
m_sock.next_layer().open(p, ec);
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void close(asio::error_code& ec)
|
void close(error_code& ec)
|
||||||
{
|
{
|
||||||
m_sock.next_layer().close(ec);
|
m_sock.next_layer().close(ec);
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
endpoint_type remote_endpoint(asio::error_code& ec) const
|
endpoint_type remote_endpoint(error_code& ec) const
|
||||||
{
|
{
|
||||||
return const_cast<sock_type&>(m_sock).next_layer().remote_endpoint(ec);
|
return const_cast<sock_type&>(m_sock).next_layer().remote_endpoint(ec);
|
||||||
}
|
}
|
||||||
|
@ -175,14 +175,14 @@ public:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
endpoint_type local_endpoint(asio::error_code& ec) const
|
endpoint_type local_endpoint(error_code& ec) const
|
||||||
{
|
{
|
||||||
return const_cast<sock_type&>(m_sock).next_layer().local_endpoint(ec);
|
return const_cast<sock_type&>(m_sock).next_layer().local_endpoint(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
asio::io_service& io_service()
|
io_service& get_io_service()
|
||||||
{
|
{
|
||||||
return m_sock.io_service();
|
return m_sock.get_io_service();
|
||||||
}
|
}
|
||||||
|
|
||||||
lowest_layer_type& lowest_layer()
|
lowest_layer_type& lowest_layer()
|
||||||
|
@ -197,7 +197,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void connected(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void connected(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
|
@ -209,7 +209,7 @@ private:
|
||||||
, boost::bind(&ssl_stream::handshake, this, _1, h));
|
, boost::bind(&ssl_stream::handshake, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void handshake(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void handshake(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,7 @@ namespace libtorrent
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <asio/time_traits.hpp>
|
#include <boost/asio/time_traits.hpp>
|
||||||
#include <boost/cstdint.hpp>
|
#include <boost/cstdint.hpp>
|
||||||
#include "libtorrent/assert.hpp"
|
#include "libtorrent/assert.hpp"
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
// asio time_traits
|
// asio time_traits
|
||||||
namespace asio
|
namespace boost { namespace asio
|
||||||
{
|
{
|
||||||
template<>
|
template<>
|
||||||
struct time_traits<libtorrent::ptime>
|
struct time_traits<libtorrent::ptime>
|
||||||
|
@ -171,7 +171,7 @@ namespace asio
|
||||||
duration_type d)
|
duration_type d)
|
||||||
{ return boost::posix_time::microseconds(libtorrent::total_microseconds(d)); }
|
{ return boost::posix_time::microseconds(libtorrent::total_microseconds(d)); }
|
||||||
};
|
};
|
||||||
}
|
} }
|
||||||
|
|
||||||
#if defined(__MACH__)
|
#if defined(__MACH__)
|
||||||
|
|
||||||
|
|
|
@ -461,17 +461,17 @@ namespace libtorrent
|
||||||
|
|
||||||
// this is the asio callback that is called when a name
|
// this is the asio callback that is called when a name
|
||||||
// lookup for a PEER is completed.
|
// lookup for a PEER is completed.
|
||||||
void on_peer_name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void on_peer_name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, peer_id pid);
|
, peer_id pid);
|
||||||
|
|
||||||
// this is the asio callback that is called when a name
|
// this is the asio callback that is called when a name
|
||||||
// lookup for a WEB SEED is completed.
|
// lookup for a WEB SEED is completed.
|
||||||
void on_name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void on_name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, std::string url, tcp::endpoint proxy);
|
, std::string url, tcp::endpoint proxy);
|
||||||
|
|
||||||
// this is the asio callback that is called when a name
|
// this is the asio callback that is called when a name
|
||||||
// lookup for a proxy for a web seed is completed.
|
// lookup for a proxy for a web seed is completed.
|
||||||
void on_proxy_name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void on_proxy_name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, std::string url);
|
, std::string url);
|
||||||
|
|
||||||
// this is called when the torrent has finished. i.e.
|
// this is called when the torrent has finished. i.e.
|
||||||
|
@ -587,7 +587,7 @@ namespace libtorrent
|
||||||
|
|
||||||
void try_next_tracker();
|
void try_next_tracker();
|
||||||
int prioritize_tracker(int tracker_index);
|
int prioritize_tracker(int tracker_index);
|
||||||
void on_country_lookup(asio::error_code const& error, tcp::resolver::iterator i
|
void on_country_lookup(error_code const& error, tcp::resolver::iterator i
|
||||||
, boost::intrusive_ptr<peer_connection> p) const;
|
, boost::intrusive_ptr<peer_connection> p) const;
|
||||||
bool request_bandwidth_from_session(int channel) const;
|
bool request_bandwidth_from_session(int channel) const;
|
||||||
|
|
||||||
|
@ -702,7 +702,7 @@ namespace libtorrent
|
||||||
deadline_timer m_announce_timer;
|
deadline_timer m_announce_timer;
|
||||||
|
|
||||||
static void on_announce_disp(boost::weak_ptr<torrent> p
|
static void on_announce_disp(boost::weak_ptr<torrent> p
|
||||||
, asio::error_code const& e);
|
, error_code const& e);
|
||||||
|
|
||||||
// this is called once per announce interval
|
// this is called once per announce interval
|
||||||
void on_announce();
|
void on_announce();
|
||||||
|
|
|
@ -160,7 +160,7 @@ namespace libtorrent
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void timeout_callback(asio::error_code const&);
|
void timeout_callback(error_code const&);
|
||||||
|
|
||||||
boost::intrusive_ptr<timeout_handler> self()
|
boost::intrusive_ptr<timeout_handler> self()
|
||||||
{ return boost::intrusive_ptr<timeout_handler>(this); }
|
{ return boost::intrusive_ptr<timeout_handler>(this); }
|
||||||
|
|
|
@ -46,16 +46,16 @@ namespace libtorrent
|
||||||
class udp_socket
|
class udp_socket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef boost::function<void(asio::error_code const& ec
|
typedef boost::function<void(error_code const& ec
|
||||||
, udp::endpoint const&, char const* buf, int size)> callback_t;
|
, udp::endpoint const&, char const* buf, int size)> callback_t;
|
||||||
|
|
||||||
udp_socket(asio::io_service& ios, callback_t const& c, connection_queue& cc);
|
udp_socket(io_service& ios, callback_t const& c, connection_queue& cc);
|
||||||
|
|
||||||
bool is_open() const { return m_ipv4_sock.is_open() || m_ipv6_sock.is_open(); }
|
bool is_open() const { return m_ipv4_sock.is_open() || m_ipv6_sock.is_open(); }
|
||||||
asio::io_service& get_io_service() { return m_ipv4_sock.get_io_service(); }
|
io_service& get_io_service() { return m_ipv4_sock.get_io_service(); }
|
||||||
|
|
||||||
void send(udp::endpoint const& ep, char const* p, int len, asio::error_code& ec);
|
void send(udp::endpoint const& ep, char const* p, int len, error_code& ec);
|
||||||
void bind(udp::endpoint const& ep, asio::error_code& ec);
|
void bind(udp::endpoint const& ep, error_code& ec);
|
||||||
void bind(int port);
|
void bind(int port);
|
||||||
void close();
|
void close();
|
||||||
int local_port() const { return m_bind_port; }
|
int local_port() const { return m_bind_port; }
|
||||||
|
@ -67,21 +67,21 @@ namespace libtorrent
|
||||||
|
|
||||||
callback_t m_callback;
|
callback_t m_callback;
|
||||||
|
|
||||||
void on_read(udp::socket* sock, asio::error_code const& e, std::size_t bytes_transferred);
|
void on_read(udp::socket* sock, error_code const& e, std::size_t bytes_transferred);
|
||||||
void on_name_lookup(asio::error_code const& e, tcp::resolver::iterator i);
|
void on_name_lookup(error_code const& e, tcp::resolver::iterator i);
|
||||||
void on_timeout();
|
void on_timeout();
|
||||||
void on_connect(int ticket);
|
void on_connect(int ticket);
|
||||||
void on_connected(asio::error_code const& ec);
|
void on_connected(error_code const& ec);
|
||||||
void handshake1(asio::error_code const& e);
|
void handshake1(error_code const& e);
|
||||||
void handshake2(asio::error_code const& e);
|
void handshake2(error_code const& e);
|
||||||
void handshake3(asio::error_code const& e);
|
void handshake3(error_code const& e);
|
||||||
void handshake4(asio::error_code const& e);
|
void handshake4(error_code const& e);
|
||||||
void socks_forward_udp();
|
void socks_forward_udp();
|
||||||
void connect1(asio::error_code const& e);
|
void connect1(error_code const& e);
|
||||||
void connect2(asio::error_code const& e);
|
void connect2(error_code const& e);
|
||||||
|
|
||||||
void wrap(udp::endpoint const& ep, char const* p, int len, asio::error_code& ec);
|
void wrap(udp::endpoint const& ep, char const* p, int len, error_code& ec);
|
||||||
void unwrap(asio::error_code const& e, char const* buf, int size);
|
void unwrap(error_code const& e, char const* buf, int size);
|
||||||
|
|
||||||
udp::socket m_ipv4_sock;
|
udp::socket m_ipv4_sock;
|
||||||
udp::socket m_ipv6_sock;
|
udp::socket m_ipv6_sock;
|
||||||
|
|
|
@ -89,10 +89,10 @@ namespace libtorrent
|
||||||
boost::intrusive_ptr<udp_tracker_connection> self()
|
boost::intrusive_ptr<udp_tracker_connection> self()
|
||||||
{ return boost::intrusive_ptr<udp_tracker_connection>(this); }
|
{ return boost::intrusive_ptr<udp_tracker_connection>(this); }
|
||||||
|
|
||||||
void name_lookup(asio::error_code const& error, udp::resolver::iterator i);
|
void name_lookup(error_code const& error, udp::resolver::iterator i);
|
||||||
void timeout(asio::error_code const& error);
|
void timeout(error_code const& error);
|
||||||
|
|
||||||
void on_receive(asio::error_code const& e, udp::endpoint const& ep
|
void on_receive(error_code const& e, udp::endpoint const& ep
|
||||||
, char const* buf, int size);
|
, char const* buf, int size);
|
||||||
void on_connect_response(char const* buf, int size);
|
void on_connect_response(char const* buf, int size);
|
||||||
void on_announce_response(char const* buf, int size);
|
void on_announce_response(char const* buf, int size);
|
||||||
|
|
|
@ -93,7 +93,7 @@ private:
|
||||||
|
|
||||||
enum { default_lease_time = 3600 };
|
enum { default_lease_time = 3600 };
|
||||||
|
|
||||||
void resend_request(asio::error_code const& e);
|
void resend_request(error_code const& e);
|
||||||
void on_reply(udp::endpoint const& from, char* buffer
|
void on_reply(udp::endpoint const& from, char* buffer
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
|
|
||||||
|
@ -102,15 +102,15 @@ private:
|
||||||
void update_map(rootdevice& d, int i);
|
void update_map(rootdevice& d, int i);
|
||||||
|
|
||||||
|
|
||||||
void on_upnp_xml(asio::error_code const& e
|
void on_upnp_xml(error_code const& e
|
||||||
, libtorrent::http_parser const& p, rootdevice& d);
|
, libtorrent::http_parser const& p, rootdevice& d);
|
||||||
void on_upnp_map_response(asio::error_code const& e
|
void on_upnp_map_response(error_code const& e
|
||||||
, libtorrent::http_parser const& p, rootdevice& d
|
, libtorrent::http_parser const& p, rootdevice& d
|
||||||
, int mapping);
|
, int mapping);
|
||||||
void on_upnp_unmap_response(asio::error_code const& e
|
void on_upnp_unmap_response(error_code const& e
|
||||||
, libtorrent::http_parser const& p, rootdevice& d
|
, libtorrent::http_parser const& p, rootdevice& d
|
||||||
, int mapping);
|
, int mapping);
|
||||||
void on_expire(asio::error_code const& e);
|
void on_expire(error_code const& e);
|
||||||
|
|
||||||
void disable(char const* msg);
|
void disable(char const* msg);
|
||||||
void return_error(int mapping, int code);
|
void return_error(int mapping, int code);
|
||||||
|
@ -237,7 +237,7 @@ private:
|
||||||
// current retry count
|
// current retry count
|
||||||
int m_retry_count;
|
int m_retry_count;
|
||||||
|
|
||||||
asio::io_service& m_io_service;
|
io_service& m_io_service;
|
||||||
|
|
||||||
// the udp socket used to send and receive
|
// the udp socket used to send and receive
|
||||||
// multicast messages on the network
|
// multicast messages on the network
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
# include <boost/type_traits/add_pointer.hpp>
|
# include <boost/type_traits/add_pointer.hpp>
|
||||||
# include <boost/noncopyable.hpp>
|
# include <boost/noncopyable.hpp>
|
||||||
|
|
||||||
#include <asio/io_service.hpp>
|
#include <boost/asio/io_service.hpp>
|
||||||
|
|
||||||
# define NETWORK_VARIANT_STREAM_LIMIT 5
|
# define NETWORK_VARIANT_STREAM_LIMIT 5
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ namespace aux
|
||||||
template<class IO_Control_Command>
|
template<class IO_Control_Command>
|
||||||
struct io_control_visitor_ec: boost::static_visitor<>
|
struct io_control_visitor_ec: boost::static_visitor<>
|
||||||
{
|
{
|
||||||
io_control_visitor_ec(IO_Control_Command& ioc, asio::error_code& ec_)
|
io_control_visitor_ec(IO_Control_Command& ioc, error_code& ec_)
|
||||||
: ioc(ioc), ec(ec_) {}
|
: ioc(ioc), ec(ec_) {}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
@ -61,7 +61,7 @@ namespace aux
|
||||||
{}
|
{}
|
||||||
|
|
||||||
IO_Control_Command& ioc;
|
IO_Control_Command& ioc;
|
||||||
asio::error_code& ec;
|
error_code& ec;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class IO_Control_Command>
|
template<class IO_Control_Command>
|
||||||
|
@ -112,7 +112,7 @@ namespace aux
|
||||||
struct bind_visitor_ec
|
struct bind_visitor_ec
|
||||||
: boost::static_visitor<>
|
: boost::static_visitor<>
|
||||||
{
|
{
|
||||||
bind_visitor_ec(EndpointType const& ep, asio::error_code& ec_)
|
bind_visitor_ec(EndpointType const& ep, error_code& ec_)
|
||||||
: endpoint(ep)
|
: endpoint(ep)
|
||||||
, ec(ec_)
|
, ec(ec_)
|
||||||
{}
|
{}
|
||||||
|
@ -124,7 +124,7 @@ namespace aux
|
||||||
void operator()(boost::blank) const {}
|
void operator()(boost::blank) const {}
|
||||||
|
|
||||||
EndpointType const& endpoint;
|
EndpointType const& endpoint;
|
||||||
asio::error_code& ec;
|
error_code& ec;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class EndpointType>
|
template <class EndpointType>
|
||||||
|
@ -150,7 +150,7 @@ namespace aux
|
||||||
struct open_visitor_ec
|
struct open_visitor_ec
|
||||||
: boost::static_visitor<>
|
: boost::static_visitor<>
|
||||||
{
|
{
|
||||||
open_visitor_ec(Protocol const& p, asio::error_code& ec_)
|
open_visitor_ec(Protocol const& p, error_code& ec_)
|
||||||
: proto(p)
|
: proto(p)
|
||||||
, ec(ec_)
|
, ec(ec_)
|
||||||
{}
|
{}
|
||||||
|
@ -162,7 +162,7 @@ namespace aux
|
||||||
void operator()(boost::blank) const {}
|
void operator()(boost::blank) const {}
|
||||||
|
|
||||||
Protocol const& proto;
|
Protocol const& proto;
|
||||||
asio::error_code& ec;
|
error_code& ec;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class Protocol>
|
template <class Protocol>
|
||||||
|
@ -201,7 +201,7 @@ namespace aux
|
||||||
struct close_visitor_ec
|
struct close_visitor_ec
|
||||||
: boost::static_visitor<>
|
: boost::static_visitor<>
|
||||||
{
|
{
|
||||||
close_visitor_ec(asio::error_code& ec_)
|
close_visitor_ec(error_code& ec_)
|
||||||
: ec(ec_)
|
: ec(ec_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ namespace aux
|
||||||
|
|
||||||
void operator()(boost::blank) const {}
|
void operator()(boost::blank) const {}
|
||||||
|
|
||||||
asio::error_code& ec;
|
error_code& ec;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct close_visitor
|
struct close_visitor
|
||||||
|
@ -230,18 +230,18 @@ namespace aux
|
||||||
struct remote_endpoint_visitor_ec
|
struct remote_endpoint_visitor_ec
|
||||||
: boost::static_visitor<EndpointType>
|
: boost::static_visitor<EndpointType>
|
||||||
{
|
{
|
||||||
remote_endpoint_visitor_ec(asio::error_code& ec)
|
remote_endpoint_visitor_ec(error_code& ec_)
|
||||||
: error_code(ec)
|
: ec(ec_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
EndpointType operator()(T const* p) const
|
EndpointType operator()(T const* p) const
|
||||||
{ return p->remote_endpoint(error_code); }
|
{ return p->remote_endpoint(ec); }
|
||||||
|
|
||||||
EndpointType operator()(boost::blank) const
|
EndpointType operator()(boost::blank) const
|
||||||
{ return EndpointType(); }
|
{ return EndpointType(); }
|
||||||
|
|
||||||
asio::error_code& error_code;
|
error_code& ec;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class EndpointType>
|
template <class EndpointType>
|
||||||
|
@ -270,29 +270,29 @@ namespace aux
|
||||||
void operator()(T* p) const
|
void operator()(T* p) const
|
||||||
{ p->set_option(opt_); }
|
{ p->set_option(opt_); }
|
||||||
|
|
||||||
void operator()(boost::blank) const {}
|
void operator()(boost::blank) const {}
|
||||||
|
|
||||||
SettableSocketOption const& opt_;
|
SettableSocketOption const& opt_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class SettableSocketOption>
|
template <class SettableSocketOption>
|
||||||
struct set_option_visitor_ec
|
struct set_option_visitor_ec
|
||||||
: boost::static_visitor<asio::error_code>
|
: boost::static_visitor<error_code>
|
||||||
{
|
{
|
||||||
set_option_visitor_ec(SettableSocketOption const& opt, asio::error_code& ec)
|
set_option_visitor_ec(SettableSocketOption const& opt, error_code& ec)
|
||||||
: opt_(opt)
|
: opt_(opt)
|
||||||
, ec_(ec)
|
, ec_(ec)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
asio::error_code operator()(T* p) const
|
error_code operator()(T* p) const
|
||||||
{ return p->set_option(opt_, ec_); }
|
{ return p->set_option(opt_, ec_); }
|
||||||
|
|
||||||
asio::error_code operator()(boost::blank) const
|
error_code operator()(boost::blank) const
|
||||||
{ return ec_; }
|
{ return ec_; }
|
||||||
|
|
||||||
SettableSocketOption const& opt_;
|
SettableSocketOption const& opt_;
|
||||||
asio::error_code& ec_;
|
error_code& ec_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// -------------- local_endpoint -----------
|
// -------------- local_endpoint -----------
|
||||||
|
@ -301,14 +301,14 @@ namespace aux
|
||||||
struct local_endpoint_visitor_ec
|
struct local_endpoint_visitor_ec
|
||||||
: boost::static_visitor<EndpointType>
|
: boost::static_visitor<EndpointType>
|
||||||
{
|
{
|
||||||
local_endpoint_visitor_ec(asio::error_code& ec)
|
local_endpoint_visitor_ec(error_code& ec_)
|
||||||
: error_code(ec)
|
: ec(ec_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
EndpointType operator()(T const* p) const
|
EndpointType operator()(T const* p) const
|
||||||
{
|
{
|
||||||
return p->local_endpoint(error_code);
|
return p->local_endpoint(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
EndpointType operator()(boost::blank) const
|
EndpointType operator()(boost::blank) const
|
||||||
|
@ -316,7 +316,7 @@ namespace aux
|
||||||
return EndpointType();
|
return EndpointType();
|
||||||
}
|
}
|
||||||
|
|
||||||
asio::error_code& error_code;
|
error_code& ec;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class EndpointType>
|
template <class EndpointType>
|
||||||
|
@ -372,7 +372,7 @@ namespace aux
|
||||||
std::size_t operator()(T* p) const
|
std::size_t operator()(T* p) const
|
||||||
{ return p->read_some(buffers); }
|
{ return p->read_some(buffers); }
|
||||||
|
|
||||||
std::size_t operator()(boost::blank) const
|
std::size_t operator()(boost::blank) const
|
||||||
{ return 0; }
|
{ return 0; }
|
||||||
|
|
||||||
Mutable_Buffers const& buffers;
|
Mutable_Buffers const& buffers;
|
||||||
|
@ -382,7 +382,7 @@ namespace aux
|
||||||
struct read_some_visitor_ec
|
struct read_some_visitor_ec
|
||||||
: boost::static_visitor<std::size_t>
|
: boost::static_visitor<std::size_t>
|
||||||
{
|
{
|
||||||
read_some_visitor_ec(Mutable_Buffers const& buffers, asio::error_code& ec_)
|
read_some_visitor_ec(Mutable_Buffers const& buffers, error_code& ec_)
|
||||||
: buffers(buffers)
|
: buffers(buffers)
|
||||||
, ec(ec_)
|
, ec(ec_)
|
||||||
{}
|
{}
|
||||||
|
@ -391,11 +391,11 @@ namespace aux
|
||||||
std::size_t operator()(T* p) const
|
std::size_t operator()(T* p) const
|
||||||
{ return p->read_some(buffers, ec); }
|
{ return p->read_some(buffers, ec); }
|
||||||
|
|
||||||
std::size_t operator()(boost::blank) const
|
std::size_t operator()(boost::blank) const
|
||||||
{ return 0; }
|
{ return 0; }
|
||||||
|
|
||||||
Mutable_Buffers const& buffers;
|
Mutable_Buffers const& buffers;
|
||||||
asio::error_code& ec;
|
error_code& ec;
|
||||||
};
|
};
|
||||||
|
|
||||||
// -------------- async_write_some -----------
|
// -------------- async_write_some -----------
|
||||||
|
@ -427,7 +427,7 @@ namespace aux
|
||||||
struct in_avail_visitor_ec
|
struct in_avail_visitor_ec
|
||||||
: boost::static_visitor<std::size_t>
|
: boost::static_visitor<std::size_t>
|
||||||
{
|
{
|
||||||
in_avail_visitor_ec(asio::error_code& ec_)
|
in_avail_visitor_ec(error_code& ec_)
|
||||||
: ec(ec_)
|
: ec(ec_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -442,7 +442,7 @@ namespace aux
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
asio::error_code& ec;
|
error_code& ec;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct in_avail_visitor
|
struct in_avail_visitor
|
||||||
|
@ -524,11 +524,11 @@ public:
|
||||||
typedef typename S0::endpoint_type endpoint_type;
|
typedef typename S0::endpoint_type endpoint_type;
|
||||||
typedef typename S0::protocol_type protocol_type;
|
typedef typename S0::protocol_type protocol_type;
|
||||||
|
|
||||||
explicit variant_stream(asio::io_service& ios)
|
explicit variant_stream(io_service& ios)
|
||||||
: m_io_service(ios), m_variant(boost::blank()) {}
|
: m_io_service(ios), m_variant(boost::blank()) {}
|
||||||
|
|
||||||
template <class S>
|
template <class S>
|
||||||
void instantiate(asio::io_service& ios)
|
void instantiate(io_service& ios)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(&ios == &m_io_service);
|
TORRENT_ASSERT(&ios == &m_io_service);
|
||||||
std::auto_ptr<S> owned(new S(ios));
|
std::auto_ptr<S> owned(new S(ios));
|
||||||
|
@ -540,7 +540,7 @@ public:
|
||||||
template <class S>
|
template <class S>
|
||||||
S& get()
|
S& get()
|
||||||
{
|
{
|
||||||
return *boost::get<S*>(m_variant);
|
return *boost::get<S*>(m_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool instantiated() const
|
bool instantiated() const
|
||||||
|
@ -554,7 +554,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Mutable_Buffers>
|
template <class Mutable_Buffers>
|
||||||
std::size_t read_some(Mutable_Buffers const& buffers, asio::error_code& ec)
|
std::size_t read_some(Mutable_Buffers const& buffers, error_code& ec)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
return boost::apply_visitor(
|
return boost::apply_visitor(
|
||||||
|
@ -612,7 +612,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class IO_Control_Command>
|
template <class IO_Control_Command>
|
||||||
void io_control(IO_Control_Command& ioc, asio::error_code& ec)
|
void io_control(IO_Control_Command& ioc, error_code& ec)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
boost::apply_visitor(
|
boost::apply_visitor(
|
||||||
|
@ -627,7 +627,7 @@ public:
|
||||||
boost::apply_visitor(aux::bind_visitor<endpoint_type>(endpoint), m_variant);
|
boost::apply_visitor(aux::bind_visitor<endpoint_type>(endpoint), m_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bind(endpoint_type const& endpoint, asio::error_code& ec)
|
void bind(endpoint_type const& endpoint, error_code& ec)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
boost::apply_visitor(
|
boost::apply_visitor(
|
||||||
|
@ -641,7 +641,7 @@ public:
|
||||||
boost::apply_visitor(aux::open_visitor<protocol_type>(p), m_variant);
|
boost::apply_visitor(aux::open_visitor<protocol_type>(p), m_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
void open(protocol_type const& p, asio::error_code& ec)
|
void open(protocol_type const& p, error_code& ec)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
boost::apply_visitor(
|
boost::apply_visitor(
|
||||||
|
@ -660,7 +660,7 @@ public:
|
||||||
boost::apply_visitor(aux::close_visitor(), m_variant);
|
boost::apply_visitor(aux::close_visitor(), m_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
void close(asio::error_code& ec)
|
void close(error_code& ec)
|
||||||
{
|
{
|
||||||
if (!instantiated()) return;
|
if (!instantiated()) return;
|
||||||
boost::apply_visitor(
|
boost::apply_visitor(
|
||||||
|
@ -674,7 +674,7 @@ public:
|
||||||
return boost::apply_visitor(aux::in_avail_visitor(), m_variant);
|
return boost::apply_visitor(aux::in_avail_visitor(), m_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t in_avail(asio::error_code& ec) const
|
std::size_t in_avail(error_code& ec) const
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
return boost::apply_visitor(
|
return boost::apply_visitor(
|
||||||
|
@ -688,7 +688,7 @@ public:
|
||||||
return boost::apply_visitor(aux::remote_endpoint_visitor<endpoint_type>(), m_variant);
|
return boost::apply_visitor(aux::remote_endpoint_visitor<endpoint_type>(), m_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint_type remote_endpoint(asio::error_code& ec) const
|
endpoint_type remote_endpoint(error_code& ec) const
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
return boost::apply_visitor(
|
return boost::apply_visitor(
|
||||||
|
@ -705,20 +705,20 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class SettableSocketOption>
|
template <class SettableSocketOption>
|
||||||
asio::error_code set_option(SettableSocketOption const& opt, asio::error_code& ec)
|
error_code set_option(SettableSocketOption const& opt, error_code& ec)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
return boost::apply_visitor(aux::set_option_visitor_ec<SettableSocketOption>(opt, ec)
|
return boost::apply_visitor(aux::set_option_visitor_ec<SettableSocketOption>(opt, ec)
|
||||||
, m_variant);
|
, m_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint_type local_endpoint() const
|
endpoint_type local_endpoint() const
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
return boost::apply_visitor(aux::local_endpoint_visitor<endpoint_type>(), m_variant);
|
return boost::apply_visitor(aux::local_endpoint_visitor<endpoint_type>(), m_variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
endpoint_type local_endpoint(asio::error_code& ec) const
|
endpoint_type local_endpoint(error_code& ec) const
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(instantiated());
|
TORRENT_ASSERT(instantiated());
|
||||||
return boost::apply_visitor(
|
return boost::apply_visitor(
|
||||||
|
@ -726,7 +726,7 @@ public:
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
asio::io_service& get_io_service()
|
io_service& get_io_service()
|
||||||
{
|
{
|
||||||
return m_io_service;
|
return m_io_service;
|
||||||
}
|
}
|
||||||
|
@ -740,7 +740,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
asio::io_service& m_io_service;
|
io_service& m_io_service;
|
||||||
variant_type m_variant;
|
variant_type m_variant;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -102,9 +102,9 @@ namespace libtorrent
|
||||||
|
|
||||||
// called from the main loop when this connection has any
|
// called from the main loop when this connection has any
|
||||||
// work to do.
|
// work to do.
|
||||||
void on_sent(asio::error_code const& error
|
void on_sent(error_code const& error
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
void on_receive(asio::error_code const& error
|
void on_receive(error_code const& error
|
||||||
, std::size_t bytes_transferred);
|
, std::size_t bytes_transferred);
|
||||||
|
|
||||||
std::string const& url() const { return m_url; }
|
std::string const& url() const { return m_url; }
|
||||||
|
|
|
@ -30,8 +30,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asio/ip/host_name.hpp>
|
#include <boost/asio/ip/host_name.hpp>
|
||||||
#include <asio/ip/multicast.hpp>
|
#include <boost/asio/ip/multicast.hpp>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
|
||||||
#include "libtorrent/socket.hpp"
|
#include "libtorrent/socket.hpp"
|
||||||
|
@ -75,10 +75,10 @@ namespace libtorrent
|
||||||
return addr.to_v6() == address_v6::any();
|
return addr.to_v6() == address_v6::any();
|
||||||
}
|
}
|
||||||
|
|
||||||
address guess_local_address(asio::io_service& ios)
|
address guess_local_address(io_service& ios)
|
||||||
{
|
{
|
||||||
// make a best guess of the interface we're using and its IP
|
// make a best guess of the interface we're using and its IP
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
std::vector<ip_interface> const& interfaces = enum_net_interfaces(ios, ec);
|
std::vector<ip_interface> const& interfaces = enum_net_interfaces(ios, ec);
|
||||||
address ret = address_v4::any();
|
address ret = address_v4::any();
|
||||||
for (std::vector<ip_interface>::const_iterator i = interfaces.begin()
|
for (std::vector<ip_interface>::const_iterator i = interfaces.begin()
|
||||||
|
@ -137,7 +137,7 @@ namespace libtorrent
|
||||||
- common_bits(b1.c_array(), b2.c_array(), b1.size());
|
- common_bits(b1.c_array(), b2.c_array(), b1.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
broadcast_socket::broadcast_socket(asio::io_service& ios
|
broadcast_socket::broadcast_socket(io_service& ios
|
||||||
, udp::endpoint const& multicast_endpoint
|
, udp::endpoint const& multicast_endpoint
|
||||||
, receive_handler_t const& handler
|
, receive_handler_t const& handler
|
||||||
, bool loopback)
|
, bool loopback)
|
||||||
|
@ -148,7 +148,7 @@ namespace libtorrent
|
||||||
|
|
||||||
using namespace asio::ip::multicast;
|
using namespace asio::ip::multicast;
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
std::vector<ip_interface> interfaces = enum_net_interfaces(ios, ec);
|
std::vector<ip_interface> interfaces = enum_net_interfaces(ios, ec);
|
||||||
|
|
||||||
if (multicast_endpoint.address().is_v4())
|
if (multicast_endpoint.address().is_v4())
|
||||||
|
@ -179,7 +179,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
using namespace asio::ip::multicast;
|
using namespace asio::ip::multicast;
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
boost::shared_ptr<datagram_socket> s(new datagram_socket(ios));
|
boost::shared_ptr<datagram_socket> s(new datagram_socket(ios));
|
||||||
if (addr.is_v4())
|
if (addr.is_v4())
|
||||||
s->open(udp::v4(), ec);
|
s->open(udp::v4(), ec);
|
||||||
|
@ -205,7 +205,7 @@ namespace libtorrent
|
||||||
void broadcast_socket::open_unicast_socket(io_service& ios, address const& addr)
|
void broadcast_socket::open_unicast_socket(io_service& ios, address const& addr)
|
||||||
{
|
{
|
||||||
using namespace asio::ip::multicast;
|
using namespace asio::ip::multicast;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
boost::shared_ptr<datagram_socket> s(new datagram_socket(ios));
|
boost::shared_ptr<datagram_socket> s(new datagram_socket(ios));
|
||||||
s->open(addr.is_v4() ? udp::v4() : udp::v6(), ec);
|
s->open(addr.is_v4() ? udp::v4() : udp::v6(), ec);
|
||||||
if (ec) return;
|
if (ec) return;
|
||||||
|
@ -220,13 +220,13 @@ namespace libtorrent
|
||||||
, se.remote, bind(&broadcast_socket::on_receive, this, &se, _1, _2));
|
, se.remote, bind(&broadcast_socket::on_receive, this, &se, _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void broadcast_socket::send(char const* buffer, int size, asio::error_code& ec)
|
void broadcast_socket::send(char const* buffer, int size, error_code& ec)
|
||||||
{
|
{
|
||||||
for (std::list<socket_entry>::iterator i = m_unicast_sockets.begin()
|
for (std::list<socket_entry>::iterator i = m_unicast_sockets.begin()
|
||||||
, end(m_unicast_sockets.end()); i != end; ++i)
|
, end(m_unicast_sockets.end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
if (!i->socket) continue;
|
if (!i->socket) continue;
|
||||||
asio::error_code e;
|
error_code e;
|
||||||
i->socket->send_to(asio::buffer(buffer, size), m_multicast_endpoint, 0, e);
|
i->socket->send_to(asio::buffer(buffer, size), m_multicast_endpoint, 0, e);
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
// std::cerr << " sending on " << i->socket->local_endpoint().address().to_string() << " to: " << m_multicast_endpoint << std::endl;
|
// std::cerr << " sending on " << i->socket->local_endpoint().address().to_string() << " to: " << m_multicast_endpoint << std::endl;
|
||||||
|
@ -239,7 +239,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void broadcast_socket::on_receive(socket_entry* s, asio::error_code const& ec
|
void broadcast_socket::on_receive(socket_entry* s, error_code const& ec
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
if (ec || bytes_transferred == 0 || !m_on_receive) return;
|
if (ec || bytes_transferred == 0 || !m_on_receive) return;
|
||||||
|
|
|
@ -1707,7 +1707,7 @@ namespace libtorrent
|
||||||
// --------------------------
|
// --------------------------
|
||||||
|
|
||||||
// throws exception when the client should be disconnected
|
// throws exception when the client should be disconnected
|
||||||
void bt_peer_connection::on_receive(asio::error_code const& error
|
void bt_peer_connection::on_receive(error_code const& error
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
@ -2587,7 +2587,7 @@ namespace libtorrent
|
||||||
// --------------------------
|
// --------------------------
|
||||||
|
|
||||||
// throws exception when the client should be disconnected
|
// throws exception when the client should be disconnected
|
||||||
void bt_peer_connection::on_sent(asio::error_code const& error
|
void bt_peer_connection::on_sent(error_code const& error
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
|
|
@ -34,6 +34,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include "libtorrent/invariant_check.hpp"
|
#include "libtorrent/invariant_check.hpp"
|
||||||
#include "libtorrent/connection_queue.hpp"
|
#include "libtorrent/connection_queue.hpp"
|
||||||
|
#include "libtorrent/socket.hpp"
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
@ -112,7 +113,7 @@ namespace libtorrent
|
||||||
|
|
||||||
void connection_queue::close()
|
void connection_queue::close()
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.cancel(ec);
|
m_timer.cancel(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +154,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (m_queue.empty())
|
if (m_queue.empty())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.cancel(ec);
|
m_timer.cancel(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -166,7 +167,7 @@ namespace libtorrent
|
||||||
ptime expire = time_now() + i->timeout;
|
ptime expire = time_now() + i->timeout;
|
||||||
if (m_num_connecting == 0)
|
if (m_num_connecting == 0)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.expires_at(expire, ec);
|
m_timer.expires_at(expire, ec);
|
||||||
m_timer.async_wait(boost::bind(&connection_queue::on_timeout, this, _1));
|
m_timer.async_wait(boost::bind(&connection_queue::on_timeout, this, _1));
|
||||||
}
|
}
|
||||||
|
@ -206,7 +207,7 @@ namespace libtorrent
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void connection_queue::on_timeout(asio::error_code const& e)
|
void connection_queue::on_timeout(error_code const& e)
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
@ -251,7 +252,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (next_expire < max_time())
|
if (next_expire < max_time())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.expires_at(next_expire, ec);
|
m_timer.expires_at(next_expire, ec);
|
||||||
m_timer.async_wait(boost::bind(&connection_queue::on_timeout, this, _1));
|
m_timer.async_wait(boost::bind(&connection_queue::on_timeout, this, _1));
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "libtorrent/enum_net.hpp"
|
#include "libtorrent/enum_net.hpp"
|
||||||
#include "libtorrent/broadcast_socket.hpp"
|
#include "libtorrent/broadcast_socket.hpp"
|
||||||
#include <asio/ip/host_name.hpp>
|
#include <boost/asio/ip/host_name.hpp>
|
||||||
|
|
||||||
|
|
||||||
#if defined TORRENT_BSD
|
#if defined TORRENT_BSD
|
||||||
|
@ -225,7 +225,7 @@ namespace libtorrent
|
||||||
== (iface.interface_address.to_v4().to_ulong() & iface.netmask.to_v4().to_ulong());
|
== (iface.interface_address.to_v4().to_ulong() & iface.netmask.to_v4().to_ulong());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool in_local_network(asio::io_service& ios, address const& addr, asio::error_code& ec)
|
bool in_local_network(io_service& ios, address const& addr, error_code& ec)
|
||||||
{
|
{
|
||||||
std::vector<ip_interface> const& net = enum_net_interfaces(ios, ec);
|
std::vector<ip_interface> const& net = enum_net_interfaces(ios, ec);
|
||||||
if (ec) return false;
|
if (ec) return false;
|
||||||
|
@ -237,7 +237,7 @@ namespace libtorrent
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ip_interface> enum_net_interfaces(asio::io_service& ios, asio::error_code& ec)
|
std::vector<ip_interface> enum_net_interfaces(io_service& ios, error_code& ec)
|
||||||
{
|
{
|
||||||
std::vector<ip_interface> ret;
|
std::vector<ip_interface> ret;
|
||||||
// covers linux, MacOS X and BSD distributions
|
// covers linux, MacOS X and BSD distributions
|
||||||
|
@ -254,7 +254,7 @@ namespace libtorrent
|
||||||
ifc.ifc_buf = buf;
|
ifc.ifc_buf = buf;
|
||||||
if (ioctl(s, SIOCGIFCONF, &ifc) < 0)
|
if (ioctl(s, SIOCGIFCONF, &ifc) < 0)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
close(s);
|
close(s);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -283,7 +283,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
close(s);
|
close(s);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -310,7 +310,7 @@ namespace libtorrent
|
||||||
SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
|
SOCKET s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
if (s == SOCKET_ERROR)
|
if (s == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(WSAGetLastError(), asio::error::system_category);
|
ec = error_code(WSAGetLastError(), asio::error::system_category);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,7 +320,7 @@ namespace libtorrent
|
||||||
if (WSAIoctl(s, SIO_GET_INTERFACE_LIST, 0, 0, buffer,
|
if (WSAIoctl(s, SIO_GET_INTERFACE_LIST, 0, 0, buffer,
|
||||||
sizeof(buffer), &size, 0, 0) != 0)
|
sizeof(buffer), &size, 0, 0) != 0)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(WSAGetLastError(), asio::error::system_category);
|
ec = error_code(WSAGetLastError(), asio::error::system_category);
|
||||||
closesocket(s);
|
closesocket(s);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -356,7 +356,7 @@ namespace libtorrent
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
address get_default_gateway(asio::io_service& ios, asio::error_code& ec)
|
address get_default_gateway(io_service& ios, error_code& ec)
|
||||||
{
|
{
|
||||||
std::vector<ip_route> ret = enum_routes(ios, ec);
|
std::vector<ip_route> ret = enum_routes(ios, ec);
|
||||||
std::vector<ip_route>::iterator i = std::find_if(ret.begin(), ret.end()
|
std::vector<ip_route>::iterator i = std::find_if(ret.begin(), ret.end()
|
||||||
|
@ -365,7 +365,7 @@ namespace libtorrent
|
||||||
return i->gateway;
|
return i->gateway;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ip_route> enum_routes(asio::io_service& ios, asio::error_code& ec)
|
std::vector<ip_route> enum_routes(io_service& ios, error_code& ec)
|
||||||
{
|
{
|
||||||
std::vector<ip_route> ret;
|
std::vector<ip_route> ret;
|
||||||
|
|
||||||
|
@ -390,14 +390,14 @@ namespace libtorrent
|
||||||
int s = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC);
|
int s = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC);
|
||||||
if (s == -1)
|
if (s == -1)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
|
|
||||||
int n = write(s, &m, len);
|
int n = write(s, &m, len);
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
close(s);
|
close(s);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
|
@ -412,7 +412,7 @@ namespace libtorrent
|
||||||
n = read(s, &m, len);
|
n = read(s, &m, len);
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
close(s);
|
close(s);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
|
@ -423,7 +423,7 @@ namespace libtorrent
|
||||||
std::cout << " rtm_type: " << ptr->rtm_type << std::endl;
|
std::cout << " rtm_type: " << ptr->rtm_type << std::endl;
|
||||||
if (ptr->rtm_errno)
|
if (ptr->rtm_errno)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(ptr->rtm_errno, asio::error::system_category);
|
ec = error_code(ptr->rtm_errno, asio::error::system_category);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
if (m.m_rtm.rtm_flags & RTF_UP == 0
|
if (m.m_rtm.rtm_flags & RTF_UP == 0
|
||||||
|
@ -475,7 +475,7 @@ namespace libtorrent
|
||||||
size_t needed = 0;
|
size_t needed = 0;
|
||||||
if (sysctl(mib, 6, 0, &needed, 0, 0) < 0)
|
if (sysctl(mib, 6, 0, &needed, 0, 0) < 0)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,7 +493,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (sysctl(mib, 6, buf.get(), &needed, 0, 0) < 0)
|
if (sysctl(mib, 6, buf.get(), &needed, 0, 0) < 0)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,7 +562,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
ec = asio::error_code();
|
ec = error_code();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ret.push_back(r);
|
ret.push_back(r);
|
||||||
|
@ -582,7 +582,7 @@ namespace libtorrent
|
||||||
int sock = socket(PF_ROUTE, SOCK_DGRAM, NETLINK_ROUTE);
|
int sock = socket(PF_ROUTE, SOCK_DGRAM, NETLINK_ROUTE);
|
||||||
if (sock < 0)
|
if (sock < 0)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -600,7 +600,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (send(sock, nl_msg, nl_msg->nlmsg_len, 0) < 0)
|
if (send(sock, nl_msg, nl_msg->nlmsg_len, 0) < 0)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
close(sock);
|
close(sock);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
|
@ -608,7 +608,7 @@ namespace libtorrent
|
||||||
int len = read_nl_sock(sock, msg, BUFSIZE, seq, getpid());
|
int len = read_nl_sock(sock, msg, BUFSIZE, seq, getpid());
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
{
|
{
|
||||||
ec = asio::error_code(errno, asio::error::system_category);
|
ec = error_code(errno, asio::error::system_category);
|
||||||
close(sock);
|
close(sock);
|
||||||
return std::vector<ip_route>();
|
return std::vector<ip_route>();
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,10 +35,10 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/instantiate_connection.hpp"
|
#include "libtorrent/instantiate_connection.hpp"
|
||||||
#include "libtorrent/gzip.hpp"
|
#include "libtorrent/gzip.hpp"
|
||||||
#include "libtorrent/tracker_manager.hpp"
|
#include "libtorrent/tracker_manager.hpp"
|
||||||
|
#include "libtorrent/socket.hpp"
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <asio/ip/tcp.hpp>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
using boost::bind;
|
using boost::bind;
|
||||||
|
@ -118,7 +118,7 @@ void http_connection::start(std::string const& hostname, std::string const& port
|
||||||
if (ps) m_proxy = *ps;
|
if (ps) m_proxy = *ps;
|
||||||
|
|
||||||
m_timeout = timeout;
|
m_timeout = timeout;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.expires_from_now(m_timeout, ec);
|
m_timer.expires_from_now(m_timeout, ec);
|
||||||
m_timer.async_wait(bind(&http_connection::on_timeout
|
m_timer.async_wait(bind(&http_connection::on_timeout
|
||||||
, boost::weak_ptr<http_connection>(shared_from_this()), _1));
|
, boost::weak_ptr<http_connection>(shared_from_this()), _1));
|
||||||
|
@ -137,14 +137,14 @@ void http_connection::start(std::string const& hostname, std::string const& port
|
||||||
if (m_sock.is_open() && m_hostname == hostname && m_port == port
|
if (m_sock.is_open() && m_hostname == hostname && m_port == port
|
||||||
&& m_ssl == ssl && m_bind_addr == bind_addr)
|
&& m_ssl == ssl && m_bind_addr == bind_addr)
|
||||||
{
|
{
|
||||||
asio::async_write(m_sock, asio::buffer(sendbuffer)
|
async_write(m_sock, asio::buffer(sendbuffer)
|
||||||
, bind(&http_connection::on_write, shared_from_this(), _1));
|
, bind(&http_connection::on_write, shared_from_this(), _1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_ssl = ssl;
|
m_ssl = ssl;
|
||||||
m_bind_addr = bind_addr;
|
m_bind_addr = bind_addr;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_sock.close(ec);
|
m_sock.close(ec);
|
||||||
|
|
||||||
#ifdef TORRENT_USE_OPENSSL
|
#ifdef TORRENT_USE_OPENSSL
|
||||||
|
@ -168,7 +168,7 @@ void http_connection::start(std::string const& hostname, std::string const& port
|
||||||
#endif
|
#endif
|
||||||
if (m_bind_addr != address_v4::any())
|
if (m_bind_addr != address_v4::any())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_sock.bind(tcp::endpoint(m_bind_addr, 0), ec);
|
m_sock.bind(tcp::endpoint(m_bind_addr, 0), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -195,7 +195,7 @@ void http_connection::on_connect_timeout()
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_connection::on_timeout(boost::weak_ptr<http_connection> p
|
void http_connection::on_timeout(boost::weak_ptr<http_connection> p
|
||||||
, asio::error_code const& e)
|
, error_code const& e)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<http_connection> c = p.lock();
|
boost::shared_ptr<http_connection> c = p.lock();
|
||||||
if (!c) return;
|
if (!c) return;
|
||||||
|
@ -212,14 +212,14 @@ void http_connection::on_timeout(boost::weak_ptr<http_connection> p
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!c->m_sock.is_open()) return;
|
if (!c->m_sock.is_open()) return;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
c->m_timer.expires_at(c->m_last_receive + c->m_timeout, ec);
|
c->m_timer.expires_at(c->m_last_receive + c->m_timeout, ec);
|
||||||
c->m_timer.async_wait(bind(&http_connection::on_timeout, p, _1));
|
c->m_timer.async_wait(bind(&http_connection::on_timeout, p, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_connection::close()
|
void http_connection::close()
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.cancel(ec);
|
m_timer.cancel(ec);
|
||||||
m_limiter_timer.cancel(ec);
|
m_limiter_timer.cancel(ec);
|
||||||
m_sock.close(ec);
|
m_sock.close(ec);
|
||||||
|
@ -232,7 +232,7 @@ void http_connection::close()
|
||||||
m_handler.clear();
|
m_handler.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_connection::on_resolve(asio::error_code const& e
|
void http_connection::on_resolve(error_code const& e
|
||||||
, tcp::resolver::iterator i)
|
, tcp::resolver::iterator i)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
|
@ -269,14 +269,14 @@ void http_connection::connect(int ticket, tcp::endpoint target_address)
|
||||||
, shared_from_this(), _1/*, ++i*/));
|
, shared_from_this(), _1/*, ++i*/));
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_connection::on_connect(asio::error_code const& e
|
void http_connection::on_connect(error_code const& e
|
||||||
/*, tcp::resolver::iterator i*/)
|
/*, tcp::resolver::iterator i*/)
|
||||||
{
|
{
|
||||||
if (!e)
|
if (!e)
|
||||||
{
|
{
|
||||||
m_last_receive = time_now();
|
m_last_receive = time_now();
|
||||||
if (m_connect_handler) m_connect_handler(*this);
|
if (m_connect_handler) m_connect_handler(*this);
|
||||||
asio::async_write(m_sock, asio::buffer(sendbuffer)
|
async_write(m_sock, asio::buffer(sendbuffer)
|
||||||
, bind(&http_connection::on_write, shared_from_this(), _1));
|
, bind(&http_connection::on_write, shared_from_this(), _1));
|
||||||
}
|
}
|
||||||
/* else if (i != tcp::resolver::iterator())
|
/* else if (i != tcp::resolver::iterator())
|
||||||
|
@ -294,7 +294,7 @@ void http_connection::on_connect(asio::error_code const& e
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_connection::callback(asio::error_code const& e, char const* data, int size)
|
void http_connection::callback(error_code const& e, char const* data, int size)
|
||||||
{
|
{
|
||||||
if (!m_bottled || !m_called)
|
if (!m_bottled || !m_called)
|
||||||
{
|
{
|
||||||
|
@ -321,7 +321,7 @@ void http_connection::callback(asio::error_code const& e, char const* data, int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_connection::on_write(asio::error_code const& e)
|
void http_connection::on_write(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
|
@ -340,7 +340,7 @@ void http_connection::on_write(asio::error_code const& e)
|
||||||
if (m_download_quota == 0)
|
if (m_download_quota == 0)
|
||||||
{
|
{
|
||||||
if (!m_limiter_timer_active)
|
if (!m_limiter_timer_active)
|
||||||
on_assign_bandwidth(asio::error_code());
|
on_assign_bandwidth(error_code());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -350,7 +350,7 @@ void http_connection::on_write(asio::error_code const& e)
|
||||||
, shared_from_this(), _1, _2));
|
, shared_from_this(), _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_connection::on_read(asio::error_code const& e
|
void http_connection::on_read(error_code const& e
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
if (m_rate_limit)
|
if (m_rate_limit)
|
||||||
|
@ -394,7 +394,7 @@ void http_connection::on_read(asio::error_code const& e
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
// HTTP parse error
|
// HTTP parse error
|
||||||
asio::error_code ec = asio::error::fault;
|
error_code ec = asio::error::fault;
|
||||||
callback(ec, 0, 0);
|
callback(ec, 0, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -415,7 +415,7 @@ void http_connection::on_read(asio::error_code const& e
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_sock.close(ec);
|
m_sock.close(ec);
|
||||||
get(url, m_timeout, m_priority, &m_proxy, m_redirects - 1);
|
get(url, m_timeout, m_priority, &m_proxy, m_redirects - 1);
|
||||||
return;
|
return;
|
||||||
|
@ -434,7 +434,7 @@ void http_connection::on_read(asio::error_code const& e
|
||||||
}
|
}
|
||||||
else if (m_bottled && m_parser.finished())
|
else if (m_bottled && m_parser.finished())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.cancel(ec);
|
m_timer.cancel(ec);
|
||||||
callback(e, m_parser.get_body().begin, m_parser.get_body().left());
|
callback(e, m_parser.get_body().begin, m_parser.get_body().left());
|
||||||
}
|
}
|
||||||
|
@ -462,7 +462,7 @@ void http_connection::on_read(asio::error_code const& e
|
||||||
if (m_download_quota == 0)
|
if (m_download_quota == 0)
|
||||||
{
|
{
|
||||||
if (!m_limiter_timer_active)
|
if (!m_limiter_timer_active)
|
||||||
on_assign_bandwidth(asio::error_code());
|
on_assign_bandwidth(error_code());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -472,7 +472,7 @@ void http_connection::on_read(asio::error_code const& e
|
||||||
, shared_from_this(), _1, _2));
|
, shared_from_this(), _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_connection::on_assign_bandwidth(asio::error_code const& e)
|
void http_connection::on_assign_bandwidth(error_code const& e)
|
||||||
{
|
{
|
||||||
if ((e == asio::error::operation_aborted
|
if ((e == asio::error::operation_aborted
|
||||||
&& m_limiter_timer_active)
|
&& m_limiter_timer_active)
|
||||||
|
@ -499,7 +499,7 @@ void http_connection::on_assign_bandwidth(asio::error_code const& e)
|
||||||
, bind(&http_connection::on_read
|
, bind(&http_connection::on_read
|
||||||
, shared_from_this(), _1, _2));
|
, shared_from_this(), _1, _2));
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_limiter_timer_active = true;
|
m_limiter_timer_active = true;
|
||||||
m_limiter_timer.expires_from_now(milliseconds(250), ec);
|
m_limiter_timer.expires_from_now(milliseconds(250), ec);
|
||||||
m_limiter_timer.async_wait(bind(&http_connection::on_assign_bandwidth
|
m_limiter_timer.async_wait(bind(&http_connection::on_assign_bandwidth
|
||||||
|
@ -512,7 +512,7 @@ void http_connection::rate_limit(int limit)
|
||||||
|
|
||||||
if (!m_limiter_timer_active)
|
if (!m_limiter_timer_active)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_limiter_timer_active = true;
|
m_limiter_timer_active = true;
|
||||||
m_limiter_timer.expires_from_now(milliseconds(250), ec);
|
m_limiter_timer.expires_from_now(milliseconds(250), ec);
|
||||||
m_limiter_timer.async_wait(bind(&http_connection::on_assign_bandwidth
|
m_limiter_timer.async_wait(bind(&http_connection::on_assign_bandwidth
|
||||||
|
|
|
@ -38,13 +38,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
|
||||||
void http_stream::name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void http_stream::name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, boost::shared_ptr<handler_type> h)
|
, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e || i == tcp::resolver::iterator())
|
if (e || i == tcp::resolver::iterator())
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -53,12 +53,12 @@ namespace libtorrent
|
||||||
&http_stream::connected, this, _1, h));
|
&http_stream::connected, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_stream::connected(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void http_stream::connected(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -82,32 +82,32 @@ namespace libtorrent
|
||||||
m_user + ":" + m_password) + "\r\n", p);
|
m_user + ":" + m_password) + "\r\n", p);
|
||||||
}
|
}
|
||||||
write_string("\r\n", p);
|
write_string("\r\n", p);
|
||||||
asio::async_write(m_sock, asio::buffer(m_buffer)
|
async_write(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&http_stream::handshake1, this, _1, h));
|
, boost::bind(&http_stream::handshake1, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_stream::handshake1(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void http_stream::handshake1(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// read one byte from the socket
|
// read one byte from the socket
|
||||||
m_buffer.resize(1);
|
m_buffer.resize(1);
|
||||||
asio::async_read(m_sock, asio::buffer(m_buffer)
|
async_read(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&http_stream::handshake2, this, _1, h));
|
, boost::bind(&http_stream::handshake2, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_stream::handshake2(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void http_stream::handshake2(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,7 @@ namespace libtorrent
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ namespace libtorrent
|
||||||
if (code != 200)
|
if (code != 200)
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ namespace libtorrent
|
||||||
|
|
||||||
// read another byte from the socket
|
// read another byte from the socket
|
||||||
m_buffer.resize(read_pos + 1);
|
m_buffer.resize(read_pos + 1);
|
||||||
asio::async_read(m_sock, asio::buffer(&m_buffer[0] + read_pos, 1)
|
async_read(m_sock, asio::buffer(&m_buffer[0] + read_pos, 1)
|
||||||
, boost::bind(&http_stream::handshake2, this, _1, h));
|
, boost::bind(&http_stream::handshake2, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -194,7 +194,7 @@ namespace libtorrent
|
||||||
tracker_connection::close();
|
tracker_connection::close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_tracker_connection::on_response(asio::error_code const& ec
|
void http_tracker_connection::on_response(error_code const& ec
|
||||||
, http_parser const& parser, char const* data, int size)
|
, http_parser const& parser, char const* data, int size)
|
||||||
{
|
{
|
||||||
// keep this alive
|
// keep this alive
|
||||||
|
|
|
@ -37,12 +37,11 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/socket_type.hpp"
|
#include "libtorrent/socket_type.hpp"
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <asio/io_service.hpp>
|
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
|
||||||
bool instantiate_connection(asio::io_service& ios
|
bool instantiate_connection(io_service& ios
|
||||||
, proxy_settings const& ps, socket_type& s)
|
, proxy_settings const& ps, socket_type& s)
|
||||||
{
|
{
|
||||||
if (ps.type == proxy_settings::none)
|
if (ps.type == proxy_settings::none)
|
||||||
|
|
|
@ -40,8 +40,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
|
|
||||||
closest_nodes_observer::~closest_nodes_observer()
|
closest_nodes_observer::~closest_nodes_observer()
|
||||||
{
|
{
|
||||||
if (m_algorithm) m_algorithm->failed(m_self, true);
|
if (m_algorithm) m_algorithm->failed(m_self, true);
|
||||||
|
|
|
@ -66,9 +66,6 @@ enum
|
||||||
key_refresh = 5 // generate a new write token key every 5 minutes
|
key_refresh = 5 // generate a new write token key every 5 minutes
|
||||||
};
|
};
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
typedef asio::ip::address_v4 address;
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
const int tick_period = 1; // minutes
|
const int tick_period = 1; // minutes
|
||||||
|
@ -228,7 +225,7 @@ namespace libtorrent { namespace dht
|
||||||
s.dht_global_nodes = m_dht.num_global_nodes();
|
s.dht_global_nodes = m_dht.num_global_nodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dht_tracker::connection_timeout(asio::error_code const& e)
|
void dht_tracker::connection_timeout(error_code const& e)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
@ -247,7 +244,7 @@ namespace libtorrent { namespace dht
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
void dht_tracker::refresh_timeout(asio::error_code const& e)
|
void dht_tracker::refresh_timeout(error_code const& e)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
@ -263,7 +260,7 @@ namespace libtorrent { namespace dht
|
||||||
TORRENT_ASSERT(false);
|
TORRENT_ASSERT(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
void dht_tracker::tick(asio::error_code const& e)
|
void dht_tracker::tick(error_code const& e)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
@ -739,7 +736,7 @@ namespace libtorrent { namespace dht
|
||||||
bind(&dht_tracker::on_name_lookup, self(), _1, _2));
|
bind(&dht_tracker::on_name_lookup, self(), _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dht_tracker::on_name_lookup(asio::error_code const& e
|
void dht_tracker::on_name_lookup(error_code const& e
|
||||||
, udp::resolver::iterator host) try
|
, udp::resolver::iterator host) try
|
||||||
{
|
{
|
||||||
if (e || host == udp::resolver::iterator()) return;
|
if (e || host == udp::resolver::iterator()) return;
|
||||||
|
@ -757,7 +754,7 @@ namespace libtorrent { namespace dht
|
||||||
bind(&dht_tracker::on_router_name_lookup, self(), _1, _2));
|
bind(&dht_tracker::on_router_name_lookup, self(), _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dht_tracker::on_router_name_lookup(asio::error_code const& e
|
void dht_tracker::on_router_name_lookup(error_code const& e
|
||||||
, udp::resolver::iterator host) try
|
, udp::resolver::iterator host) try
|
||||||
{
|
{
|
||||||
if (e || host == udp::resolver::iterator()) return;
|
if (e || host == udp::resolver::iterator()) return;
|
||||||
|
@ -957,7 +954,7 @@ namespace libtorrent { namespace dht
|
||||||
|
|
||||||
m_send_buf.clear();
|
m_send_buf.clear();
|
||||||
bencode(std::back_inserter(m_send_buf), e);
|
bencode(std::back_inserter(m_send_buf), e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_sock.send(m.addr, &m_send_buf[0], (int)m_send_buf.size(), ec);
|
m_sock.send(m.addr, &m_send_buf[0], (int)m_send_buf.size(), ec);
|
||||||
|
|
||||||
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
||||||
|
|
|
@ -36,6 +36,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <libtorrent/kademlia/routing_table.hpp>
|
#include <libtorrent/kademlia/routing_table.hpp>
|
||||||
#include <libtorrent/kademlia/rpc_manager.hpp>
|
#include <libtorrent/kademlia/rpc_manager.hpp>
|
||||||
#include <libtorrent/io.hpp>
|
#include <libtorrent/io.hpp>
|
||||||
|
#include <libtorrent/socket.hpp>
|
||||||
|
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
@ -101,7 +102,7 @@ find_data::find_data(
|
||||||
add_requests();
|
add_requests();
|
||||||
}
|
}
|
||||||
|
|
||||||
void find_data::invoke(node_id const& id, asio::ip::udp::endpoint addr)
|
void find_data::invoke(node_id const& id, udp::endpoint addr)
|
||||||
{
|
{
|
||||||
if (m_done)
|
if (m_done)
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,8 +65,6 @@ namespace
|
||||||
// TODO: configurable?
|
// TODO: configurable?
|
||||||
enum { announce_interval = 30 };
|
enum { announce_interval = 30 };
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
|
|
||||||
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
||||||
TORRENT_DEFINE_LOG(node)
|
TORRENT_DEFINE_LOG(node)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -47,8 +47,6 @@ using boost::bind;
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
|
|
||||||
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
#ifdef TORRENT_DHT_VERBOSE_LOGGING
|
||||||
TORRENT_DEFINE_LOG(refresh)
|
TORRENT_DEFINE_LOG(refresh)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -50,9 +50,6 @@ using boost::uint8_t;
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
|
||||||
using asio::ip::udp;
|
|
||||||
typedef asio::ip::address_v4 address;
|
|
||||||
|
|
||||||
routing_table::routing_table(node_id const& id, int bucket_size
|
routing_table::routing_table(node_id const& id, int bucket_size
|
||||||
, dht_settings const& settings)
|
, dht_settings const& settings)
|
||||||
: m_bucket_size(bucket_size)
|
: m_bucket_size(bucket_size)
|
||||||
|
|
|
@ -39,7 +39,6 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
|
||||||
using boost::bind;
|
using boost::bind;
|
||||||
using asio::ip::udp;
|
|
||||||
|
|
||||||
namespace libtorrent { namespace dht
|
namespace libtorrent { namespace dht
|
||||||
{
|
{
|
||||||
|
|
14
src/lsd.cpp
14
src/lsd.cpp
|
@ -40,8 +40,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/ref.hpp>
|
#include <boost/ref.hpp>
|
||||||
#include <asio/ip/host_name.hpp>
|
#include <boost/asio/ip/host_name.hpp>
|
||||||
#include <asio/ip/multicast.hpp>
|
#include <boost/asio/ip/multicast.hpp>
|
||||||
#include <boost/thread/mutex.hpp>
|
#include <boost/thread/mutex.hpp>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
|
@ -52,7 +52,7 @@ using namespace libtorrent;
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
// defined in broadcast_socket.cpp
|
// defined in broadcast_socket.cpp
|
||||||
address guess_local_address(asio::io_service&);
|
address guess_local_address(io_service&);
|
||||||
}
|
}
|
||||||
|
|
||||||
lsd::lsd(io_service& ios, address const& listen_interface
|
lsd::lsd(io_service& ios, address const& listen_interface
|
||||||
|
@ -84,7 +84,7 @@ void lsd::announce(sha1_hash const& ih, int listen_port)
|
||||||
std::string const& msg = btsearch.str();
|
std::string const& msg = btsearch.str();
|
||||||
|
|
||||||
m_retry_count = 1;
|
m_retry_count = 1;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket.send(msg.c_str(), int(msg.size()), ec);
|
m_socket.send(msg.c_str(), int(msg.size()), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -101,11 +101,11 @@ void lsd::announce(sha1_hash const& ih, int listen_port)
|
||||||
m_broadcast_timer.async_wait(bind(&lsd::resend_announce, self(), _1, msg));
|
m_broadcast_timer.async_wait(bind(&lsd::resend_announce, self(), _1, msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void lsd::resend_announce(asio::error_code const& e, std::string msg)
|
void lsd::resend_announce(error_code const& e, std::string msg)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket.send(msg.c_str(), int(msg.size()), ec);
|
m_socket.send(msg.c_str(), int(msg.size()), ec);
|
||||||
|
|
||||||
++m_retry_count;
|
++m_retry_count;
|
||||||
|
@ -192,7 +192,7 @@ void lsd::on_announce(udp::endpoint const& from, char* buffer
|
||||||
void lsd::close()
|
void lsd::close()
|
||||||
{
|
{
|
||||||
m_socket.close();
|
m_socket.close();
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_broadcast_timer.cancel(ec);
|
m_broadcast_timer.cancel(ec);
|
||||||
m_disabled = true;
|
m_disabled = true;
|
||||||
m_callback.clear();
|
m_callback.clear();
|
||||||
|
|
|
@ -33,7 +33,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/pch.hpp"
|
#include "libtorrent/pch.hpp"
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <asio/ip/host_name.hpp>
|
#include <boost/asio/ip/host_name.hpp>
|
||||||
|
|
||||||
#include "libtorrent/natpmp.hpp"
|
#include "libtorrent/natpmp.hpp"
|
||||||
#include "libtorrent/io.hpp"
|
#include "libtorrent/io.hpp"
|
||||||
|
@ -63,7 +63,7 @@ void natpmp::rebind(address const& listen_interface)
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
address gateway = get_default_gateway(m_socket.get_io_service(), ec);
|
address gateway = get_default_gateway(m_socket.get_io_service(), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -198,7 +198,7 @@ void natpmp::try_next_mapping(int i)
|
||||||
{
|
{
|
||||||
if (m_abort)
|
if (m_abort)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_send_timer.cancel(ec);
|
m_send_timer.cancel(ec);
|
||||||
m_socket.close(ec);
|
m_socket.close(ec);
|
||||||
}
|
}
|
||||||
|
@ -264,7 +264,7 @@ void natpmp::send_map_request(int i)
|
||||||
<< " ttl: " << ttl << " ]" << std::endl;
|
<< " ttl: " << ttl << " ]" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket.send_to(asio::buffer(buf, 12), m_nat_endpoint, 0, ec);
|
m_socket.send_to(asio::buffer(buf, 12), m_nat_endpoint, 0, ec);
|
||||||
// linear back-off instead of exponential
|
// linear back-off instead of exponential
|
||||||
++m_retry_count;
|
++m_retry_count;
|
||||||
|
@ -272,7 +272,7 @@ void natpmp::send_map_request(int i)
|
||||||
m_send_timer.async_wait(bind(&natpmp::resend_request, self(), i, _1));
|
m_send_timer.async_wait(bind(&natpmp::resend_request, self(), i, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void natpmp::resend_request(int i, asio::error_code const& e)
|
void natpmp::resend_request(int i, error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -290,7 +290,7 @@ void natpmp::resend_request(int i, asio::error_code const& e)
|
||||||
send_map_request(i);
|
send_map_request(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void natpmp::on_reply(asio::error_code const& e
|
void natpmp::on_reply(error_code const& e
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
using namespace libtorrent::detail;
|
using namespace libtorrent::detail;
|
||||||
|
@ -305,7 +305,7 @@ void natpmp::on_reply(asio::error_code const& e
|
||||||
|
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_send_timer.cancel(ec);
|
m_send_timer.cancel(ec);
|
||||||
|
|
||||||
TORRENT_ASSERT(m_currently_mapping >= 0);
|
TORRENT_ASSERT(m_currently_mapping >= 0);
|
||||||
|
@ -439,7 +439,7 @@ void natpmp::update_expiration_timer()
|
||||||
<< " ttl: " << total_seconds(min_expire - time_now())
|
<< " ttl: " << total_seconds(min_expire - time_now())
|
||||||
<< " ]" << std::endl;
|
<< " ]" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
if (m_next_refresh >= 0) m_refresh_timer.cancel(ec);
|
if (m_next_refresh >= 0) m_refresh_timer.cancel(ec);
|
||||||
m_refresh_timer.expires_from_now(min_expire - now, ec);
|
m_refresh_timer.expires_from_now(min_expire - now, ec);
|
||||||
m_refresh_timer.async_wait(bind(&natpmp::mapping_expired, self(), _1, min_index));
|
m_refresh_timer.async_wait(bind(&natpmp::mapping_expired, self(), _1, min_index));
|
||||||
|
@ -447,7 +447,7 @@ void natpmp::update_expiration_timer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void natpmp::mapping_expired(asio::error_code const& e, int i)
|
void natpmp::mapping_expired(error_code const& e, int i)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
@ -463,7 +463,7 @@ void natpmp::close()
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
m_abort = true;
|
m_abort = true;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
#if defined(TORRENT_LOGGING) || defined(TORRENT_VERBOSE_LOGGING)
|
#if defined(TORRENT_LOGGING) || defined(TORRENT_VERBOSE_LOGGING)
|
||||||
m_log << time_now_string() << " close" << std::endl;
|
m_log << time_now_string() << " close" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -243,7 +243,7 @@ namespace libtorrent
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
TORRENT_ASSERT(m_socket->remote_endpoint() == remote() || ec);
|
TORRENT_ASSERT(m_socket->remote_endpoint() == remote() || ec);
|
||||||
m_logger = m_ses.create_log(remote().address().to_string(ec) + "_"
|
m_logger = m_ses.create_log(remote().address().to_string(ec) + "_"
|
||||||
+ boost::lexical_cast<std::string>(remote().port()), m_ses.listen_port());
|
+ boost::lexical_cast<std::string>(remote().port()), m_ses.listen_port());
|
||||||
|
@ -291,7 +291,7 @@ namespace libtorrent
|
||||||
if (!t)
|
if (!t)
|
||||||
{
|
{
|
||||||
tcp::socket::non_blocking_io ioc(true);
|
tcp::socket::non_blocking_io ioc(true);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket->io_control(ioc, ec);
|
m_socket->io_control(ioc, ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -2207,7 +2207,7 @@ namespace libtorrent
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_disconnecting = true;
|
m_disconnecting = true;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket->close(ec);
|
m_socket->close(ec);
|
||||||
m_ses.close_connection(this, message);
|
m_ses.close_connection(this, message);
|
||||||
}
|
}
|
||||||
|
@ -2998,7 +2998,7 @@ namespace libtorrent
|
||||||
// --------------------------
|
// --------------------------
|
||||||
|
|
||||||
// throws exception when the client should be disconnected
|
// throws exception when the client should be disconnected
|
||||||
void peer_connection::on_receive_data(const asio::error_code& error
|
void peer_connection::on_receive_data(const error_code& error
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||||
|
@ -3063,7 +3063,7 @@ namespace libtorrent
|
||||||
if (int(m_recv_buffer.size()) < regular_buffer_size)
|
if (int(m_recv_buffer.size()) < regular_buffer_size)
|
||||||
m_recv_buffer.resize(regular_buffer_size);
|
m_recv_buffer.resize(regular_buffer_size);
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
if (m_disk_recv_buffer == 0 || regular_buffer_size >= m_recv_pos + max_receive)
|
if (m_disk_recv_buffer == 0 || regular_buffer_size >= m_recv_pos + max_receive)
|
||||||
{
|
{
|
||||||
// only receive into regular buffer
|
// only receive into regular buffer
|
||||||
|
@ -3158,7 +3158,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING
|
||||||
(*m_ses.m_logger) << time_now_string() << " CONNECTING: " << m_remote.address().to_string(ec)
|
(*m_ses.m_logger) << time_now_string() << " CONNECTING: " << m_remote.address().to_string(ec)
|
||||||
<< ":" << m_remote.port() << "\n";
|
<< ":" << m_remote.port() << "\n";
|
||||||
|
@ -3209,7 +3209,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void peer_connection::on_connection_complete(asio::error_code const& e)
|
void peer_connection::on_connection_complete(error_code const& e)
|
||||||
{
|
{
|
||||||
ptime completed = time_now();
|
ptime completed = time_now();
|
||||||
|
|
||||||
|
@ -3247,7 +3247,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (m_remote.address().is_v4())
|
if (m_remote.address().is_v4())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket->set_option(type_of_service(m_ses.settings().peer_tos), ec);
|
m_socket->set_option(type_of_service(m_ses.settings().peer_tos), ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3261,7 +3261,7 @@ namespace libtorrent
|
||||||
// --------------------------
|
// --------------------------
|
||||||
|
|
||||||
// throws exception when the client should be disconnected
|
// throws exception when the client should be disconnected
|
||||||
void peer_connection::on_send_data(asio::error_code const& error
|
void peer_connection::on_send_data(error_code const& error
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||||
|
|
|
@ -225,7 +225,7 @@ namespace libtorrent
|
||||||
// blocks be from whole pieces, possibly by returning more blocks
|
// blocks be from whole pieces, possibly by returning more blocks
|
||||||
// than we requested.
|
// than we requested.
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
TORRENT_ASSERT(c.remote() == c.get_socket()->remote_endpoint(ec) || ec);
|
TORRENT_ASSERT(c.remote() == c.get_socket()->remote_endpoint(ec) || ec);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -625,7 +625,7 @@ namespace libtorrent
|
||||||
|
|
||||||
// TODO: only allow _one_ connection to use this
|
// TODO: only allow _one_ connection to use this
|
||||||
// override at a time
|
// override at a time
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
TORRENT_ASSERT(c.remote() == c.get_socket()->remote_endpoint(ec) || ec);
|
TORRENT_ASSERT(c.remote() == c.get_socket()->remote_endpoint(ec) || ec);
|
||||||
|
|
||||||
aux::session_impl& ses = m_torrent->session();
|
aux::session_impl& ses = m_torrent->session();
|
||||||
|
@ -697,7 +697,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
// we don't have any info about this peer.
|
// we don't have any info about this peer.
|
||||||
// add a new entry
|
// add a new entry
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
TORRENT_ASSERT(c.remote() == c.get_socket()->remote_endpoint(ec) || ec);
|
TORRENT_ASSERT(c.remote() == c.get_socket()->remote_endpoint(ec) || ec);
|
||||||
|
|
||||||
peer p(c.remote(), peer::not_connectable, 0);
|
peer p(c.remote(), peer::not_connectable, 0);
|
||||||
|
@ -1156,7 +1156,7 @@ namespace libtorrent
|
||||||
// INVARIANT_CHECK;
|
// INVARIANT_CHECK;
|
||||||
|
|
||||||
TORRENT_ASSERT(c);
|
TORRENT_ASSERT(c);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
TORRENT_ASSERT(c->remote() == c->get_socket()->remote_endpoint(ec) || ec);
|
TORRENT_ASSERT(c->remote() == c->get_socket()->remote_endpoint(ec) || ec);
|
||||||
|
|
||||||
return std::find_if(
|
return std::find_if(
|
||||||
|
|
|
@ -250,7 +250,7 @@ namespace aux {
|
||||||
*i = printable[rand() % (sizeof(printable)-1)];
|
*i = printable[rand() % (sizeof(printable)-1)];
|
||||||
}
|
}
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.expires_from_now(seconds(1), ec);
|
m_timer.expires_from_now(seconds(1), ec);
|
||||||
m_timer.async_wait(
|
m_timer.async_wait(
|
||||||
bind(&session_impl::second_tick, this, _1));
|
bind(&session_impl::second_tick, this, _1));
|
||||||
|
@ -396,7 +396,7 @@ namespace aux {
|
||||||
if (m_dht) m_dht->stop();
|
if (m_dht) m_dht->stop();
|
||||||
m_dht_socket.close();
|
m_dht_socket.close();
|
||||||
#endif
|
#endif
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.cancel(ec);
|
m_timer.cancel(ec);
|
||||||
|
|
||||||
// close the listen sockets
|
// close the listen sockets
|
||||||
|
@ -535,7 +535,7 @@ namespace aux {
|
||||||
session_impl::listen_socket_t session_impl::setup_listener(tcp::endpoint ep
|
session_impl::listen_socket_t session_impl::setup_listener(tcp::endpoint ep
|
||||||
, int retries, bool v6_only)
|
, int retries, bool v6_only)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
listen_socket_t s;
|
listen_socket_t s;
|
||||||
s.sock.reset(new socket_acceptor(m_io_service));
|
s.sock.reset(new socket_acceptor(m_io_service));
|
||||||
s.sock->open(ep.protocol(), ec);
|
s.sock->open(ep.protocol(), ec);
|
||||||
|
@ -544,7 +544,7 @@ namespace aux {
|
||||||
s.sock->bind(ep, ec);
|
s.sock->bind(ep, ec);
|
||||||
while (ec && retries > 0)
|
while (ec && retries > 0)
|
||||||
{
|
{
|
||||||
ec = asio::error_code();
|
ec = error_code();
|
||||||
TORRENT_ASSERT(!ec);
|
TORRENT_ASSERT(!ec);
|
||||||
--retries;
|
--retries;
|
||||||
ep.port(ep.port() + 1);
|
ep.port(ep.port() + 1);
|
||||||
|
@ -555,7 +555,7 @@ namespace aux {
|
||||||
// instead of giving up, try
|
// instead of giving up, try
|
||||||
// let the OS pick a port
|
// let the OS pick a port
|
||||||
ep.port(0);
|
ep.port(0);
|
||||||
ec = asio::error_code();
|
ec = error_code();
|
||||||
s.sock->bind(ep, ec);
|
s.sock->bind(ep, ec);
|
||||||
}
|
}
|
||||||
if (ec)
|
if (ec)
|
||||||
|
@ -661,7 +661,7 @@ namespace aux {
|
||||||
for (std::list<listen_socket_t>::const_iterator i = m_listen_sockets.begin()
|
for (std::list<listen_socket_t>::const_iterator i = m_listen_sockets.begin()
|
||||||
, end(m_listen_sockets.end()); i != end; ++i)
|
, end(m_listen_sockets.end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
tcp::endpoint ep = i->sock->local_endpoint(ec);
|
tcp::endpoint ep = i->sock->local_endpoint(ec);
|
||||||
if (ec || ep.address().is_v4()) continue;
|
if (ec || ep.address().is_v4()) continue;
|
||||||
|
|
||||||
|
@ -691,7 +691,7 @@ namespace aux {
|
||||||
|
|
||||||
if (!m_listen_sockets.empty())
|
if (!m_listen_sockets.empty())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
tcp::endpoint local = m_listen_sockets.front().sock->local_endpoint(ec);
|
tcp::endpoint local = m_listen_sockets.front().sock->local_endpoint(ec);
|
||||||
if (!ec)
|
if (!ec)
|
||||||
{
|
{
|
||||||
|
@ -713,7 +713,7 @@ namespace aux {
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
|
|
||||||
void session_impl::on_receive_udp(asio::error_code const& e
|
void session_impl::on_receive_udp(error_code const& e
|
||||||
, udp::endpoint const& ep, char const* buf, int len)
|
, udp::endpoint const& ep, char const* buf, int len)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
|
@ -746,7 +746,7 @@ namespace aux {
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_impl::on_incoming_connection(shared_ptr<socket_type> const& s
|
void session_impl::on_incoming_connection(shared_ptr<socket_type> const& s
|
||||||
, weak_ptr<socket_acceptor> listen_socket, asio::error_code const& e)
|
, weak_ptr<socket_acceptor> listen_socket, error_code const& e)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<socket_acceptor> listener = listen_socket.lock();
|
boost::shared_ptr<socket_acceptor> listener = listen_socket.lock();
|
||||||
if (!listener) return;
|
if (!listener) return;
|
||||||
|
@ -756,7 +756,7 @@ namespace aux {
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
if (m_abort) return;
|
if (m_abort) return;
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
tcp::endpoint ep = listener->local_endpoint(ec);
|
tcp::endpoint ep = listener->local_endpoint(ec);
|
||||||
|
@ -926,7 +926,7 @@ namespace aux {
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_impl::second_tick(asio::error_code const& e)
|
void session_impl::second_tick(error_code const& e)
|
||||||
{
|
{
|
||||||
session_impl::mutex_t::scoped_lock l(m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
|
@ -947,7 +947,7 @@ namespace aux {
|
||||||
float tick_interval = total_microseconds(time_now() - m_last_tick) / 1000000.f;
|
float tick_interval = total_microseconds(time_now() - m_last_tick) / 1000000.f;
|
||||||
m_last_tick = time_now();
|
m_last_tick = time_now();
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timer.expires_from_now(seconds(1), ec);
|
m_timer.expires_from_now(seconds(1), ec);
|
||||||
m_timer.async_wait(
|
m_timer.async_wait(
|
||||||
bind(&session_impl::second_tick, this, _1));
|
bind(&session_impl::second_tick, this, _1));
|
||||||
|
|
|
@ -37,13 +37,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
|
||||||
void socks4_stream::name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void socks4_stream::name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, boost::shared_ptr<handler_type> h)
|
, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (i == tcp::resolver::iterator())
|
if (i == tcp::resolver::iterator())
|
||||||
{
|
{
|
||||||
asio::error_code ec = asio::error::operation_not_supported;
|
error_code ec = asio::error::operation_not_supported;
|
||||||
(*h)(ec);
|
(*h)(ec);
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
|
@ -64,12 +64,12 @@ namespace libtorrent
|
||||||
&socks4_stream::connected, this, _1, h));
|
&socks4_stream::connected, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks4_stream::connected(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks4_stream::connected(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -86,31 +86,31 @@ namespace libtorrent
|
||||||
p += m_user.size();
|
p += m_user.size();
|
||||||
write_uint8(0, p); // NULL terminator
|
write_uint8(0, p); // NULL terminator
|
||||||
|
|
||||||
asio::async_write(m_sock, asio::buffer(m_buffer)
|
async_write(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks4_stream::handshake1, this, _1, h));
|
, boost::bind(&socks4_stream::handshake1, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks4_stream::handshake1(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks4_stream::handshake1(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_buffer.resize(8);
|
m_buffer.resize(8);
|
||||||
asio::async_read(m_sock, asio::buffer(m_buffer)
|
async_read(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks4_stream::handshake2, this, _1, h));
|
, boost::bind(&socks4_stream::handshake2, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks4_stream::handshake2(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks4_stream::handshake2(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (reply_version != 0)
|
if (reply_version != 0)
|
||||||
{
|
{
|
||||||
asio::error_code ec = asio::error::operation_not_supported;
|
error_code ec = asio::error::operation_not_supported;
|
||||||
(*h)(ec);
|
(*h)(ec);
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
|
@ -137,7 +137,7 @@ namespace libtorrent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
asio::error_code ec = asio::error::fault;
|
error_code ec = asio::error::fault;
|
||||||
switch (status_code)
|
switch (status_code)
|
||||||
{
|
{
|
||||||
case 91: ec = asio::error::connection_refused; break;
|
case 91: ec = asio::error::connection_refused; break;
|
||||||
|
|
|
@ -38,13 +38,13 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
|
||||||
void socks5_stream::name_lookup(asio::error_code const& e, tcp::resolver::iterator i
|
void socks5_stream::name_lookup(error_code const& e, tcp::resolver::iterator i
|
||||||
, boost::shared_ptr<handler_type> h)
|
, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e || i == tcp::resolver::iterator())
|
if (e || i == tcp::resolver::iterator())
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -53,12 +53,12 @@ namespace libtorrent
|
||||||
&socks5_stream::connected, this, _1, h));
|
&socks5_stream::connected, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks5_stream::connected(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks5_stream::connected(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -79,31 +79,31 @@ namespace libtorrent
|
||||||
write_uint8(0, p); // no authentication
|
write_uint8(0, p); // no authentication
|
||||||
write_uint8(2, p); // username/password
|
write_uint8(2, p); // username/password
|
||||||
}
|
}
|
||||||
asio::async_write(m_sock, asio::buffer(m_buffer)
|
async_write(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks5_stream::handshake1, this, _1, h));
|
, boost::bind(&socks5_stream::handshake1, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks5_stream::handshake1(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks5_stream::handshake1(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_buffer.resize(2);
|
m_buffer.resize(2);
|
||||||
asio::async_read(m_sock, asio::buffer(m_buffer)
|
async_read(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks5_stream::handshake2, this, _1, h));
|
, boost::bind(&socks5_stream::handshake2, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks5_stream::handshake2(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks5_stream::handshake2(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ namespace libtorrent
|
||||||
if (version < 5)
|
if (version < 5)
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ namespace libtorrent
|
||||||
if (m_user.empty())
|
if (m_user.empty())
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -144,41 +144,41 @@ namespace libtorrent
|
||||||
write_string(m_user, p);
|
write_string(m_user, p);
|
||||||
write_uint8(m_password.size(), p);
|
write_uint8(m_password.size(), p);
|
||||||
write_string(m_password, p);
|
write_string(m_password, p);
|
||||||
asio::async_write(m_sock, asio::buffer(m_buffer)
|
async_write(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks5_stream::handshake3, this, _1, h));
|
, boost::bind(&socks5_stream::handshake3, this, _1, h));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks5_stream::handshake3(asio::error_code const& e
|
void socks5_stream::handshake3(error_code const& e
|
||||||
, boost::shared_ptr<handler_type> h)
|
, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_buffer.resize(2);
|
m_buffer.resize(2);
|
||||||
asio::async_read(m_sock, asio::buffer(m_buffer)
|
async_read(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks5_stream::handshake4, this, _1, h));
|
, boost::bind(&socks5_stream::handshake4, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks5_stream::handshake4(asio::error_code const& e
|
void socks5_stream::handshake4(error_code const& e
|
||||||
, boost::shared_ptr<handler_type> h)
|
, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ namespace libtorrent
|
||||||
if (version != 1)
|
if (version != 1)
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ namespace libtorrent
|
||||||
if (status != 0)
|
if (status != 0)
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -223,31 +223,31 @@ namespace libtorrent
|
||||||
write_endpoint(m_remote_endpoint, p);
|
write_endpoint(m_remote_endpoint, p);
|
||||||
TORRENT_ASSERT(p - &m_buffer[0] == int(m_buffer.size()));
|
TORRENT_ASSERT(p - &m_buffer[0] == int(m_buffer.size()));
|
||||||
|
|
||||||
asio::async_write(m_sock, asio::buffer(m_buffer)
|
async_write(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks5_stream::connect1, this, _1, h));
|
, boost::bind(&socks5_stream::connect1, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks5_stream::connect1(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks5_stream::connect1(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_buffer.resize(6 + 4); // assume an IPv4 address
|
m_buffer.resize(6 + 4); // assume an IPv4 address
|
||||||
asio::async_read(m_sock, asio::buffer(m_buffer)
|
async_read(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks5_stream::connect2, this, _1, h));
|
, boost::bind(&socks5_stream::connect2, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks5_stream::connect2(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks5_stream::connect2(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -260,14 +260,14 @@ namespace libtorrent
|
||||||
if (version < 5)
|
if (version < 5)
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int response = read_uint8(p);
|
int response = read_uint8(p);
|
||||||
if (response != 0)
|
if (response != 0)
|
||||||
{
|
{
|
||||||
asio::error_code e = asio::error::fault;
|
error_code e = asio::error::fault;
|
||||||
switch (response)
|
switch (response)
|
||||||
{
|
{
|
||||||
case 1: e = asio::error::fault; break;
|
case 1: e = asio::error::fault; break;
|
||||||
|
@ -280,7 +280,7 @@ namespace libtorrent
|
||||||
case 8: e = asio::error::address_family_not_supported; break;
|
case 8: e = asio::error::address_family_not_supported; break;
|
||||||
}
|
}
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -305,22 +305,22 @@ namespace libtorrent
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(*h)(asio::error::operation_not_supported);
|
(*h)(asio::error::operation_not_supported);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_buffer.resize(skip_bytes);
|
m_buffer.resize(skip_bytes);
|
||||||
|
|
||||||
asio::async_read(m_sock, asio::buffer(m_buffer)
|
async_read(m_sock, asio::buffer(m_buffer)
|
||||||
, boost::bind(&socks5_stream::connect3, this, _1, h));
|
, boost::bind(&socks5_stream::connect3, this, _1, h));
|
||||||
}
|
}
|
||||||
|
|
||||||
void socks5_stream::connect3(asio::error_code const& e, boost::shared_ptr<handler_type> h)
|
void socks5_stream::connect3(error_code const& e, boost::shared_ptr<handler_type> h)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
{
|
{
|
||||||
(*h)(e);
|
(*h)(e);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
close(ec);
|
close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,7 +307,7 @@ namespace libtorrent
|
||||||
boost::weak_ptr<torrent> self(shared_from_this());
|
boost::weak_ptr<torrent> self(shared_from_this());
|
||||||
if (m_torrent_file->is_valid()) init();
|
if (m_torrent_file->is_valid()) init();
|
||||||
if (m_abort) return;
|
if (m_abort) return;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_announce_timer.expires_from_now(seconds(1), ec);
|
m_announce_timer.expires_from_now(seconds(1), ec);
|
||||||
m_announce_timer.async_wait(
|
m_announce_timer.async_wait(
|
||||||
bind(&torrent::on_announce_disp, self, _1));
|
bind(&torrent::on_announce_disp, self, _1));
|
||||||
|
@ -673,7 +673,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::on_announce_disp(boost::weak_ptr<torrent> p
|
void torrent::on_announce_disp(boost::weak_ptr<torrent> p
|
||||||
, asio::error_code const& e)
|
, error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
boost::shared_ptr<torrent> t = p.lock();
|
boost::shared_ptr<torrent> t = p.lock();
|
||||||
|
@ -687,7 +687,7 @@ namespace libtorrent
|
||||||
|
|
||||||
boost::weak_ptr<torrent> self(shared_from_this());
|
boost::weak_ptr<torrent> self(shared_from_this());
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
if (!m_torrent_file->priv())
|
if (!m_torrent_file->priv())
|
||||||
{
|
{
|
||||||
// announce on local network every 5 minutes
|
// announce on local network every 5 minutes
|
||||||
|
@ -865,7 +865,7 @@ namespace libtorrent
|
||||||
if (i->pid == m_ses.get_peer_id())
|
if (i->pid == m_ses.get_peer_id())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
tcp::endpoint a(address::from_string(i->ip, ec), i->port);
|
tcp::endpoint a(address::from_string(i->ip, ec), i->port);
|
||||||
|
|
||||||
if (ec)
|
if (ec)
|
||||||
|
@ -905,7 +905,7 @@ namespace libtorrent
|
||||||
m_got_tracker_response = true;
|
m_got_tracker_response = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::on_peer_name_lookup(asio::error_code const& e, tcp::resolver::iterator host
|
void torrent::on_peer_name_lookup(error_code const& e, tcp::resolver::iterator host
|
||||||
, peer_id pid)
|
, peer_id pid)
|
||||||
{
|
{
|
||||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||||
|
@ -1369,7 +1369,7 @@ namespace libtorrent
|
||||||
bind(&torrent::on_files_released, shared_from_this(), _1, _2));
|
bind(&torrent::on_files_released, shared_from_this(), _1, _2));
|
||||||
|
|
||||||
m_owning_storage = 0;
|
m_owning_storage = 0;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_announce_timer.cancel(ec);
|
m_announce_timer.cancel(ec);
|
||||||
m_host_resolver.cancel();
|
m_host_resolver.cancel();
|
||||||
}
|
}
|
||||||
|
@ -1976,7 +1976,7 @@ namespace libtorrent
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::on_proxy_name_lookup(asio::error_code const& e, tcp::resolver::iterator host
|
void torrent::on_proxy_name_lookup(error_code const& e, tcp::resolver::iterator host
|
||||||
, std::string url)
|
, std::string url)
|
||||||
{
|
{
|
||||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||||
|
@ -2028,7 +2028,7 @@ namespace libtorrent
|
||||||
bind(&torrent::on_name_lookup, shared_from_this(), _1, _2, url, a));
|
bind(&torrent::on_name_lookup, shared_from_this(), _1, _2, url, a));
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::on_name_lookup(asio::error_code const& e, tcp::resolver::iterator host
|
void torrent::on_name_lookup(error_code const& e, tcp::resolver::iterator host
|
||||||
, std::string url, tcp::endpoint proxy)
|
, std::string url, tcp::endpoint proxy)
|
||||||
{
|
{
|
||||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||||
|
@ -2090,7 +2090,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<int, int> const& out_ports = m_settings.outgoing_ports;
|
std::pair<int, int> const& out_ports = m_settings.outgoing_ports;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
if (out_ports.first > 0 && out_ports.second >= out_ports.first)
|
if (out_ports.first > 0 && out_ports.second >= out_ports.first)
|
||||||
s->bind(tcp::endpoint(address(), m_ses.next_port()), ec);
|
s->bind(tcp::endpoint(address(), m_ses.next_port()), ec);
|
||||||
|
|
||||||
|
@ -2176,7 +2176,7 @@ namespace libtorrent
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::on_country_lookup(asio::error_code const& error, tcp::resolver::iterator i
|
void torrent::on_country_lookup(error_code const& error, tcp::resolver::iterator i
|
||||||
, intrusive_ptr<peer_connection> p) const
|
, intrusive_ptr<peer_connection> p) const
|
||||||
{
|
{
|
||||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||||
|
@ -2369,7 +2369,7 @@ namespace libtorrent
|
||||||
for (policy::const_iterator i = m_policy.begin_peer()
|
for (policy::const_iterator i = m_policy.begin_peer()
|
||||||
, end(m_policy.end_peer()); i != end; ++i)
|
, end(m_policy.end_peer()); i != end; ++i)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
if (i->second.banned)
|
if (i->second.banned)
|
||||||
{
|
{
|
||||||
tcp::endpoint ip = i->second.ip;
|
tcp::endpoint ip = i->second.ip;
|
||||||
|
@ -2538,7 +2538,7 @@ namespace libtorrent
|
||||||
bool ret = instantiate_connection(m_ses.m_io_service, m_ses.peer_proxy(), *s);
|
bool ret = instantiate_connection(m_ses.m_io_service, m_ses.peer_proxy(), *s);
|
||||||
TORRENT_ASSERT(ret);
|
TORRENT_ASSERT(ret);
|
||||||
std::pair<int, int> const& out_ports = m_ses.settings().outgoing_ports;
|
std::pair<int, int> const& out_ports = m_ses.settings().outgoing_ports;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
if (out_ports.first > 0 && out_ports.second >= out_ports.first)
|
if (out_ports.first > 0 && out_ports.second >= out_ports.first)
|
||||||
s->bind(tcp::endpoint(address(), m_ses.next_port()), ec);
|
s->bind(tcp::endpoint(address(), m_ses.next_port()), ec);
|
||||||
|
|
||||||
|
@ -2683,7 +2683,7 @@ namespace libtorrent
|
||||||
TORRENT_ASSERT(m_connections.find(p) == m_connections.end());
|
TORRENT_ASSERT(m_connections.find(p) == m_connections.end());
|
||||||
peer_iterator ci = m_connections.insert(p).first;
|
peer_iterator ci = m_connections.insert(p).first;
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
TORRENT_ASSERT(p->remote() == p->get_socket()->remote_endpoint(ec) || ec);
|
TORRENT_ASSERT(p->remote() == p->get_socket()->remote_endpoint(ec) || ec);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ namespace libtorrent
|
||||||
|
|
||||||
int timeout = (std::min)(
|
int timeout = (std::min)(
|
||||||
m_read_timeout, (std::min)(m_completion_timeout, m_read_timeout));
|
m_read_timeout, (std::min)(m_completion_timeout, m_read_timeout));
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timeout.expires_at(m_read_time + seconds(timeout), ec);
|
m_timeout.expires_at(m_read_time + seconds(timeout), ec);
|
||||||
m_timeout.async_wait(bind(
|
m_timeout.async_wait(bind(
|
||||||
&timeout_handler::timeout_callback, self(), _1));
|
&timeout_handler::timeout_callback, self(), _1));
|
||||||
|
@ -99,11 +99,11 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
m_abort = true;
|
m_abort = true;
|
||||||
m_completion_timeout = 0;
|
m_completion_timeout = 0;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timeout.cancel(ec);
|
m_timeout.cancel(ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
void timeout_handler::timeout_callback(asio::error_code const& error)
|
void timeout_handler::timeout_callback(error_code const& error)
|
||||||
{
|
{
|
||||||
if (error) return;
|
if (error) return;
|
||||||
if (m_completion_timeout == 0) return;
|
if (m_completion_timeout == 0) return;
|
||||||
|
@ -125,7 +125,7 @@ namespace libtorrent
|
||||||
|
|
||||||
int timeout = (std::min)(
|
int timeout = (std::min)(
|
||||||
m_read_timeout, (std::min)(m_completion_timeout, m_read_timeout));
|
m_read_timeout, (std::min)(m_completion_timeout, m_read_timeout));
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_timeout.expires_at(m_read_time + seconds(timeout), ec);
|
m_timeout.expires_at(m_read_time + seconds(timeout), ec);
|
||||||
m_timeout.async_wait(
|
m_timeout.async_wait(
|
||||||
bind(&timeout_handler::timeout_callback, self(), _1));
|
bind(&timeout_handler::timeout_callback, self(), _1));
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <boost/array.hpp>
|
#include <boost/array.hpp>
|
||||||
#include <asio/read.hpp>
|
#include <boost/asio/read.hpp>
|
||||||
|
|
||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ udp_socket::udp_socket(asio::io_service& ios, udp_socket::callback_t const& c
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::send(udp::endpoint const& ep, char const* p, int len, asio::error_code& ec)
|
void udp_socket::send(udp::endpoint const& ep, char const* p, int len, error_code& ec)
|
||||||
{
|
{
|
||||||
if (ec == asio::error::operation_aborted) return;
|
if (ec == asio::error::operation_aborted) return;
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ void udp_socket::send(udp::endpoint const& ep, char const* p, int len, asio::err
|
||||||
m_ipv6_sock.send_to(asio::buffer(p, len), ep, 0, ec);
|
m_ipv6_sock.send_to(asio::buffer(p, len), ep, 0, ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::on_read(udp::socket* s, asio::error_code const& e, std::size_t bytes_transferred)
|
void udp_socket::on_read(udp::socket* s, error_code const& e, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
if (e == asio::error::operation_aborted) return;
|
if (e == asio::error::operation_aborted) return;
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ void udp_socket::on_read(udp::socket* s, asio::error_code const& e, std::size_t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::wrap(udp::endpoint const& ep, char const* p, int len, asio::error_code& ec)
|
void udp_socket::wrap(udp::endpoint const& ep, char const* p, int len, error_code& ec)
|
||||||
{
|
{
|
||||||
using namespace libtorrent::detail;
|
using namespace libtorrent::detail;
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ void udp_socket::wrap(udp::endpoint const& ep, char const* p, int len, asio::err
|
||||||
}
|
}
|
||||||
|
|
||||||
// unwrap the UDP packet from the SOCKS5 header
|
// unwrap the UDP packet from the SOCKS5 header
|
||||||
void udp_socket::unwrap(asio::error_code const& e, char const* buf, int size)
|
void udp_socket::unwrap(error_code const& e, char const* buf, int size)
|
||||||
{
|
{
|
||||||
using namespace libtorrent::detail;
|
using namespace libtorrent::detail;
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ void udp_socket::unwrap(asio::error_code const& e, char const* buf, int size)
|
||||||
|
|
||||||
void udp_socket::close()
|
void udp_socket::close()
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_ipv4_sock.close(ec);
|
m_ipv4_sock.close(ec);
|
||||||
m_ipv6_sock.close(ec);
|
m_ipv6_sock.close(ec);
|
||||||
m_socks5_sock.close(ec);
|
m_socks5_sock.close(ec);
|
||||||
|
@ -186,7 +186,7 @@ void udp_socket::close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::bind(udp::endpoint const& ep, asio::error_code& ec)
|
void udp_socket::bind(udp::endpoint const& ep, error_code& ec)
|
||||||
{
|
{
|
||||||
if (m_ipv4_sock.is_open()) m_ipv4_sock.close(ec);
|
if (m_ipv4_sock.is_open()) m_ipv4_sock.close(ec);
|
||||||
if (m_ipv6_sock.is_open()) m_ipv6_sock.close(ec);
|
if (m_ipv6_sock.is_open()) m_ipv6_sock.close(ec);
|
||||||
|
@ -214,7 +214,7 @@ void udp_socket::bind(udp::endpoint const& ep, asio::error_code& ec)
|
||||||
|
|
||||||
void udp_socket::bind(int port)
|
void udp_socket::bind(int port)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
|
|
||||||
if (m_ipv4_sock.is_open()) m_ipv4_sock.close(ec);
|
if (m_ipv4_sock.is_open()) m_ipv4_sock.close(ec);
|
||||||
if (m_ipv6_sock.is_open()) m_ipv6_sock.close(ec);
|
if (m_ipv6_sock.is_open()) m_ipv6_sock.close(ec);
|
||||||
|
@ -239,7 +239,7 @@ void udp_socket::bind(int port)
|
||||||
|
|
||||||
void udp_socket::set_proxy_settings(proxy_settings const& ps)
|
void udp_socket::set_proxy_settings(proxy_settings const& ps)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socks5_sock.close(ec);
|
m_socks5_sock.close(ec);
|
||||||
m_tunnel_packets = false;
|
m_tunnel_packets = false;
|
||||||
|
|
||||||
|
@ -256,7 +256,7 @@ void udp_socket::set_proxy_settings(proxy_settings const& ps)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::on_name_lookup(asio::error_code const& e, tcp::resolver::iterator i)
|
void udp_socket::on_name_lookup(error_code const& e, tcp::resolver::iterator i)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
m_proxy_addr.address(i->endpoint().address());
|
m_proxy_addr.address(i->endpoint().address());
|
||||||
|
@ -267,7 +267,7 @@ void udp_socket::on_name_lookup(asio::error_code const& e, tcp::resolver::iterat
|
||||||
|
|
||||||
void udp_socket::on_timeout()
|
void udp_socket::on_timeout()
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socks5_sock.close(ec);
|
m_socks5_sock.close(ec);
|
||||||
m_connection_ticket = -1;
|
m_connection_ticket = -1;
|
||||||
}
|
}
|
||||||
|
@ -275,13 +275,13 @@ void udp_socket::on_timeout()
|
||||||
void udp_socket::on_connect(int ticket)
|
void udp_socket::on_connect(int ticket)
|
||||||
{
|
{
|
||||||
m_connection_ticket = ticket;
|
m_connection_ticket = ticket;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socks5_sock.open(m_proxy_addr.address().is_v4()?tcp::v4():tcp::v6(), ec);
|
m_socks5_sock.open(m_proxy_addr.address().is_v4()?tcp::v4():tcp::v6(), ec);
|
||||||
m_socks5_sock.async_connect(tcp::endpoint(m_proxy_addr.address(), m_proxy_addr.port())
|
m_socks5_sock.async_connect(tcp::endpoint(m_proxy_addr.address(), m_proxy_addr.port())
|
||||||
, boost::bind(&udp_socket::on_connected, this, _1));
|
, boost::bind(&udp_socket::on_connected, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::on_connected(asio::error_code const& e)
|
void udp_socket::on_connected(error_code const& e)
|
||||||
{
|
{
|
||||||
m_cc.done(m_connection_ticket);
|
m_cc.done(m_connection_ticket);
|
||||||
m_connection_ticket = -1;
|
m_connection_ticket = -1;
|
||||||
|
@ -308,7 +308,7 @@ void udp_socket::on_connected(asio::error_code const& e)
|
||||||
, boost::bind(&udp_socket::handshake1, this, _1));
|
, boost::bind(&udp_socket::handshake1, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::handshake1(asio::error_code const& e)
|
void udp_socket::handshake1(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -316,7 +316,7 @@ void udp_socket::handshake1(asio::error_code const& e)
|
||||||
, boost::bind(&udp_socket::handshake2, this, _1));
|
, boost::bind(&udp_socket::handshake2, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::handshake2(asio::error_code const& e)
|
void udp_socket::handshake2(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -336,7 +336,7 @@ void udp_socket::handshake2(asio::error_code const& e)
|
||||||
{
|
{
|
||||||
if (m_proxy_settings.username.empty())
|
if (m_proxy_settings.username.empty())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socks5_sock.close(ec);
|
m_socks5_sock.close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -353,13 +353,13 @@ void udp_socket::handshake2(asio::error_code const& e)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socks5_sock.close(ec);
|
m_socks5_sock.close(ec);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::handshake3(asio::error_code const& e)
|
void udp_socket::handshake3(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -367,7 +367,7 @@ void udp_socket::handshake3(asio::error_code const& e)
|
||||||
, boost::bind(&udp_socket::handshake4, this, _1));
|
, boost::bind(&udp_socket::handshake4, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::handshake4(asio::error_code const& e)
|
void udp_socket::handshake4(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -400,7 +400,7 @@ void udp_socket::socks_forward_udp()
|
||||||
, boost::bind(&udp_socket::connect1, this, _1));
|
, boost::bind(&udp_socket::connect1, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::connect1(asio::error_code const& e)
|
void udp_socket::connect1(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -408,7 +408,7 @@ void udp_socket::connect1(asio::error_code const& e)
|
||||||
, boost::bind(&udp_socket::connect2, this, _1));
|
, boost::bind(&udp_socket::connect2, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_socket::connect2(asio::error_code const& e)
|
void udp_socket::connect2(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ namespace libtorrent
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_tracker_connection::name_lookup(asio::error_code const& error
|
void udp_tracker_connection::name_lookup(error_code const& error
|
||||||
, udp::resolver::iterator i)
|
, udp::resolver::iterator i)
|
||||||
{
|
{
|
||||||
if (error == asio::error::operation_aborted) return;
|
if (error == asio::error::operation_aborted) return;
|
||||||
|
@ -156,7 +156,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (cb) cb->m_tracker_address = tcp::endpoint(target_address.address(), target_address.port());
|
if (cb) cb->m_tracker_address = tcp::endpoint(target_address.address(), target_address.port());
|
||||||
m_target = target_address;
|
m_target = target_address;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket.bind(udp::endpoint(bind_interface(), 0), ec);
|
m_socket.bind(udp::endpoint(bind_interface(), 0), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -179,13 +179,13 @@ namespace libtorrent
|
||||||
|
|
||||||
void udp_tracker_connection::close()
|
void udp_tracker_connection::close()
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket.close();
|
m_socket.close();
|
||||||
m_name_lookup.cancel();
|
m_name_lookup.cancel();
|
||||||
tracker_connection::close();
|
tracker_connection::close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_tracker_connection::on_receive(asio::error_code const& e
|
void udp_tracker_connection::on_receive(error_code const& e
|
||||||
, udp::endpoint const& ep, char const* buf, int size)
|
, udp::endpoint const& ep, char const* buf, int size)
|
||||||
{
|
{
|
||||||
// ignore resposes before we've sent any requests
|
// ignore resposes before we've sent any requests
|
||||||
|
@ -305,7 +305,7 @@ namespace libtorrent
|
||||||
detail::write_int32(m_transaction_id, ptr); // transaction_id
|
detail::write_int32(m_transaction_id, ptr); // transaction_id
|
||||||
TORRENT_ASSERT(ptr - buf == sizeof(buf));
|
TORRENT_ASSERT(ptr - buf == sizeof(buf));
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket.send(m_target, buf, 16, ec);
|
m_socket.send(m_target, buf, 16, ec);
|
||||||
m_state = action_connect;
|
m_state = action_connect;
|
||||||
++m_attempts;
|
++m_attempts;
|
||||||
|
@ -334,7 +334,7 @@ namespace libtorrent
|
||||||
out += 20;
|
out += 20;
|
||||||
TORRENT_ASSERT(out - buf == sizeof(buf));
|
TORRENT_ASSERT(out - buf == sizeof(buf));
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket.send(m_target, buf, sizeof(buf), ec);
|
m_socket.send(m_target, buf, sizeof(buf), ec);
|
||||||
m_state = action_scrape;
|
m_state = action_scrape;
|
||||||
++m_attempts;
|
++m_attempts;
|
||||||
|
@ -494,7 +494,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_socket.send(m_target, buf, sizeof(buf), ec);
|
m_socket.send(m_target, buf, sizeof(buf), ec);
|
||||||
m_state = action_announce;
|
m_state = action_announce;
|
||||||
++m_attempts;
|
++m_attempts;
|
||||||
|
|
32
src/upnp.cpp
32
src/upnp.cpp
|
@ -42,8 +42,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/ref.hpp>
|
#include <boost/ref.hpp>
|
||||||
#include <asio/ip/host_name.hpp>
|
#include <boost/asio/ip/host_name.hpp>
|
||||||
#include <asio/ip/multicast.hpp>
|
#include <boost/asio/ip/multicast.hpp>
|
||||||
#include <boost/thread/mutex.hpp>
|
#include <boost/thread/mutex.hpp>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ using namespace libtorrent;
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
bool is_local(address const& a);
|
bool is_local(address const& a);
|
||||||
address guess_local_address(asio::io_service&);
|
address guess_local_address(io_service&);
|
||||||
}
|
}
|
||||||
|
|
||||||
upnp::upnp(io_service& ios, connection_queue& cc
|
upnp::upnp(io_service& ios, connection_queue& cc
|
||||||
|
@ -103,7 +103,7 @@ void upnp::discover_device_impl()
|
||||||
"MX:3\r\n"
|
"MX:3\r\n"
|
||||||
"\r\n\r\n";
|
"\r\n\r\n";
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
#ifdef TORRENT_DEBUG_UPNP
|
#ifdef TORRENT_DEBUG_UPNP
|
||||||
// simulate packet loss
|
// simulate packet loss
|
||||||
if (m_retry_count & 1)
|
if (m_retry_count & 1)
|
||||||
|
@ -215,7 +215,7 @@ void upnp::delete_mapping(int mapping)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void upnp::resend_request(asio::error_code const& e)
|
void upnp::resend_request(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ void upnp::on_reply(udp::endpoint const& from, char* buffer
|
||||||
Server:Microsoft-Windows-NT/5.1 UPnP/1.0 UPnP-Device-Host/1.0
|
Server:Microsoft-Windows-NT/5.1 UPnP/1.0 UPnP-Device-Host/1.0
|
||||||
|
|
||||||
*/
|
*/
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
if (m_ignore_outside_network && !in_local_network(m_io_service, from.address(), ec))
|
if (m_ignore_outside_network && !in_local_network(m_io_service, from.address(), ec))
|
||||||
{
|
{
|
||||||
// this upnp device is filtered because it's not in the
|
// this upnp device is filtered because it's not in the
|
||||||
|
@ -453,7 +453,7 @@ void upnp::on_reply(udp::endpoint const& from, char* buffer
|
||||||
// just to make sure we find all devices
|
// just to make sure we find all devices
|
||||||
if (m_retry_count >= 4 && !m_devices.empty())
|
if (m_retry_count >= 4 && !m_devices.empty())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_broadcast_timer.cancel(ec);
|
m_broadcast_timer.cancel(ec);
|
||||||
|
|
||||||
for (std::set<rootdevice>::iterator i = m_devices.begin()
|
for (std::set<rootdevice>::iterator i = m_devices.begin()
|
||||||
|
@ -543,7 +543,7 @@ void upnp::create_port_mapping(http_connection& c, rootdevice& d, int i)
|
||||||
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"
|
"s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"
|
||||||
"<s:Body><u:" << soap_action << " xmlns:u=\"" << d.service_namespace << "\">";
|
"<s:Body><u:" << soap_action << " xmlns:u=\"" << d.service_namespace << "\">";
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
soap << "<NewRemoteHost></NewRemoteHost>"
|
soap << "<NewRemoteHost></NewRemoteHost>"
|
||||||
"<NewExternalPort>" << d.mapping[i].external_port << "</NewExternalPort>"
|
"<NewExternalPort>" << d.mapping[i].external_port << "</NewExternalPort>"
|
||||||
"<NewProtocol>" << (d.mapping[i].protocol == udp ? "UDP" : "TCP") << "</NewProtocol>"
|
"<NewProtocol>" << (d.mapping[i].protocol == udp ? "UDP" : "TCP") << "</NewProtocol>"
|
||||||
|
@ -732,7 +732,7 @@ namespace
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void upnp::on_upnp_xml(asio::error_code const& e
|
void upnp::on_upnp_xml(error_code const& e
|
||||||
, libtorrent::http_parser const& p, rootdevice& d)
|
, libtorrent::http_parser const& p, rootdevice& d)
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
@ -833,7 +833,7 @@ void upnp::disable(char const* msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_devices.clear();
|
m_devices.clear();
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_broadcast_timer.cancel(ec);
|
m_broadcast_timer.cancel(ec);
|
||||||
m_refresh_timer.cancel(ec);
|
m_refresh_timer.cancel(ec);
|
||||||
m_socket.close();
|
m_socket.close();
|
||||||
|
@ -891,7 +891,7 @@ namespace
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void upnp::on_upnp_map_response(asio::error_code const& e
|
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)
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
@ -1014,7 +1014,7 @@ void upnp::on_upnp_map_response(asio::error_code const& e
|
||||||
if (next_expire < time_now()
|
if (next_expire < time_now()
|
||||||
|| next_expire > m.expires)
|
|| next_expire > m.expires)
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_refresh_timer.expires_at(m.expires, ec);
|
m_refresh_timer.expires_at(m.expires, ec);
|
||||||
m_refresh_timer.async_wait(bind(&upnp::on_expire, self(), _1));
|
m_refresh_timer.async_wait(bind(&upnp::on_expire, self(), _1));
|
||||||
}
|
}
|
||||||
|
@ -1046,7 +1046,7 @@ void upnp::return_error(int mapping, int code)
|
||||||
m_callback(mapping, 0, error_string);
|
m_callback(mapping, 0, error_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
void upnp::on_upnp_unmap_response(asio::error_code const& e
|
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)
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
@ -1093,7 +1093,7 @@ void upnp::on_upnp_unmap_response(asio::error_code const& e
|
||||||
next(d, mapping);
|
next(d, mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
void upnp::on_expire(asio::error_code const& e)
|
void upnp::on_expire(error_code const& e)
|
||||||
{
|
{
|
||||||
if (e) return;
|
if (e) return;
|
||||||
|
|
||||||
|
@ -1125,7 +1125,7 @@ void upnp::on_expire(asio::error_code const& e)
|
||||||
}
|
}
|
||||||
if (next_expire != max_time())
|
if (next_expire != max_time())
|
||||||
{
|
{
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_refresh_timer.expires_at(next_expire, ec);
|
m_refresh_timer.expires_at(next_expire, ec);
|
||||||
m_refresh_timer.async_wait(bind(&upnp::on_expire, self(), _1));
|
m_refresh_timer.async_wait(bind(&upnp::on_expire, self(), _1));
|
||||||
}
|
}
|
||||||
|
@ -1135,7 +1135,7 @@ void upnp::close()
|
||||||
{
|
{
|
||||||
mutex_t::scoped_lock l(m_mutex);
|
mutex_t::scoped_lock l(m_mutex);
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
m_refresh_timer.cancel(ec);
|
m_refresh_timer.cancel(ec);
|
||||||
m_broadcast_timer.cancel(ec);
|
m_broadcast_timer.cancel(ec);
|
||||||
m_closing = true;
|
m_closing = true;
|
||||||
|
|
|
@ -315,7 +315,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void web_peer_connection::on_receive(asio::error_code const& error
|
void web_peer_connection::on_receive(error_code const& error
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
@ -662,7 +662,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
|
|
||||||
// throws exception when the client should be disconnected
|
// throws exception when the client should be disconnected
|
||||||
void web_peer_connection::on_sent(asio::error_code const& error
|
void web_peer_connection::on_sent(error_code const& error
|
||||||
, std::size_t bytes_transferred)
|
, std::size_t bytes_transferred)
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
|
|
@ -239,7 +239,7 @@ typedef std::vector<boost::intrusive_ptr<peer_connection> > connections_t;
|
||||||
|
|
||||||
bool abort_tick = false;
|
bool abort_tick = false;
|
||||||
|
|
||||||
void do_tick(asio::error_code const&e, deadline_timer& tick, connections_t& v)
|
void do_tick(error_code const&e, deadline_timer& tick, connections_t& v)
|
||||||
{
|
{
|
||||||
if (e || abort_tick)
|
if (e || abort_tick)
|
||||||
{
|
{
|
||||||
|
@ -261,7 +261,7 @@ void do_stop(deadline_timer& tick, connections_t& v)
|
||||||
std::cerr << " stopping..." << std::endl;
|
std::cerr << " stopping..." << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_change_rate(asio::error_code const&e, deadline_timer& tick
|
void do_change_rate(error_code const&e, deadline_timer& tick
|
||||||
, boost::shared_ptr<torrent> t1
|
, boost::shared_ptr<torrent> t1
|
||||||
, boost::shared_ptr<torrent> t2
|
, boost::shared_ptr<torrent> t2
|
||||||
, int limit
|
, int limit
|
||||||
|
@ -284,7 +284,7 @@ void do_change_rate(asio::error_code const&e, deadline_timer& tick
|
||||||
tick.async_wait(boost::bind(&do_change_rate, _1, boost::ref(tick), t1, t2, limit, counter-1));
|
tick.async_wait(boost::bind(&do_change_rate, _1, boost::ref(tick), t1, t2, limit, counter-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_change_peer_rate(asio::error_code const&e, deadline_timer& tick
|
void do_change_peer_rate(error_code const&e, deadline_timer& tick
|
||||||
, connections_t& v
|
, connections_t& v
|
||||||
, int limit
|
, int limit
|
||||||
, int counter)
|
, int counter)
|
||||||
|
|
|
@ -44,6 +44,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
using libtorrent::buffer;
|
using libtorrent::buffer;
|
||||||
using libtorrent::chained_buffer;
|
using libtorrent::chained_buffer;
|
||||||
|
|
||||||
|
namespace asio = boost::asio;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
template<class T>
|
template<class T>
|
||||||
T const& min_(T const& x, T const& y)
|
T const& min_(T const& x, T const& y)
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
#include "libtorrent/socket.hpp"
|
#include "libtorrent/socket.hpp"
|
||||||
#include "libtorrent/io.hpp"
|
#include "libtorrent/io.hpp"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <asio/read.hpp>
|
|
||||||
#include <asio/write.hpp>
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
|
||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
|
@ -12,7 +10,7 @@ using namespace libtorrent;
|
||||||
int read_message(stream_socket& s, char* buffer)
|
int read_message(stream_socket& s, char* buffer)
|
||||||
{
|
{
|
||||||
using namespace libtorrent::detail;
|
using namespace libtorrent::detail;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
asio::read(s, asio::buffer(buffer, 4), asio::transfer_all(), ec);
|
asio::read(s, asio::buffer(buffer, 4), asio::transfer_all(), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -42,7 +40,7 @@ void send_allow_fast(stream_socket& s, int piece)
|
||||||
char msg[] = "\0\0\0\x05\x11\0\0\0\0";
|
char msg[] = "\0\0\0\x05\x11\0\0\0\0";
|
||||||
char* ptr = msg + 5;
|
char* ptr = msg + 5;
|
||||||
write_int32(piece, ptr);
|
write_int32(piece, ptr);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
asio::write(s, asio::buffer(msg, 9), asio::transfer_all(), ec);
|
asio::write(s, asio::buffer(msg, 9), asio::transfer_all(), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -58,7 +56,7 @@ void send_suggest_piece(stream_socket& s, int piece)
|
||||||
char msg[] = "\0\0\0\x05\x0d\0\0\0\0";
|
char msg[] = "\0\0\0\x05\x0d\0\0\0\0";
|
||||||
char* ptr = msg + 5;
|
char* ptr = msg + 5;
|
||||||
write_int32(piece, ptr);
|
write_int32(piece, ptr);
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
asio::write(s, asio::buffer(msg, 9), asio::transfer_all(), ec);
|
asio::write(s, asio::buffer(msg, 9), asio::transfer_all(), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -71,7 +69,7 @@ void send_unchoke(stream_socket& s)
|
||||||
{
|
{
|
||||||
std::cout << "send unchoke" << std::endl;
|
std::cout << "send unchoke" << std::endl;
|
||||||
char msg[] = "\0\0\0\x01\x01";
|
char msg[] = "\0\0\0\x01\x01";
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
asio::write(s, asio::buffer(msg, 5), asio::transfer_all(), ec);
|
asio::write(s, asio::buffer(msg, 5), asio::transfer_all(), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -87,7 +85,7 @@ void do_handshake(stream_socket& s, sha1_hash const& ih, char* buffer)
|
||||||
"aaaaaaaaaaaaaaaaaaaa" // peer-id
|
"aaaaaaaaaaaaaaaaaaaa" // peer-id
|
||||||
"\0\0\0\x01\x0e"; // have_all
|
"\0\0\0\x01\x0e"; // have_all
|
||||||
std::cout << "send handshake" << std::endl;
|
std::cout << "send handshake" << std::endl;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
std::memcpy(handshake + 28, ih.begin(), 20);
|
std::memcpy(handshake + 28, ih.begin(), 20);
|
||||||
asio::write(s, asio::buffer(handshake, sizeof(handshake) - 1), asio::transfer_all(), ec);
|
asio::write(s, asio::buffer(handshake, sizeof(handshake) - 1), asio::transfer_all(), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
|
@ -173,7 +171,7 @@ void test_reject_fast()
|
||||||
allowed_fast.erase(i);
|
allowed_fast.erase(i);
|
||||||
// send reject request
|
// send reject request
|
||||||
recv_buffer[0] = 0x10;
|
recv_buffer[0] = 0x10;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
asio::write(s, asio::buffer("\0\0\0\x0d", 4), asio::transfer_all(), ec);
|
asio::write(s, asio::buffer("\0\0\0\x0d", 4), asio::transfer_all(), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
@ -241,7 +239,7 @@ void test_respect_suggest()
|
||||||
suggested.erase(i);
|
suggested.erase(i);
|
||||||
// send reject request
|
// send reject request
|
||||||
recv_buffer[0] = 0x10;
|
recv_buffer[0] = 0x10;
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
asio::write(s, asio::buffer("\0\0\0\x0d", 4), asio::transfer_all(), ec);
|
asio::write(s, asio::buffer("\0\0\0\x0d", 4), asio::transfer_all(), ec);
|
||||||
if (ec)
|
if (ec)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,7 +16,7 @@ int connect_handler_called = 0;
|
||||||
int handler_called = 0;
|
int handler_called = 0;
|
||||||
int data_size = 0;
|
int data_size = 0;
|
||||||
int http_status = 0;
|
int http_status = 0;
|
||||||
asio::error_code error_code;
|
error_code g_error_code;
|
||||||
char data_buffer[4000];
|
char data_buffer[4000];
|
||||||
|
|
||||||
void print_http_header(http_parser const& p)
|
void print_http_header(http_parser const& p)
|
||||||
|
@ -38,11 +38,11 @@ void http_connect_handler(http_connection& c)
|
||||||
TEST_CHECK(c.socket().remote_endpoint().address() == address::from_string("127.0.0.1"));
|
TEST_CHECK(c.socket().remote_endpoint().address() == address::from_string("127.0.0.1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_handler(asio::error_code const& ec, http_parser const& parser, char const* data, int size)
|
void http_handler(error_code const& ec, http_parser const& parser, char const* data, int size)
|
||||||
{
|
{
|
||||||
++handler_called;
|
++handler_called;
|
||||||
data_size = size;
|
data_size = size;
|
||||||
error_code = ec;
|
g_error_code = ec;
|
||||||
|
|
||||||
if (parser.header_finished())
|
if (parser.header_finished())
|
||||||
{
|
{
|
||||||
|
@ -63,11 +63,11 @@ void reset_globals()
|
||||||
handler_called = 0;
|
handler_called = 0;
|
||||||
data_size = 0;
|
data_size = 0;
|
||||||
http_status = 0;
|
http_status = 0;
|
||||||
error_code = asio::error_code();
|
g_error_code = error_code();
|
||||||
}
|
}
|
||||||
|
|
||||||
void run_test(std::string const& url, int size, int status, int connected
|
void run_test(std::string const& url, int size, int status, int connected
|
||||||
, boost::optional<asio::error_code> ec, proxy_settings const& ps)
|
, boost::optional<error_code> ec, proxy_settings const& ps)
|
||||||
{
|
{
|
||||||
reset_globals();
|
reset_globals();
|
||||||
|
|
||||||
|
@ -83,11 +83,11 @@ void run_test(std::string const& url, int size, int status, int connected
|
||||||
std::cerr << "handler_called: " << handler_called << std::endl;
|
std::cerr << "handler_called: " << handler_called << std::endl;
|
||||||
std::cerr << "status: " << http_status << std::endl;
|
std::cerr << "status: " << http_status << std::endl;
|
||||||
std::cerr << "size: " << data_size << std::endl;
|
std::cerr << "size: " << data_size << std::endl;
|
||||||
std::cerr << "error_code: " << error_code.message() << std::endl;
|
std::cerr << "error_code: " << g_error_code.message() << std::endl;
|
||||||
TEST_CHECK(connect_handler_called == connected);
|
TEST_CHECK(connect_handler_called == connected);
|
||||||
TEST_CHECK(handler_called == 1);
|
TEST_CHECK(handler_called == 1);
|
||||||
TEST_CHECK(data_size == size || size == -1);
|
TEST_CHECK(data_size == size || size == -1);
|
||||||
TEST_CHECK(!ec || error_code == *ec);
|
TEST_CHECK(!ec || g_error_code == *ec);
|
||||||
TEST_CHECK(http_status == status || status == -1);
|
TEST_CHECK(http_status == status || status == -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,11 +102,11 @@ void run_suite(std::string const& protocol, proxy_settings const& ps)
|
||||||
std::cout << "\n\n********************** using " << test_name[ps.type]
|
std::cout << "\n\n********************** using " << test_name[ps.type]
|
||||||
<< " proxy **********************\n" << std::endl;
|
<< " proxy **********************\n" << std::endl;
|
||||||
|
|
||||||
typedef boost::optional<asio::error_code> err;
|
typedef boost::optional<error_code> err;
|
||||||
run_test(protocol + "://127.0.0.1:8001/redirect", 3216, 200, 2, asio::error_code(), ps);
|
run_test(protocol + "://127.0.0.1:8001/redirect", 3216, 200, 2, error_code(), ps);
|
||||||
run_test(protocol + "://127.0.0.1:8001/infinite_redirect", 0, 301, 6, asio::error_code(), ps);
|
run_test(protocol + "://127.0.0.1:8001/infinite_redirect", 0, 301, 6, error_code(), ps);
|
||||||
run_test(protocol + "://127.0.0.1:8001/test_file", 3216, 200, 1, asio::error_code(), ps);
|
run_test(protocol + "://127.0.0.1:8001/test_file", 3216, 200, 1, error_code(), ps);
|
||||||
run_test(protocol + "://127.0.0.1:8001/test_file.gz", 3216, 200, 1, asio::error_code(), ps);
|
run_test(protocol + "://127.0.0.1:8001/test_file.gz", 3216, 200, 1, error_code(), ps);
|
||||||
run_test(protocol + "://127.0.0.1:8001/non-existing-file", -1, 404, 1, err(), ps);
|
run_test(protocol + "://127.0.0.1:8001/non-existing-file", -1, 404, 1, err(), ps);
|
||||||
// if we're going through an http proxy, we won't get the same error as if the hostname
|
// if we're going through an http proxy, we won't get the same error as if the hostname
|
||||||
// resolution failed
|
// resolution failed
|
||||||
|
|
|
@ -280,7 +280,7 @@ int test_main()
|
||||||
|
|
||||||
// test network functions
|
// test network functions
|
||||||
|
|
||||||
asio::error_code ec;
|
error_code ec;
|
||||||
TEST_CHECK(is_local(address::from_string("192.168.0.1", ec)));
|
TEST_CHECK(is_local(address::from_string("192.168.0.1", ec)));
|
||||||
TEST_CHECK(is_local(address::from_string("10.1.1.56", ec)));
|
TEST_CHECK(is_local(address::from_string("10.1.1.56", ec)));
|
||||||
TEST_CHECK(!is_local(address::from_string("14.14.251.63", ec)));
|
TEST_CHECK(!is_local(address::from_string("14.14.251.63", ec)));
|
||||||
|
|
|
@ -14,7 +14,7 @@ void callback(int mapping, int port, std::string const& err)
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
io_service ios;
|
libtorrent::io_service ios;
|
||||||
std::string user_agent = "test agent";
|
std::string user_agent = "test agent";
|
||||||
|
|
||||||
if (argc != 3)
|
if (argc != 3)
|
||||||
|
@ -27,9 +27,9 @@ int main(int argc, char* argv[])
|
||||||
boost::intrusive_ptr<upnp> upnp_handler = new upnp(ios, cc, address_v4(), user_agent, &callback, true);
|
boost::intrusive_ptr<upnp> upnp_handler = new upnp(ios, cc, address_v4(), user_agent, &callback, true);
|
||||||
upnp_handler->discover_device();
|
upnp_handler->discover_device();
|
||||||
|
|
||||||
deadline_timer timer(ios);
|
libtorrent::deadline_timer timer(ios);
|
||||||
timer.expires_from_now(seconds(2));
|
timer.expires_from_now(seconds(2));
|
||||||
timer.async_wait(boost::bind(&io_service::stop, boost::ref(ios)));
|
timer.async_wait(boost::bind(&libtorrent::io_service::stop, boost::ref(ios)));
|
||||||
|
|
||||||
std::cerr << "broadcasting for UPnP device" << std::endl;
|
std::cerr << "broadcasting for UPnP device" << std::endl;
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ int main(int argc, char* argv[])
|
||||||
upnp_handler->add_mapping(upnp::tcp, atoi(argv[1]), atoi(argv[1]));
|
upnp_handler->add_mapping(upnp::tcp, atoi(argv[1]), atoi(argv[1]));
|
||||||
upnp_handler->add_mapping(upnp::udp, atoi(argv[2]), atoi(argv[2]));
|
upnp_handler->add_mapping(upnp::udp, atoi(argv[2]), atoi(argv[2]));
|
||||||
timer.expires_from_now(seconds(10));
|
timer.expires_from_now(seconds(10));
|
||||||
timer.async_wait(boost::bind(&io_service::stop, boost::ref(ios)));
|
timer.async_wait(boost::bind(&libtorrent::io_service::stop, boost::ref(ios)));
|
||||||
std::cerr << "mapping ports TCP: " << argv[1]
|
std::cerr << "mapping ports TCP: " << argv[1]
|
||||||
<< " UDP: " << argv[2] << std::endl;
|
<< " UDP: " << argv[2] << std::endl;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue