code: private HTTPExchange processResponseAcknowledgementReport(
              final AbstractBody resp)
              throws BOSHException {
          assertLocked();
          
          String reportStr = resp.getAttribute(Attributes.REPORT);
          if (reportStr == null) {
              // No report on this message
              return null;
          }
          
          Long report = Long.parseLong(reportStr);
          Long time = Long.parseLong(resp.getAttribute(Attributes.TIME));
          if (LOG.isLoggable(Level.FINE)) {
              LOG.fine("Received report of missing request (RID="
                      + report + ", time=" + time + "ms)");
          }
  
          // Find the missing request
          Iterator<ComposableBody> iter = pendingRequestAcks.iterator();
          AbstractBody req = null;
          while (iter.hasNext() && req == null) {
              AbstractBody pending = iter.next();
              Long pendingRID = Long.parseLong(
                      pending.getAttribute(Attributes.RID));
              if (report.equals(pendingRID)) {
                  req = pending;
              }
          }
  
          if (req == null) {
              throw(new BOSHException("Report of missing message with RID '"
                      + reportStr
                      + "' but local copy of that request was not found"));
          }
  
          // Resend the missing request
          HTTPExchange exch = new HTTPExchange(req);
          exchanges.add(exch);
          notEmpty.signal();
          return exch;
      }
docs: Process the response in order to check for and respond to any potential
  ack reports.
  
  This method assumes the lock is currently held.
  
  @param resp response
  @return exchange to transmit if a resend is to be performed, or
  {@code null} if no resend is necessary
  @throws BOSHException when a a retry is needed but cannot be performed