mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 08:14:15 +00:00
correct MTU calculation through proxy
This commit is contained in:
parent
016222463d
commit
5fb1247b87
@ -45,7 +45,10 @@ namespace transport
|
|||||||
if (m_IsThroughProxy)
|
if (m_IsThroughProxy)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
i2p::context.SetMTU (SSU2_MIN_PACKET_SIZE, address->IsV4 ());
|
if (address->IsV6 ())
|
||||||
|
i2p::context.SetMTU (SSU2_MAX_PACKET_SIZE - SOCKS5_UDP_IPV6_REQUEST_HEADER_SIZE, false);
|
||||||
|
else
|
||||||
|
i2p::context.SetMTU (SSU2_MAX_PACKET_SIZE - SOCKS5_UDP_IPV4_REQUEST_HEADER_SIZE, true);
|
||||||
continue; // we don't need port for proxy
|
continue; // we don't need port for proxy
|
||||||
}
|
}
|
||||||
auto port = address->port;
|
auto port = address->port;
|
||||||
@ -162,6 +165,8 @@ namespace transport
|
|||||||
|
|
||||||
bool SSU2Server::IsSupported (const boost::asio::ip::address& addr) const
|
bool SSU2Server::IsSupported (const boost::asio::ip::address& addr) const
|
||||||
{
|
{
|
||||||
|
if (m_IsThroughProxy)
|
||||||
|
return m_SocketV4.is_open ();
|
||||||
if (addr.is_v4 ())
|
if (addr.is_v4 ())
|
||||||
{
|
{
|
||||||
if (m_SocketV4.is_open ())
|
if (m_SocketV4.is_open ())
|
||||||
@ -178,7 +183,7 @@ namespace transport
|
|||||||
uint16_t SSU2Server::GetPort (bool v4) const
|
uint16_t SSU2Server::GetPort (bool v4) const
|
||||||
{
|
{
|
||||||
boost::system::error_code ec;
|
boost::system::error_code ec;
|
||||||
boost::asio::ip::udp::endpoint ep = v4 ? m_SocketV4.local_endpoint (ec) : m_SocketV6.local_endpoint (ec);
|
boost::asio::ip::udp::endpoint ep = (v4 || m_IsThroughProxy) ? m_SocketV4.local_endpoint (ec) : m_SocketV6.local_endpoint (ec);
|
||||||
if (ec) return 0;
|
if (ec) return 0;
|
||||||
return ep.port ();
|
return ep.port ();
|
||||||
}
|
}
|
||||||
@ -1103,6 +1108,11 @@ namespace transport
|
|||||||
|
|
||||||
void SSU2Server::ProcessNextPacketFromProxy (uint8_t * buf, size_t len)
|
void SSU2Server::ProcessNextPacketFromProxy (uint8_t * buf, size_t len)
|
||||||
{
|
{
|
||||||
|
if (buf[2]) // FRAG
|
||||||
|
{
|
||||||
|
LogPrint (eLogWarning, "SSU2: Proxy packet fragmentation is not supported");
|
||||||
|
return;
|
||||||
|
}
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
boost::asio::ip::udp::endpoint ep;
|
boost::asio::ip::udp::endpoint ep;
|
||||||
switch (buf[3]) // ATYP
|
switch (buf[3]) // ATYP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user