Changes
* when a member ''recipients'' possibly includes u wants to part, they send a "farewell" message but certainly excludes m:'s sender** everyone should explicit-ack this message ASAP*** this message should contain the next-sender-key''accepted'' means delivered locally, to be used after u leaves, encrypted to everyone except ui. (Hopefully this addresses the concern Joe brought upe.)*** could probably do something similar for group keys** when this message is fullyreceived, then decrypted-acked, u gains consistency for verified including parent hash checks; all previous messages up to m, and may leave*** other messages should must already be probably be discarded, u won't have a chance to verify their consistency.** TBD: need to think about simultaneous partsaccepted
== Consistency == When a member u wants to part, they send a "farewell" message m: * everyone should explicit-ack this message ASAP** this message should contain the next-sender-key, to be used after u leaves, encrypted to everyone except u. (Hopefully this addresses the concern Joe brought up.)** could probably do something similar for group keys* when this message is fully-acked, u gains consistency for all previous messages up to m, and may leave** other messages should be probably be discarded, u won't have a chance to verify their consistency.* TBD: need to think about simultaneous parts When a member u accepts a non-explicit-ack message m at time t** if u did not send m, and they have not acked m by t+MAX_GRACE, they should send an explicit-ack** if m is not fully-acked (from their POV) by t+(2*MAX_RTT)+(k*MAX_GRACE) (k slightly > 1) then issue a local UI warning. Cancel the warning if/when full-ack is reached later. === Parameters and properties ===
* MAX_RTT should be based on the transport
(The above is basically my msg-notes stuff, except assuming reliable transport, without recovery or flow control, without heartbeats, and adapted to a server-dictated ordering.)
A message m is *rejected* ''out-of-order'' if its sender-parent's seqnum is < (m's seqnum - MAX_UNSYNC_COUNT)* MAX_UNSYNC_COUNT may either be constant, or a linear function of the number of members, TBD.
[[Category: mpOTR]]