Clarification about handling local haves
I was digging into the details of Negentropy and RBSR in general, and I ended up with a few things that I didn't quite grasp. Hope you don't mind if I ask here :)
After reading the original paper and the blog post, I understood that the idea of the process was for both sides to end up with the same set of items, although digging into the implementation it seems like there needs to be some separate "side-channel" process for transferring the haves from the client (initiator) to the server.
I was playing around with the following scenario:
- The client (initiator) contains a set of 32 items.
- The server has no items.
- Client initiates the protocol, constructs the initial message with 16 ranges and their fingerprints (32 exceeds the minimum number of items per ID list).
- The server gets the message and sends a message with 16 empty ID list ranges (indicating the client it doesn't have any items in those ranges).
- The client gets the message, and after reconciling returns an empty message (so the reconciliation is over). It also returns the list of haves with the 32 local items, and empty list of wants.
And here comes my confusion: why the client doesn't construct a message to transmit its local haves as ID List ranges? Because it doesn't do that, it seems like there needs to be a separate channel to transfer the haves to the remote server, or the remote server would need to initiate the protocol again as an initiator.
Is there a way to make the complete reconciliation of the missing pieces from both parties to be performed as part of Negentropy itself?