Esempio n. 1
0
  List<ImapResponse> readStatusResponse(
      String tag, String commandToLog, String logId, UntaggedHandler untaggedHandler)
      throws IOException, NegativeImapResponseException {

    List<ImapResponse> responses = new ArrayList<ImapResponse>();

    ImapResponse response;
    do {
      response = readResponse();

      if (K9MailLib.isDebug() && DEBUG_PROTOCOL_IMAP) {
        Log.v(LOG_TAG, logId + "<<<" + response);
      }

      if (response.getTag() != null && !response.getTag().equalsIgnoreCase(tag)) {
        Log.w(
            LOG_TAG,
            "After sending tag "
                + tag
                + ", got tag response from previous command "
                + response
                + " for "
                + logId);

        Iterator<ImapResponse> responseIterator = responses.iterator();

        while (responseIterator.hasNext()) {
          ImapResponse delResponse = responseIterator.next();
          if (delResponse.getTag() != null
              || delResponse.size() < 2
              || (!equalsIgnoreCase(delResponse.get(1), Responses.EXISTS)
                  && !equalsIgnoreCase(delResponse.get(1), Responses.EXPUNGE))) {
            responseIterator.remove();
          }
        }
        response = null;
        continue;
      }

      if (untaggedHandler != null) {
        untaggedHandler.handleAsyncUntaggedResponse(response);
      }

      responses.add(response);
    } while (response == null || response.getTag() == null);

    if (response.size() < 1 || !equalsIgnoreCase(response.get(0), Responses.OK)) {
      throw new NegativeImapResponseException(
          "Command: " + commandToLog + "; response: " + response.toString(),
          response.getAlertText());
    }

    return responses;
  }