From 58e8d0647931801bd9faffed5772dc118a5cf67c Mon Sep 17 00:00:00 2001 From: zzz <zzz@i2pmail.org> Date: Mon, 3 Jan 2022 11:58:18 -0500 Subject: [PATCH] Prop. 160 updates --- i2p2www/spec/proposals/160-udp-trackers.rst | 30 ++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/i2p2www/spec/proposals/160-udp-trackers.rst b/i2p2www/spec/proposals/160-udp-trackers.rst index c2fb9eb0b..a55861e27 100644 --- a/i2p2www/spec/proposals/160-udp-trackers.rst +++ b/i2p2www/spec/proposals/160-udp-trackers.rst @@ -194,6 +194,7 @@ Offset Size Name Value 88 32-bit integer key 92 32-bit integer num_want -1 // default 96 16-bit integer port + 98 TBD additional data TBD {% endhighlight %} Changes from [BEP15]_: @@ -202,6 +203,8 @@ Changes from [BEP15]_: - IP address is ignored - key is ignored - port is probably ignored +- Explicitly indidate that the protocol is extensible, + with possible additional data starting at port 98. The response MUST be sent to the I2CP "to port" that was received as the request "from port". Do not use the port from the announce request. @@ -227,13 +230,22 @@ Offset Size Name Value 8 32-bit integer interval 12 32-bit integer leechers 16 32-bit integer seeders - 20 + 32 * n 32-bit integer binary hash + 20 16-bit integer count of hashes to follow + 22 + 32 * n 32-byte hash binary hashes + ... + 22 + 32 * c TBD additional data TBD + {% endhighlight %} Changes from [BEP15]_: +- Add a hash count before the hashes, so that the response format + is extensible with additional data after the hashes. - Instead of 6-byte IPv4+port or 18-byte IPv6+port, we return - a multiple of 32-byte "compact responses" with the binary peer hashes. + a multiple of 32-byte "compact responses" with the SHA-256 binary peer hashes. + As with TCP compact responses, we do not include a port. +- Explicitly indidate that the protocol is extensible, + with possible additional data starting after the hashes The response MUST be sent to the I2CP "to port" that was received as the request "from port". Do not use the port from the announce request. @@ -275,7 +287,8 @@ Issues - Repliable datagrams do not support offline signatures. That requires a separate proposal. -- This proposal does not support blinded destinations. +- This proposal does not support blinded destinations, + but may be extended to do so. See below. - This proposal offers two modes at the client's option. An existing clearnet tracker such as "opentracker" would require more modifications to support the fast mode. There is no way in the announce URL to indicate @@ -293,6 +306,13 @@ Extension bits or a version field are not included. Clients and trackers should not assume packets to be of a certain size. This way, additional fields can be added without breaking compatibility. +The announce response is modified to include a count of peer hashes, +so that the response may be easily extended with additional information. + +If blinded destination support is required, we can either add the +blinded 35-byte address to the end of the announce request, or define a new blinded announce request message. +The set of blinded 35-byte peer addresses could be added to the end of the announce reply. + Implementation guidelines @@ -313,6 +333,8 @@ whatever is best for the existing code base. If a client support DHT or other datagram protocols, it should probably select a different port as the request "from port" so that the replies come back to that port and are not mixed up with DHT messages. +The client only receives raw datagrams as replies. +Trackers will never send a repliable datagram to the client. Clients with a default list of opentrackers should update the list to add UDP URLs after the known opentrackers are known to support UDP. @@ -328,6 +350,8 @@ Trackers Trackers must implement both compatibility mode and fast mode. Trackers with existing BEP 15 support should require only small modifications. +This proposal differs from the 2014 proposal, in that the tracker +must support reception of repliable and raw datagrams on the same port. For an integrated application (router and client in one process, for example the ZzzOT Java plugin), it should be straightforward to implement and route the streaming and datagram traffic separately. -- GitLab