forked from premiere/premiere-libtorrent
some refactor in ip change notifier source code (#1301)
some refactor in ip change notifier source code. using NETLINK_ROUTE (value 0) as the default nl_family
This commit is contained in:
parent
9e5a2a7de4
commit
1a159666ff
|
@ -7,14 +7,14 @@ Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
are met:
|
are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
* Redistributions of source code must retain the above copyright
|
||||||
notice, this list of conditions and the following disclaimer.
|
notice, this list of conditions and the following disclaimer.
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
notice, this list of conditions and the following disclaimer in
|
notice, this list of conditions and the following disclaimer in
|
||||||
the documentation and/or other materials provided with the distribution.
|
the documentation and/or other materials provided with the distribution.
|
||||||
* Neither the name of the author nor the names of its
|
* Neither the name of the author nor the names of its
|
||||||
contributors may be used to endorse or promote products derived
|
contributors may be used to endorse or promote products derived
|
||||||
from this software without specific prior written permission.
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
@ -41,18 +41,23 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/io_service.hpp"
|
#include "libtorrent/io_service.hpp"
|
||||||
|
|
||||||
#if defined TORRENT_BUILD_SIMULATOR
|
#if defined TORRENT_BUILD_SIMULATOR
|
||||||
|
// TODO: simulator support
|
||||||
#elif TORRENT_USE_NETLINK
|
#elif TORRENT_USE_NETLINK
|
||||||
#include "libtorrent/netlink.hpp"
|
#include "libtorrent/netlink.hpp"
|
||||||
#elif defined TORRENT_WINDOWS
|
#elif defined TORRENT_WINDOWS
|
||||||
|
#include "libtorrent/aux_/disable_warnings_push.hpp"
|
||||||
#include <boost/asio/windows/object_handle.hpp>
|
#include <boost/asio/windows/object_handle.hpp>
|
||||||
|
#include "libtorrent/aux_/disable_warnings_pop.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
struct ip_change_notifier : boost::noncopyable
|
struct ip_change_notifier
|
||||||
{
|
{
|
||||||
explicit ip_change_notifier(io_service& ios);
|
explicit ip_change_notifier(io_service& ios);
|
||||||
~ip_change_notifier();
|
~ip_change_notifier();
|
||||||
|
ip_change_notifier(ip_change_notifier const&) = delete;
|
||||||
|
ip_change_notifier& operator=(ip_change_notifier const&) = delete;
|
||||||
|
|
||||||
// cb will be invoked when a change is detected in the
|
// cb will be invoked when a change is detected in the
|
||||||
// system's IP addresses
|
// system's IP addresses
|
||||||
|
@ -65,7 +70,7 @@ namespace libtorrent
|
||||||
, std::function<void(error_code const&)> cb);
|
, std::function<void(error_code const&)> cb);
|
||||||
|
|
||||||
#if defined TORRENT_BUILD_SIMULATOR
|
#if defined TORRENT_BUILD_SIMULATOR
|
||||||
// TODO simulator support
|
// TODO: simulator support
|
||||||
#elif TORRENT_USE_NETLINK
|
#elif TORRENT_USE_NETLINK
|
||||||
netlink::socket m_socket;
|
netlink::socket m_socket;
|
||||||
std::array<char, 4096> m_buf;
|
std::array<char, 4096> m_buf;
|
||||||
|
|
|
@ -7,14 +7,14 @@ Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
are met:
|
are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
* Redistributions of source code must retain the above copyright
|
||||||
notice, this list of conditions and the following disclaimer.
|
notice, this list of conditions and the following disclaimer.
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
notice, this list of conditions and the following disclaimer in
|
notice, this list of conditions and the following disclaimer in
|
||||||
the documentation and/or other materials provided with the distribution.
|
the documentation and/or other materials provided with the distribution.
|
||||||
* Neither the name of the author nor the names of its
|
* Neither the name of the author nor the names of its
|
||||||
contributors may be used to endorse or promote products derived
|
contributors may be used to endorse or promote products derived
|
||||||
from this software without specific prior written permission.
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
@ -39,9 +39,12 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "libtorrent/aux_/disable_warnings_push.hpp"
|
||||||
#include <linux/netlink.h>
|
#include <linux/netlink.h>
|
||||||
#include <linux/rtnetlink.h>
|
#include <linux/rtnetlink.h>
|
||||||
#include <boost/asio/basic_raw_socket.hpp>
|
#include <boost/asio/basic_raw_socket.hpp>
|
||||||
|
#include "libtorrent/aux_/disable_warnings_pop.hpp"
|
||||||
|
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
|
@ -52,13 +55,7 @@ namespace libtorrent
|
||||||
using protocol_type = Protocol;
|
using protocol_type = Protocol;
|
||||||
using data_type = boost::asio::detail::socket_addr_type;
|
using data_type = boost::asio::detail::socket_addr_type;
|
||||||
|
|
||||||
basic_nl_endpoint()
|
basic_nl_endpoint() : basic_nl_endpoint(protocol_type(), 0, 0) {}
|
||||||
{
|
|
||||||
std::memset(&sockaddr, 0, sizeof(sockaddr_nl));
|
|
||||||
sockaddr.nl_family = AF_NETLINK;
|
|
||||||
sockaddr.nl_groups = 0;
|
|
||||||
sockaddr.nl_pid = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
basic_nl_endpoint(protocol_type netlink_family, std::uint32_t group, ::pid_t pid = 0)
|
basic_nl_endpoint(protocol_type netlink_family, std::uint32_t group, ::pid_t pid = 0)
|
||||||
: proto(netlink_family)
|
: proto(netlink_family)
|
||||||
|
@ -98,7 +95,7 @@ namespace libtorrent
|
||||||
|
|
||||||
const data_type* data() const
|
const data_type* data() const
|
||||||
{
|
{
|
||||||
return (struct sockaddr*)&sockaddr;
|
return reinterpret_cast<data_type const*>(&sockaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t size() const
|
std::size_t size() const
|
||||||
|
@ -158,9 +155,7 @@ namespace libtorrent
|
||||||
using endpoint = basic_nl_endpoint<netlink>;
|
using endpoint = basic_nl_endpoint<netlink>;
|
||||||
using socket = boost::asio::basic_raw_socket<netlink>;
|
using socket = boost::asio::basic_raw_socket<netlink>;
|
||||||
|
|
||||||
netlink() : nl_family(0)
|
netlink() : netlink(NETLINK_ROUTE) {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
explicit netlink(int nl_family)
|
explicit netlink(int nl_family)
|
||||||
: nl_family(nl_family)
|
: nl_family(nl_family)
|
||||||
|
@ -198,6 +193,6 @@ namespace libtorrent
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // TORRENT_USE_NETLINK
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -7,14 +7,14 @@ Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
are met:
|
are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
* Redistributions of source code must retain the above copyright
|
||||||
notice, this list of conditions and the following disclaimer.
|
notice, this list of conditions and the following disclaimer.
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
notice, this list of conditions and the following disclaimer in
|
notice, this list of conditions and the following disclaimer in
|
||||||
the documentation and/or other materials provided with the distribution.
|
the documentation and/or other materials provided with the distribution.
|
||||||
* Neither the name of the author nor the names of its
|
* Neither the name of the author nor the names of its
|
||||||
contributors may be used to endorse or promote products derived
|
contributors may be used to endorse or promote products derived
|
||||||
from this software without specific prior written permission.
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
@ -33,7 +33,9 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/ip_notifier.hpp"
|
#include "libtorrent/ip_notifier.hpp"
|
||||||
|
|
||||||
#if defined TORRENT_WINDOWS && !defined TORRENT_BUILD_SIMULATOR
|
#if defined TORRENT_WINDOWS && !defined TORRENT_BUILD_SIMULATOR
|
||||||
|
#include "libtorrent/aux_/disable_warnings_push.hpp"
|
||||||
#include <iphlpapi.h>
|
#include <iphlpapi.h>
|
||||||
|
#include "libtorrent/aux_/disable_warnings_pop.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
|
@ -53,7 +55,11 @@ namespace libtorrent
|
||||||
TORRENT_UNUSED(ios);
|
TORRENT_UNUSED(ios);
|
||||||
#elif defined TORRENT_WINDOWS
|
#elif defined TORRENT_WINDOWS
|
||||||
if (!m_hnd.is_open())
|
if (!m_hnd.is_open())
|
||||||
|
#ifndef BOOST_NO_EXCEPTIONS
|
||||||
throw system_error(WSAGetLastError(), system_category());
|
throw system_error(WSAGetLastError(), system_category());
|
||||||
|
#else
|
||||||
|
std::terminate();
|
||||||
|
#endif // BOOST_NO_EXCEPTIONS
|
||||||
m_ovl.hEvent = m_hnd.native_handle();
|
m_ovl.hEvent = m_hnd.native_handle();
|
||||||
#elif !TORRENT_USE_NETLINK
|
#elif !TORRENT_USE_NETLINK
|
||||||
TORRENT_UNUSED(ios);
|
TORRENT_UNUSED(ios);
|
||||||
|
@ -80,11 +86,11 @@ namespace libtorrent
|
||||||
DWORD err = NotifyAddrChange(&hnd, &m_ovl);
|
DWORD err = NotifyAddrChange(&hnd, &m_ovl);
|
||||||
if (err == ERROR_IO_PENDING)
|
if (err == ERROR_IO_PENDING)
|
||||||
{
|
{
|
||||||
m_hnd.async_wait([this,cb](error_code const& ec) { on_notify(ec, 0, cb); });
|
m_hnd.async_wait([this, cb](error_code const& ec) { on_notify(ec, 0, cb); });
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_hnd.get_io_service().post([this,cb,err]()
|
m_hnd.get_io_service().post([this, cb, err]()
|
||||||
{ cb(error_code(err, system_category())); });
|
{ cb(error_code(err, system_category())); });
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue