code: private void redrive() throws SipPacketParseException {
          if (logger.isInfoEnabled()) {
              logger.info("Out-of-sequence event detected. Redriving all traffic.");
          }
          final NavigableSet<SipPacket> oldMessages = this.messages;
          init();
          while (!oldMessages.isEmpty()) {
              final SipPacket msg = oldMessages.pollFirst();
              onEvent(msg);
          }
      }
docs: When a messages (or event in general) "arrives" to this state machine but
  this message's arrival time is actually before our last seen message then
  we will have to re-drive everything. Perhaps we could have been a little
  smarter but this just seems easier, safer and less error prone since it
  would not require any special logic to figure out what state changes we
  would have gone through etc.