Having recently implemented an initial version of XEP-0198 acknowledgements support for Prosody, I have some feedback:
1) I think section 8 (Stream Closure) of XEP-0198 needs to discuss the handling of unacknowledged stanzas. I think clients should ensure that any and all stanzas are acknowledged prior to closing the stream, otherwise confusion may ensue. 2) I'm not sure how much sense it makes for the period between ack requests to be determined by the number of sent stanzas. On inactive streams stanzas could be received but remain unacknowledged for extended periods of time. Surely it would make more sense to say "Each stanza should be acknowledged within X seconds of sending"? 3) Finally there's the handling of unacknowledged stanzas on connection failure. It seems that bouncing the stanza with an error is the simplest approach, but the XEP suggests some smarter alternatives (which I like). However these have corner cases. For example if the server was to handle the stanza as it would a stanza to an unavailable resource, that stanza should go to another resource or offline storage. However if there is a second resource online, and it has the same priority, it quite possibly already received that message. The same problem happens if that second resource dropped connection too - you would end up with multiple messages in offline storage. We can either skim over these as implementation details, or try to spec out exactly what a server should do in this scenario. Thoughts? Regards, Matthew PS. What's the current consensus on splitting 0198 into separate XEPs for acknowledgement and resumption? I'm not sure the two are very tighly bound, quite commonly one could be implemented/enabled without the other. Short XEPs are good :)
