123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package de.tudarmstadt.informatik.hostage.protocol;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * FTP protocol
- * @author Wulf Pfeiffer
- */
- public class FTP implements Protocol<String> {
- /**
- * Represents the states of the protocol
- */
- private static enum STATE {
- NONE, OPEN, CLOSED, USER, LOGGED_IN
- };
- /**
- * Denotes in which state the protocol is right now
- */
- private STATE state = STATE.NONE;
-
-
- public int getPort() {
- return 21;
- }
-
- public TALK_FIRST whoTalksFirst() {
- return TALK_FIRST.SERVER;
- }
-
- public List<String> processMessage(String message) {
- List<String> response = new ArrayList<String>();
- switch (state) {
- case NONE:
- if (message == null) {
- state = STATE.OPEN;
- response.add(c220);
- } else {
- state = STATE.CLOSED;
- response.add(c421);
- }
- break;
- case OPEN:
- if (message.contains("QUIT")) {
- state = STATE.CLOSED;
- return null;
- } else if (message.equals("USER \r\n")) {
- response.add(c501);
- } else if (message.contains("USER")) {
- state = STATE.USER;
- response.add(c331);
- } else {
- response.add(c332);
- }
- break;
- case USER:
- if (message.equals("PASS \r\n")) {
- state = STATE.OPEN;
- response.add(c501);
- } else if (message.contains("PASS")) {
- state = STATE.LOGGED_IN;
- response.add(c230);
- } else {
- state = STATE.CLOSED;
- response.add(c221);
- }
- break;
- case LOGGED_IN:
- if (message != null && !message.contains("QUIT")) {
- response.add(c500);
- } else {
- state = STATE.CLOSED;
- response.add(c221);
- }
- break;
- default:
- state = STATE.CLOSED;
- response.add(c421);
- }
- return response;
- }
-
- //commands
- private String c220 = "220 Service ready for new user.";
- private String c221 = "221 Service closing control connection.";
- private String c230 = "230 User logged in.";
- private String c331 = "331 User name ok, need password.";
- private String c332 = "332 Need account for login.";
- private String c421 = "421 Service not available, closing control connection.";
- private String c500 = "500 Syntax error, command unrecognized.";
- private String c501 = "501 Syntax error in parameters or arguments";
-
- public boolean isClosed() {
- return state == STATE.CLOSED;
- }
-
- public boolean isSecure() {
- return false;
- }
-
- public Class<String> getType() {
- return String.class;
- }
-
- public String toString() {
- return "FTP";
- }
- }
|