private ImapMessage unknownCommand(String tag, ImapSession session) { ImapMessage message; Object c = session.getAttribute(INVALID_COMMAND_COUNT); int count = 0; if (c != null) { count = (Integer) c; } count++; if (count > maxInvalidCommands || session.getState() == ImapSessionState.NON_AUTHENTICATED) { message = responseFactory.bye(HumanReadableText.BYE_UNKNOWN_COMMAND); session.logout(); } else { session.setAttribute(INVALID_COMMAND_COUNT, count); if (tag == null) { message = responseFactory.untaggedBad(HumanReadableText.UNKNOWN_COMMAND); } else { message = responseFactory.taggedBad(tag, null, HumanReadableText.UNKNOWN_COMMAND); } } return message; }
protected void no(ImapCommand command, String tag, ImapProcessor.Responder responder, HumanReadableText displayTextKey) { final StatusResponse response = factory.taggedNo(tag, command, displayTextKey); responder.respond(response); }
protected void okComplete(ImapCommand command, String tag, ResponseCode code, ImapProcessor.Responder responder) { final StatusResponse response = factory.taggedOk(tag, command, HumanReadableText.COMPLETED, code); responder.respond(response); }
public ImapResponseMessage process(ImapMessage message) { LOGGER.debug("Unknown message: {}", message); final ImapResponseMessage result; if (message instanceof ImapRequest) { ImapRequest request = (ImapRequest) message; final String tag = request.getTag(); final ImapCommand command = request.getCommand(); result = factory.taggedBad(tag, command, HumanReadableText.UNKNOWN_COMMAND); } else { result = factory.untaggedBad(HumanReadableText.UNKNOWN_COMMAND); } return result; }
/** * Parses a request into a command message for later processing. * * @param request * <code>ImapRequestLineReader</code>, not null * @return <code>ImapCommandMessage</code>, not null */ @Override public final ImapMessage parse(ImapRequestLineReader request, String tag, ImapSession session) { ImapMessage result; if (!command.validForState(session.getState())) { result = statusResponseFactory.taggedNo(tag, command, HumanReadableText.INVALID_COMMAND); } else { try { result = decode(command, request, tag, session); } catch (DecodingException e) { LOGGER.debug("Cannot parse protocol ", e); result = statusResponseFactory.taggedBad(tag, command, e.getKey()); } } return result; }
@Override protected void doProcess(CompressRequest request, Responder responder, ImapSession session) { if (session.isCompressionSupported()) { Object obj = session.getAttribute(COMPRESSED); if (obj != null) { responder.respond(factory.taggedNo(request.getTag(), request.getCommand(), HumanReadableText.COMPRESS_ALREADY_ACTIVE)); } else { if (request.getAlgorithm().equalsIgnoreCase(ALGO) == false) { responder.respond(factory.taggedBad(request.getTag(), request.getCommand(), HumanReadableText.ILLEGAL_ARGUMENTS)); } else { responder.respond(factory.taggedOk(request.getTag(), request.getCommand(), HumanReadableText.DEFLATE_ACTIVE)); if (session.startCompression()) { session.setAttribute(COMPRESSED, true); } } } } else { responder.respond(factory.taggedBad(request.getTag(), request.getCommand(), HumanReadableText.UNKNOWN_COMMAND)); } }
private void highestModSeq(Responder responder, MetaData metaData, SelectedMailbox selected) { final StatusResponse untaggedOk; if (metaData.isModSeqPermanent()) { final long highestModSeq = metaData.getHighestModSeq(); untaggedOk = statusResponseFactory.untaggedOk(HumanReadableText.HIGHEST_MOD_SEQ, ResponseCode.highestModSeq(highestModSeq)); } else { untaggedOk = statusResponseFactory.untaggedOk(HumanReadableText.NO_MOD_SEQ, ResponseCode.noModSeq()); } responder.respond(untaggedOk); }
@Override protected void doProcess(StartTLSRequest request, Responder responder, ImapSession session) { if (session.supportStartTLS()) { responder.respond(factory.taggedOk(request.getTag(), request.getCommand(), HumanReadableText.STARTTLS)); session.startTLS(); } else { responder.respond(factory.taggedBad(request.getTag(), request.getCommand(), HumanReadableText.UNKNOWN_COMMAND)); } }
protected void bye(ImapProcessor.Responder responder, HumanReadableText key) { final StatusResponse response = factory.bye(key); responder.respond(response); }
protected void taggedBad(ImapCommand command, String tag, ImapProcessor.Responder responder, HumanReadableText e) { StatusResponse response = factory.taggedBad(tag, command, e); responder.respond(response); }
@Test public void testUntaggedBad() { StatusResponse response = factory.untaggedBad(KEY); assertThat(response).isNotNull(); assertThat(response.getServerResponseType()).isEqualTo(StatusResponse.Type.BAD); assertThat(response.getTag()).isNull(); assertThat(response.getTextKey()).isEqualTo(KEY); assertThat(response.getResponseCode()).isNull(); assertThat(response.getCommand()).isNull(); response = factory.untaggedBad(KEY, CODE); assertThat(response).isNotNull(); assertThat(response.getServerResponseType()).isEqualTo(StatusResponse.Type.BAD); assertThat(response.getTag()).isNull(); assertThat(response.getTextKey()).isEqualTo(KEY); assertThat(response.getResponseCode()).isEqualTo(CODE); assertThat(response.getCommand()).isNull(); }
private void handleResponseException(ImapProcessor.Responder responder, MailboxException e, HumanReadableText message, ImapSession session) { LOGGER.error("{}", message, e); // TODO: consider whether error message should be passed to the user final StatusResponse response = factory.untaggedNo(message); responder.respond(response); }
/** * @see * org.apache.james.imap.processor.base.AbstractChainedProcessor#doProcess(org.apache.james.imap.api.ImapMessage, * org.apache.james.imap.api.process.ImapProcessor.Responder, * org.apache.james.imap.api.process.ImapSession) */ protected void doProcess(CompressRequest request, Responder responder, ImapSession session) { if (session.isCompressionSupported()) { Object obj = session.getAttribute(COMPRESSED); if (obj != null) { responder.respond(factory.taggedNo(request.getTag(), request.getCommand(), HumanReadableText.COMPRESS_ALREADY_ACTIVE)); } else { if (request.getAlgorithm().equalsIgnoreCase(ALGO) == false) { responder.respond(factory.taggedBad(request.getTag(), request.getCommand(), HumanReadableText.ILLEGAL_ARGUMENTS)); } else { responder.respond(factory.taggedOk(request.getTag(), request.getCommand(), HumanReadableText.DEFLATE_ACTIVE)); if (session.startCompression()) { session.setAttribute(COMPRESSED, true); } } } } else { responder.respond(factory.taggedBad(request.getTag(), request.getCommand(), HumanReadableText.UNKNOWN_COMMAND)); } }
private void highestModSeq(Responder responder, MetaData metaData, SelectedMailbox selected) { final StatusResponse untaggedOk; if (metaData.isModSeqPermanent()) { final long highestModSeq = metaData.getHighestModSeq(); untaggedOk = statusResponseFactory.untaggedOk(HumanReadableText.HIGHEST_MOD_SEQ, ResponseCode.highestModSeq(highestModSeq)); } else { untaggedOk = statusResponseFactory.untaggedOk(HumanReadableText.NO_MOD_SEQ, ResponseCode.noModSeq()); } responder.respond(untaggedOk); }
public ImapResponseMessage process(ImapMessage message, ImapSession session) { Logger logger = session.getLog(); if (logger != null && logger.isDebugEnabled()) { logger.debug("Unknown message: " + message); } final ImapResponseMessage result; if (message instanceof ImapRequest) { ImapRequest request = (ImapRequest) message; final String tag = request.getTag(); final ImapCommand command = request.getCommand(); result = factory.taggedBad(tag, command, HumanReadableText.UNKNOWN_COMMAND); } else { result = factory.untaggedBad(HumanReadableText.UNKNOWN_COMMAND); } return result; }
/** * Parses a request into a command message for later processing. * * @param request * <code>ImapRequestLineReader</code>, not null * @return <code>ImapCommandMessage</code>, not null */ public final ImapMessage parse(ImapRequestLineReader request, String tag, ImapSession session) { ImapMessage result; if (!command.validForState(session.getState())) { result = statusResponseFactory.taggedNo(tag, command, HumanReadableText.INVALID_COMMAND); } else { try { result = decode(command, request, tag, session); } catch (DecodingException e) { if (session.getLog().isDebugEnabled()) { session.getLog().debug("Cannot parse protocol ", e); } result = statusResponseFactory.taggedBad(tag, command, e.getKey()); } } return result; }
/** * @see * org.apache.james.imap.processor.base.AbstractChainedProcessor * #doProcess(org.apache.james.imap.api.ImapMessage, * org.apache.james.imap.api.process.ImapProcessor.Responder, * org.apache.james.imap.api.process.ImapSession) */ protected void doProcess(StartTLSRequest request, Responder responder, ImapSession session) { if (session.supportStartTLS()) { responder.respond(factory.taggedOk(request.getTag(), request.getCommand(), HumanReadableText.STARTTLS)); session.startTLS(); } else { responder.respond(factory.taggedBad(request.getTag(), request.getCommand(), HumanReadableText.UNKNOWN_COMMAND)); } }
protected void bye(final ImapProcessor.Responder responder, final HumanReadableText key) { final StatusResponse response = factory.bye(key); responder.respond(response); }
protected void taggedBad(final ImapCommand command, final String tag, final ImapProcessor.Responder responder, final HumanReadableText e) { StatusResponse response = factory.taggedBad(tag, command, e); responder.respond(response); }
private void handleResponseException(final ImapProcessor.Responder responder, MailboxException e, final HumanReadableText message, ImapSession session) { session.getLog().info(message.toString()); session.getLog().debug(message.toString(), e); // TODO: consider whether error message should be passed to the user final StatusResponse response = factory.untaggedNo(message); responder.respond(response); }