Opened 7 years ago
Closed 5 years ago
#1335 closed task (wontfix)
Datagrams without Payload Are Not Delivered
Reported by: | ExtraBattery | Owned by: | mkvore |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | apps/SAM | Version: | 0.9.13 |
Keywords: | docs | Cc: | |
Parent Tickets: | Sensitive: | no |
Description
As it is legal and possible to send UDP datagrams without any payload through the normal internet, I wondered if this is true for I2P as well. So I tried to send a datagram with zero bytes payload from
one I2P destination to another using SAM v3.0. I couldn't receive that datagram.
I noticed that there are two routines called checkSize() and checkDatagramSize() in "SAMv1Handler.java" that reject a payload size of zero. I don't know if this is the expected behavior of SAM or I2P in general or if this is just a mistake.
If zero length payload I2P datagrams are not meant to be delivered in general, you might want to add this piece of information to:
https://geti2p.net/en/docs/api/datagrams
The documentation of SAM might also benefit from this info.
All tests were done using I2P 0.9.13-0 with the same semantics posted in the comment 2 of #1334, that is "SESSION CREATE …" and "DATAGRAM SEND …". I used repliable datagrams for my test.
While writing this post, I realized that there is probably a little more work to do regarding ticket #1318. I didn't re-open it though. See comment 23 there.
Subtickets
Change History (9)
comment:1 Changed 7 years ago by
Milestone: | 0.9.14 → 0.9.15 |
---|
comment:2 Changed 7 years ago by
Docs updated in a56cc4f45cc2c0585bf5d7c7574317e87892c221
Leaving ticket open for investigation of 0-length support.
comment:3 Changed 7 years ago by
I would simply allow zero size datagrams (repliable or not), since this is most compatible with clearnets and makes it easier to port applications to I2P. There is no real reason to forbid zero payloads, as an empty datagram can by itself represent information, depending on the context it arrives in. Be lenient.
Another thing: You could make it more noticeable in the datagram documentation that the payload is by default compressed using gzip. I feel it's easy to miss that important point.
comment:4 Changed 7 years ago by
As I said in comment 2 above, haven't yet researched whether a zero-length payload makes it all the way through the stack.
As i said in comment 1 above, repliable may be useful, raw probably not.
Please explain why gzip is relevant to anything.
comment:5 Changed 7 years ago by
The datagram documentation tells people that zero size payloads are allowed.
https://geti2p.net/en/docs/spec/datagrams
About gzip: If the payload of a datagram is compressed by default, application developers don't have to worry about compressing the payload themselves. That's why it's good to have them informed about what happens to the payload during transport.
comment:6 Changed 7 years ago by
I've tested what happens when you change the checkDatagramSize() routine in SAM v3.1, to allow for zero length payloads. The empty datagram didn't come through. So there are probably other blockers somewhere.
At the end of the current datagram documentation there is a bad link ("important notes").
comment:8 Changed 6 years ago by
Keywords: | docs added |
---|---|
Milestone: | 0.9.15 |
comment:9 Changed 5 years ago by
Resolution: | → wontfix |
---|---|
Status: | new → closed |
As stated above, SAM docs were fixed to specify 1 byte minimum.
Not going to fix delivery of empty datagrams all the way through I2P. No reason to. If anybody can think of an application that would need this, please reopen the ticket.
We don't know atm if this is just a SAM thing or a datagram lib thing or an I2CP thing.
A zero-length repliable datagram may be useful, but a zero-length raw datagram may not be.