mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 12:24:19 +00:00
bind SSU2 socket to specified interface
This commit is contained in:
parent
b15bfd99b3
commit
2cc106b43e
@ -20,6 +20,7 @@ namespace transport
|
|||||||
SSU2Server::SSU2Server ():
|
SSU2Server::SSU2Server ():
|
||||||
RunnableServiceWithWork ("SSU2"), m_ReceiveService ("SSU2r"),
|
RunnableServiceWithWork ("SSU2"), m_ReceiveService ("SSU2r"),
|
||||||
m_SocketV4 (m_ReceiveService.GetService ()), m_SocketV6 (m_ReceiveService.GetService ()),
|
m_SocketV4 (m_ReceiveService.GetService ()), m_SocketV6 (m_ReceiveService.GetService ()),
|
||||||
|
m_AddressV4 (boost::asio::ip::address_v4()), m_AddressV6 (boost::asio::ip::address_v6()),
|
||||||
m_TerminationTimer (GetService ()), m_ResendTimer (GetService ())
|
m_TerminationTimer (GetService ()), m_ResendTimer (GetService ())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -52,7 +53,7 @@ namespace transport
|
|||||||
if (address->IsV4 ())
|
if (address->IsV4 ())
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
OpenSocket (boost::asio::ip::udp::endpoint (boost::asio::ip::udp::v4(), port));
|
OpenSocket (boost::asio::ip::udp::endpoint (m_AddressV4, port));
|
||||||
m_ReceiveService.GetService ().post(
|
m_ReceiveService.GetService ().post(
|
||||||
[this]()
|
[this]()
|
||||||
{
|
{
|
||||||
@ -62,7 +63,7 @@ namespace transport
|
|||||||
if (address->IsV6 ())
|
if (address->IsV6 ())
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
OpenSocket (boost::asio::ip::udp::endpoint (boost::asio::ip::udp::v6(), port));
|
OpenSocket (boost::asio::ip::udp::endpoint (m_AddressV6, port));
|
||||||
m_ReceiveService.GetService ().post(
|
m_ReceiveService.GetService ().post(
|
||||||
[this]()
|
[this]()
|
||||||
{
|
{
|
||||||
@ -99,6 +100,15 @@ namespace transport
|
|||||||
StopIOService ();
|
StopIOService ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SSU2Server::SetLocalAddress (const boost::asio::ip::address& localAddress)
|
||||||
|
{
|
||||||
|
if (localAddress.is_unspecified ()) return;
|
||||||
|
if (localAddress.is_v4 ())
|
||||||
|
m_AddressV4 = localAddress;
|
||||||
|
else if (localAddress.is_v6 ())
|
||||||
|
m_AddressV6 = localAddress;
|
||||||
|
}
|
||||||
|
|
||||||
boost::asio::ip::udp::socket& SSU2Server::OpenSocket (const boost::asio::ip::udp::endpoint& localEndpoint)
|
boost::asio::ip::udp::socket& SSU2Server::OpenSocket (const boost::asio::ip::udp::endpoint& localEndpoint)
|
||||||
{
|
{
|
||||||
boost::asio::ip::udp::socket& socket = localEndpoint.address ().is_v6 () ? m_SocketV6 : m_SocketV4;
|
boost::asio::ip::udp::socket& socket = localEndpoint.address ().is_v6 () ? m_SocketV6 : m_SocketV4;
|
||||||
|
@ -48,7 +48,8 @@ namespace transport
|
|||||||
void Start ();
|
void Start ();
|
||||||
void Stop ();
|
void Stop ();
|
||||||
boost::asio::io_service& GetService () { return GetIOService (); };
|
boost::asio::io_service& GetService () { return GetIOService (); };
|
||||||
|
void SetLocalAddress (const boost::asio::ip::address& localAddress);
|
||||||
|
|
||||||
void AddSession (std::shared_ptr<SSU2Session> session);
|
void AddSession (std::shared_ptr<SSU2Session> session);
|
||||||
void RemoveSession (uint64_t connID);
|
void RemoveSession (uint64_t connID);
|
||||||
void AddSessionByRouterHash (std::shared_ptr<SSU2Session> session);
|
void AddSessionByRouterHash (std::shared_ptr<SSU2Session> session);
|
||||||
@ -97,6 +98,7 @@ namespace transport
|
|||||||
|
|
||||||
ReceiveService m_ReceiveService;
|
ReceiveService m_ReceiveService;
|
||||||
boost::asio::ip::udp::socket m_SocketV4, m_SocketV6;
|
boost::asio::ip::udp::socket m_SocketV4, m_SocketV6;
|
||||||
|
boost::asio::ip::address m_AddressV4, m_AddressV6;
|
||||||
std::unordered_map<uint64_t, std::shared_ptr<SSU2Session> > m_Sessions;
|
std::unordered_map<uint64_t, std::shared_ptr<SSU2Session> > m_Sessions;
|
||||||
std::map<i2p::data::IdentHash, std::shared_ptr<SSU2Session> > m_SessionsByRouterHash;
|
std::map<i2p::data::IdentHash, std::shared_ptr<SSU2Session> > m_SessionsByRouterHash;
|
||||||
std::map<boost::asio::ip::udp::endpoint, std::shared_ptr<SSU2Session> > m_PendingOutgoingSessions;
|
std::map<boost::asio::ip::udp::endpoint, std::shared_ptr<SSU2Session> > m_PendingOutgoingSessions;
|
||||||
|
@ -233,6 +233,7 @@ namespace transport
|
|||||||
{
|
{
|
||||||
if (m_NTCP2Server) m_NTCP2Server->SetLocalAddress (addr);
|
if (m_NTCP2Server) m_NTCP2Server->SetLocalAddress (addr);
|
||||||
if (m_SSUServer) m_SSUServer->SetLocalAddress (addr);
|
if (m_SSUServer) m_SSUServer->SetLocalAddress (addr);
|
||||||
|
if (m_SSU2Server) m_SSU2Server->SetLocalAddress (addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -249,6 +250,7 @@ namespace transport
|
|||||||
{
|
{
|
||||||
if (m_NTCP2Server) m_NTCP2Server->SetLocalAddress (addr);
|
if (m_NTCP2Server) m_NTCP2Server->SetLocalAddress (addr);
|
||||||
if (m_SSUServer) m_SSUServer->SetLocalAddress (addr);
|
if (m_SSUServer) m_SSUServer->SetLocalAddress (addr);
|
||||||
|
if (m_SSU2Server) m_SSU2Server->SetLocalAddress (addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user