diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Datagram.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Datagram.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Datagram.cpp 2025-10-02 02:06:57.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Datagram.cpp 2025-10-02 01:16:30.000000000 +0000 @@ -227,8 +227,8 @@ } } - const uint8_t * flags = buf + identityLen; + uint16_t flags = bufbe16toh (buf + identityLen); size_t offset = identityLen + 2; bool isOptions = false; - if (flags[1] & DATAGRAM2_FLAG_OPTIONS) + if (flags & DATAGRAM2_FLAG_OPTIONS) { isOptions = true; @@ -251,5 +251,5 @@ { std::shared_ptr transientVerifier; - if (flags[1] & DATAGRAM2_FLAG_OFFLINE_SIGNATURE) + if (flags & DATAGRAM2_FLAG_OFFLINE_SIGNATURE) { transientVerifier = i2p::data::ProcessOfflineSignature (&identity, buf, len, offset); @@ -309,8 +309,8 @@ if (r) { - const uint8_t * flags = buf + 32; + uint16_t flags = bufbe16toh (buf + 32); size_t offset = 34; bool isOptions = false; - if (flags[1] & DATAGRAM3_FLAG_OPTIONS) + if (flags & DATAGRAM3_FLAG_OPTIONS) { isOptions = true; diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Datagram.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Datagram.h --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Datagram.h 2025-10-02 02:06:57.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Datagram.h 2025-10-02 01:16:30.000000000 +0000 @@ -54,7 +54,7 @@ }; - constexpr uint8_t DATAGRAM2_FLAG_OPTIONS = 0x10; - constexpr uint8_t DATAGRAM2_FLAG_OFFLINE_SIGNATURE = 0x20; - constexpr uint8_t DATAGRAM3_FLAG_OPTIONS = 0x10; + constexpr uint16_t DATAGRAM2_FLAG_OPTIONS = 0x10; + constexpr uint16_t DATAGRAM2_FLAG_OFFLINE_SIGNATURE = 0x20; + constexpr uint16_t DATAGRAM3_FLAG_OPTIONS = 0x10; class DatagramSession : public std::enable_shared_from_this diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/util.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/util.h --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/util.h 2025-10-02 02:06:57.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/util.h 2025-10-02 01:16:30.000000000 +0000 @@ -248,10 +248,10 @@ template - bool Get(std::string_view param, T& value) const + bool Get(std::string_view param, T& value) { auto s = (*this)[param]; if (s.empty ()) return false; auto res = std::from_chars(s.data(), s.data() + s.size(), value); - return res.ec == std::errc(); + return res.ec != std::errc(); } template diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/UDPTunnel.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/UDPTunnel.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/UDPTunnel.cpp 2025-10-02 02:06:57.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/UDPTunnel.cpp 2025-10-02 01:16:30.000000000 +0000 @@ -7,5 +7,4 @@ */ -#include #include "Log.h" #include "util.h" @@ -18,7 +17,4 @@ namespace client { - constexpr std::string_view UDP_SESSION_SEQN { "seqn" }; - constexpr std::string_view UDP_SESSION_ACKED { "acked" }; - void I2PUDPServerTunnel::HandleRecvFromI2P(const i2p::data::IdentityEx& from, uint16_t fromPort, uint16_t toPort, const uint8_t * buf, size_t len, const i2p::util::Mapping * options) @@ -32,13 +28,4 @@ else LogPrint (eLogInfo, "UDP Server: Send exception: ", ec.message (), " to ", m_RemoteEndpoint); - if (options) - { - uint32_t seqn = 0; - if (options->Get (UDP_SESSION_SEQN, seqn) && seqn > m_LastSession->m_LastReceivedPacketNum) - { - m_LastSession->m_LastReceivedPacketNum = seqn; - LogPrint (eLogDebug, "UDP Server: Received packet with seqn ", seqn); - } - } } @@ -137,7 +124,9 @@ uint16_t ourPort, uint16_t theirPort) : m_Destination(localDestination->GetDatagramDestination()), - IPSocket(localDestination->GetService(), localEndpoint), Identity (to), - SendEndpoint(endpoint), LastActivity(i2p::util::GetMillisecondsSinceEpoch()), - LocalPort(ourPort), RemotePort(theirPort), m_NextSendPacketNum (1), m_LastReceivedPacketNum (0) + IPSocket(localDestination->GetService(), localEndpoint), + Identity (to), SendEndpoint(endpoint), + LastActivity(i2p::util::GetMillisecondsSinceEpoch()), + LocalPort(ourPort), + RemotePort(theirPort) { IPSocket.set_option (boost::asio::socket_base::receive_buffer_size (I2P_UDP_MAX_MTU )); @@ -161,11 +150,5 @@ auto session = m_Destination->GetSession (Identity); if (ts > LastActivity + I2P_UDP_REPLIABLE_DATAGRAM_INTERVAL) - { - i2p::util::Mapping options; - options.Put (UDP_SESSION_SEQN, m_NextSendPacketNum); - if (m_LastReceivedPacketNum > 0) - options.Put (UDP_SESSION_ACKED, m_LastReceivedPacketNum); - m_Destination->SendDatagram(session, m_Buffer, len, LocalPort, RemotePort, &options); - } + m_Destination->SendDatagram(session, m_Buffer, len, LocalPort, RemotePort); else m_Destination->SendRawDatagram(session, m_Buffer, len, LocalPort, RemotePort); @@ -182,5 +165,4 @@ if (numPackets > 0) LogPrint(eLogDebug, "UDPSession: Forward more ", numPackets, "packets B from ", FromEndpoint); - m_NextSendPacketNum += numPackets + 1; m_Destination->FlushSendQueue (session); LastActivity = ts; @@ -257,6 +239,5 @@ m_Name (name), m_RemoteDest (remoteDest), m_LocalDest (localDestination), m_LocalEndpoint (localEndpoint), m_ResolveThread (nullptr), m_LocalSocket (nullptr), RemotePort (remotePort), - m_LastPort (0), m_cancel_resolve (false), m_Gzip (gzip), m_DatagramVersion (datagramVersion), - m_NextSendPacketNum (1), m_LastReceivedPacketNum (0) + m_LastPort (0), m_cancel_resolve (false), m_Gzip (gzip), m_DatagramVersion (datagramVersion) { } @@ -359,11 +340,5 @@ auto session = m_LocalDest->GetDatagramDestination ()->GetSession (m_RemoteAddr->identHash); if (ts > m_LastSession->second + I2P_UDP_REPLIABLE_DATAGRAM_INTERVAL) - { - i2p::util::Mapping options; - options.Put (UDP_SESSION_SEQN, m_NextSendPacketNum); - if (m_LastReceivedPacketNum > 0) - options.Put (UDP_SESSION_ACKED, m_LastReceivedPacketNum); - m_LocalDest->GetDatagramDestination ()->SendDatagram (session, m_RecvBuff, transferred, remotePort, RemotePort, &options); - } + m_LocalDest->GetDatagramDestination ()->SendDatagram (session, m_RecvBuff, transferred, remotePort, RemotePort); else m_LocalDest->GetDatagramDestination ()->SendRawDatagram (session, m_RecvBuff, transferred, remotePort, RemotePort); @@ -382,5 +357,4 @@ if (numPackets) LogPrint (eLogDebug, "UDP Client: Sent ", numPackets, " more packets to ", m_RemoteAddr->identHash.ToBase32 ()); - m_NextSendPacketNum += numPackets + 1; m_LocalDest->GetDatagramDestination ()->FlushSendQueue (session); diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/UDPTunnel.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/UDPTunnel.h --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/UDPTunnel.h 2025-10-02 02:06:57.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/UDPTunnel.h 2025-10-02 01:16:30.000000000 +0000 @@ -47,5 +47,4 @@ uint8_t m_Buffer[I2P_UDP_MAX_MTU]; - uint32_t m_NextSendPacketNum, m_LastReceivedPacketNum; UDPSession(boost::asio::ip::udp::endpoint localEndpoint, @@ -182,5 +181,4 @@ i2p::datagram::DatagramVersion m_DatagramVersion; std::shared_ptr m_LastSession; - uint32_t m_NextSendPacketNum, m_LastReceivedPacketNum; public: