|
|
@ -199,12 +199,25 @@ namespace transport |
|
|
|
|
|
|
|
|
|
|
|
boost::system::error_code ec; |
|
|
|
boost::system::error_code ec; |
|
|
|
size_t moreBytes = m_Socket.available(ec); |
|
|
|
size_t moreBytes = m_Socket.available(ec); |
|
|
|
|
|
|
|
if (!ec) |
|
|
|
|
|
|
|
{ |
|
|
|
while (moreBytes && packets.size () < 25) |
|
|
|
while (moreBytes && packets.size () < 25) |
|
|
|
{ |
|
|
|
{ |
|
|
|
packet = new SSUPacket (); |
|
|
|
packet = new SSUPacket (); |
|
|
|
packet->len = m_Socket.receive_from (boost::asio::buffer (packet->buf, SSU_MTU_V4), packet->from); |
|
|
|
packet->len = m_Socket.receive_from (boost::asio::buffer (packet->buf, SSU_MTU_V4), packet->from, 0, ec); |
|
|
|
|
|
|
|
if (!ec) |
|
|
|
|
|
|
|
{ |
|
|
|
packets.push_back (packet); |
|
|
|
packets.push_back (packet); |
|
|
|
moreBytes = m_Socket.available(); |
|
|
|
moreBytes = m_Socket.available(ec); |
|
|
|
|
|
|
|
if (ec) break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LogPrint (eLogError, "SSU: receive_from error: ", ec.message ()); |
|
|
|
|
|
|
|
delete packet; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
m_Service.post (std::bind (&SSUServer::HandleReceivedPackets, this, packets, &m_Sessions)); |
|
|
|
m_Service.post (std::bind (&SSUServer::HandleReceivedPackets, this, packets, &m_Sessions)); |
|
|
@ -231,13 +244,27 @@ namespace transport |
|
|
|
std::vector<SSUPacket *> packets; |
|
|
|
std::vector<SSUPacket *> packets; |
|
|
|
packets.push_back (packet); |
|
|
|
packets.push_back (packet); |
|
|
|
|
|
|
|
|
|
|
|
size_t moreBytes = m_SocketV6.available (); |
|
|
|
boost::system::error_code ec; |
|
|
|
|
|
|
|
size_t moreBytes = m_SocketV6.available (ec); |
|
|
|
|
|
|
|
if (!ec) |
|
|
|
|
|
|
|
{ |
|
|
|
while (moreBytes && packets.size () < 25) |
|
|
|
while (moreBytes && packets.size () < 25) |
|
|
|
{ |
|
|
|
{ |
|
|
|
packet = new SSUPacket (); |
|
|
|
packet = new SSUPacket (); |
|
|
|
packet->len = m_SocketV6.receive_from (boost::asio::buffer (packet->buf, SSU_MTU_V6), packet->from); |
|
|
|
packet->len = m_SocketV6.receive_from (boost::asio::buffer (packet->buf, SSU_MTU_V6), packet->from, 0, ec); |
|
|
|
|
|
|
|
if (!ec) |
|
|
|
|
|
|
|
{ |
|
|
|
packets.push_back (packet); |
|
|
|
packets.push_back (packet); |
|
|
|
moreBytes = m_SocketV6.available(); |
|
|
|
moreBytes = m_SocketV6.available(ec); |
|
|
|
|
|
|
|
if (ec) break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LogPrint (eLogError, "SSU: v6 receive_from error: ", ec.message ()); |
|
|
|
|
|
|
|
delete packet; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
m_ServiceV6.post (std::bind (&SSUServer::HandleReceivedPackets, this, packets, &m_SessionsV6)); |
|
|
|
m_ServiceV6.post (std::bind (&SSUServer::HandleReceivedPackets, this, packets, &m_SessionsV6)); |
|
|
|