/** * Handler method called upon receipt of a NOOP command. Like all good * NOOPs, does nothing much. */ @Override public Response onCommand(POP3Session session, Request request) { if (session.getHandlerState() == POP3Session.TRANSACTION) { return POP3Response.OK; } else { return POP3Response.ERR; } }
@Override @SuppressWarnings("unchecked") public Set<String> getImplementedCapabilities(POP3Session session) { if (session.getHandlerState() == POP3Session.TRANSACTION) { return CAPS; } else { return Collections.EMPTY_SET; } }
@Override @SuppressWarnings("unchecked") public Set<String> getImplementedCapabilities(POP3Session session) { if (session.getHandlerState() == POP3Session.TRANSACTION) { return CAPS; } else { return Collections.EMPTY_SET; } }
@Override @SuppressWarnings("unchecked") public Set<String> getImplementedCapabilities(POP3Session session) { if (session.isStartTLSSupported() && session.getHandlerState() == POP3Session.AUTHENTICATION_READY) { return CAPS; } else { return Collections.EMPTY_SET; } }
/** * Handler method called upon receipt of a RSET command. Calls stat() to * reset the mailbox. */ @Override public Response onCommand(POP3Session session, Request request) { if (session.getHandlerState() == POP3Session.TRANSACTION) { stat(session); return POP3Response.OK; } else { return POP3Response.ERR; } }
@Override public Response onCommand(POP3Session session, Request request) { // check if starttls is supported, the state is the right one and it was // not started before if (session.isStartTLSSupported() && session.getHandlerState() == POP3Session.AUTHENTICATION_READY && session.isTLSStarted() == false) { return BEGIN_TLS; } else { return POP3Response.ERR; } }
/** * Handler method called upon receipt of a QUIT command. This method handles * cleanup of the POP3Handler state. */ @Override @SuppressWarnings("unchecked") public Response onCommand(POP3Session session, Request request) { Response response = null; if (session.getHandlerState() == POP3Session.AUTHENTICATION_READY || session.getHandlerState() == POP3Session.AUTHENTICATION_USERSET) { return SIGN_OFF; } List<String> toBeRemoved = (List<String>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction); Mailbox mailbox = session.getUserMailbox(); try { String[] uids = toBeRemoved.toArray(new String[toBeRemoved.size()]); mailbox.remove(uids); response = SIGN_OFF; } catch (Exception ex) { response = SIGN_OFF_NOT_CLEAN; LOGGER.error("Some deleted messages were not removed", ex); } try { mailbox.close(); } catch (IOException e) { // ignore on close } return response; }
/** * Handler method called upon receipt of a STAT command. Returns the number * of messages in the mailbox and its aggregate size. */ @Override @SuppressWarnings("unchecked") public Response onCommand(POP3Session session, Request request) { if (session.getHandlerState() == POP3Session.TRANSACTION) { List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction); List<String> deletedUidList = (List<String>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction); long size = 0; int count = 0; if (uidList.isEmpty() == false) { List<MessageMetaData> validResults = new ArrayList<>(); for (MessageMetaData data : uidList) { if (deletedUidList.contains(data.getUid()) == false) { size += data.getSize(); count++; validResults.add(data); } } } StringBuilder responseBuffer = new StringBuilder(32).append(count).append(" ").append(size); return new POP3Response(POP3Response.OK_RESPONSE, responseBuffer.toString()); } else { return POP3Response.ERR; } }
@SuppressWarnings("unchecked") public Response onCommand(POP3Session session, Request request) { if (session.getHandlerState() == POP3Session.TRANSACTION) { int num = 0; try {
/** * Handler method called upon receipt of a USER command. Reads in the user * id. */ @Override public Response onCommand(POP3Session session, Request request) { String parameters = request.getArgument(); if (session.getHandlerState() == POP3Session.AUTHENTICATION_READY && parameters != null) { session.setUser(parameters); session.setHandlerState(POP3Session.AUTHENTICATION_USERSET); return POP3Response.OK; } else { return POP3Response.ERR; } }
@Test void onCommandShouldNotThrowOnMessageDecNumberOverflow() { POP3Session session = mock(POP3Session.class); when(session.getHandlerState()).thenReturn(POP3Session.TRANSACTION); Request request = mock(Request.class); String overflowedNumber = Long.toString(Long.MAX_VALUE); when(request.getArgument()).thenReturn(overflowedNumber); assertThat(new RetrCmdHandler().onCommand(session, request)) .isEqualTo(RetrCmdHandler.SYNTAX_ERROR); } }
List<String> deletedUidList = (List<String>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction); if (session.getHandlerState() == POP3Session.TRANSACTION) { POP3Response response = null;
POP3Response response = null; String parameters = request.getArgument(); if (session.getHandlerState() == POP3Session.TRANSACTION) { List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction); List<String> deletedUidList = (List<String>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction);
@ParameterizedTest @ValueSource(ints = {8, 16, 32, 64, 128, 256}) void onCommandShouldNotThrowOnMessageHexNumberOverflow(int pad) { POP3Session session = mock(POP3Session.class); when(session.getHandlerState()).thenReturn(POP3Session.TRANSACTION); Request request = mock(Request.class); String overflowedNumber = Collections.nCopies(pad, "\\xff").stream().collect(Collectors.joining()); when(request.getArgument()).thenReturn(overflowedNumber); assertThat(new RetrCmdHandler().onCommand(session, request)) .isEqualTo(RetrCmdHandler.SYNTAX_ERROR); }
POP3Response response = null; String parameters = request.getArgument(); if (session.getHandlerState() == POP3Session.TRANSACTION) { int num = 0; try {
/** * Handler method called upon receipt of a PASS command. Reads in and * validates the password. */ @Override public Response onCommand(POP3Session session, Request request) { String parameters = request.getArgument(); if (session.getHandlerState() == POP3Session.AUTHENTICATION_USERSET && parameters != null) { return doAuth(session, session.getUser(), parameters); } else { session.setHandlerState(POP3Session.AUTHENTICATION_READY); return AUTH_FAILED; } }
if (session.getHandlerState() == POP3Session.TRANSACTION) { int num = 0; int lines = -1;
syntaxError = true; if (!syntaxError && session.getHandlerState() == POP3Session.AUTHENTICATION_READY) {