01: package com.coldcore.coloradoftp.command;
02:
03: import com.coldcore.coloradoftp.connection.ControlConnection;
04:
05: /**
06: * User command.
07: *
08: * This class is executed by a command processor and returns a reply which
09: * if then send back to user.
10: *
11: * In general there should be a separate implementation for every FTP command,
12: * so every implementation knows how to handle one (and only one) FTP command.
13: * This way commands can be easily replaced later.
14: *
15: * Control connection can enter an INTERRUPT state. In INTERRUPT state user must
16: * wait for a server reply and is not allowed to send anything in but the INTERRUPT
17: * commands. As a result, there are two types of FTP commands: one will be processed
18: * during the INTERRUPT state and the other will be dropped when a control connection
19: * is in that state.
20: *
21: * Some FTP commands put control connection into the INTERRUPT state which is then
22: * cleared when the connection sends a reply. Such reply must refer to a command which
23: * is allowed to clear the state or does not have a reference to a command.
24: *
25: * There is a certain set of commands that must be processed during the INTERRUPT state:
26: * ABOR, QUIT and STAT.
27: * And usually only one command is allowed to clear that state: ABOR.
28: * The rest of FTP commands should not bother with INTERRUPT state.
29: *
30: *
31: * ColoradoFTP - The Open Source FTP Server (http://cftp.coldcore.com)
32: */
33: public interface Command {
34:
35: /** Test if this is command must be processed while a connection is in the INTERRUPT state
36: * @return TRUE is it can be, FALSE otherwise
37: */
38: public boolean processInInterruptState();
39:
40: /** Test if reply to this command must clear INTERRUPT state of a connection
41: * @return TRUE is it can, FALSE otherwise
42: */
43: public boolean canClearInterruptState();
44:
45: /** Get name of the command
46: * @return Command name
47: */
48: public String getName();
49:
50: /** Set name of the command
51: * @param name Command name
52: */
53: public void setName(String name);
54:
55: /** Get parameter of the command
56: * @return Command parameter
57: */
58: public String getParameter();
59:
60: /** Set parameter of the command
61: * @param parameter Command parameter
62: */
63: public void setParameter(String parameter);
64:
65: /** Execute the command
66: * @return Reply to the command
67: */
68: public Reply execute();
69:
70: /** Execute the command as part of the parent command (e.g. FEAT/HELP/OPTS)
71: * @param parent Parent command
72: * @return Reply to the command or NULL to allow the parent to provide the default reply
73: */
74: public Reply executeOnParent(Command parent);
75:
76: /** Set control connection that submitted this command
77: * @param connection Connection
78: */
79: public void setConnection(ControlConnection connection);
80:
81: /** Get control connection that submitted this command
82: * @return Connection
83: */
84: public ControlConnection getConnection();
85: }
|