Split big BSP Records
In #407, the requested feature is to send files with sizes bigger than one BSP Record. The issue is cluttered with user feedback-quotes, therefore I thought I make a new issue to propose an implementation (I don't know if this is the best way to handle that ...).
I realized that I basically need the same feature for thomas/briar#1 (with custom BSP-Record sizes). My thoughts are intended to allow for minimal overhead (saving every byte).
My idea is to introduce message-fragments/slices. I think it is not enough to add a new message-type to BSPv0, I think it will require BSPv1. (the slices will be required also for e.g. the REQUEST-Type)
I imagine to send message fragments like { message-hash, start of slice, slice length, byte-array }. The message itself is prefixed with its total size (needs only to be transmitted with the first slice; since the message is only composed when all slices are there, it is no problem if the first slice is retransmitted).
The receiver can acknowledge fragments (by hash, start and length). When all fragments are available, the sender internally acknowledges the whole record and the receiver assembles the message. I could also imagine the sender caching which BTP-Frame contains which message-fragments so that the receiver can acknowledge BTP-Frames which might save some space. But it will add additional complexity ...
Having sizes&positions as varints (an Implementation) would be awesome.
Btw: Sorry for not replying to thomas/briar#1 yet