@Override protected ProtocolHandler createProtocolHandler(final Socket clientSocket) { return new Pop3Handler(new Pop3CommandRegistry(), managers.getUserManager(), clientSocket); }
void handleCommand() throws IOException { currentLine = conn.readLine(); if (currentLine == null) { close(); return; } String commandName = new StringTokenizer(currentLine, " ").nextToken() .toUpperCase(); Pop3Command command = registry.getCommand(commandName); if (command == null) { conn.println("-ERR Command not recognized"); return; } if (!command.isValidForState(state)) { conn.println("-ERR Command not valid for this state"); return; } command.execute(conn, state, currentLine); }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { try { MailFolder inbox = state.getFolder(); List<StoredMessage> messages = inbox.getNonDeletedMessages(); long size = sumMessageSizes(messages); conn.println("+OK " + messages.size() + " " + size); } catch (Exception me) { conn.println("-ERR " + me); } }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { try { MailFolder inbox = state.getFolder(); String[] cmdLine = cmd.split(" "); if (cmdLine.length < 3) throw new IllegalArgumentException("range and line count required"); String msgNumStr = cmdLine[1]; List<StoredMessage> msgList = inbox.getMessages(new MsgRangeFilter(msgNumStr, false)); if (msgList.size() != 1) { conn.println("-ERR no such message"); return; } StoredMessage msg = msgList.get(0); int numLines = Integer.parseInt(cmdLine[2]); try (BufferedReader in = new BufferedReader( new StringReader(GreenMailUtil.getWholeMessage(msg.getMimeMessage())))) { conn.println("+OK"); copyHeaders(in, conn); copyLines(in, conn, numLines); } conn.println("."); } catch (Exception e) { conn.println("-ERR " + e); } }