<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <br>
    After a great deal of refactoring, digging, confusion, and
    generalized wrestling with the surprising number of tentacles that
    comprise the mrulist system I can now make a report of sorts:<br>
    <br>
    <b>Error handling expected by the protocol:</b><br>
    <br>
    * If there is no overlap between the requested entries and what the
    server has available the client is supposed to back up until it can
    find an overlap. In the worst case this can mean completely
    restarting the request sequence.<br>
    <br>
    The current code (this was true in the original C version as well)
    pretends to do this and will bail if it happens 8 times, but does
    not make any changes whatsoever to the request. For all meaningful
    purposes this is not implemented in the client.<br>
    <br>
    * Duplicate entries may be created as data is updated during the
    request sequence.<br>
    <br>
    This is implemented.<br>
    <br>
    * Packet errors should result in packet size adjustment.<br>
    <br>
    This is implemented.<br>
    <br>
    <b>Ways the mrulist handler as currently written can exit its packet
      loop:</b><b><br>
    </b><br>
    * Unspecified errors.<br>
    <br>
    * Too many (fake) restarts.<br>
    <br>
    * Bad data in mrulist response.<br>
    <br>
    * Finding an ending packet, represented by the "now" tag.<br>
    <br>
    <b>Implications:</b><br>
    <br>
    * What happens when a packet in the middle of the sequence is
    dropped? Who knows! If it is seen as a timeout then the client will
    adjust packet size and try again... forever. Or maybe it silently
    doesn't notice?<br>
    <br>
    * What happens when the final packet is dropped? Same as before,
    except that never seeing the "now" field means that silent failure
    will result in an infinite loop. I think.<br>
    <br>
    * If the server data changes enough while the request sequence is
    running the system can just fail for no good reason because the
    error handling for that doesn't exist. Arguably that is when things
    are going well; I can imagine some subtle and wacky hijinks when
    dumb luck causes it to not fail properly.<br>
    <br>
    <div class="moz-signature">-- <br>
      <i>"In the end; what separates a Man, from a Slave? Money? Power?
        No. A Man Chooses, a Slave Obeys."</i> -- Andrew Ryan
      <p>
        <i>"Utopia cannot precede the Utopian.
          It will exist the moment we are fit to occupy it."</i> --
        Sophia Lamb
      </p>
    </div>
  </body>
</html>