1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.ftp.core.command.info;
21
22 import org.waarp.common.command.ReplyCode;
23 import org.waarp.common.command.exception.CommandAbstractException;
24 import org.waarp.common.command.exception.Reply501Exception;
25 import org.waarp.common.command.exception.Reply502Exception;
26 import org.waarp.common.command.exception.Reply503Exception;
27 import org.waarp.ftp.core.command.AbstractCommand;
28 import org.waarp.ftp.core.command.FtpCommandCode;
29 import org.waarp.ftp.core.command.extension.XCRC;
30 import org.waarp.ftp.core.command.extension.XDIGEST;
31 import org.waarp.ftp.core.command.extension.XMD5;
32 import org.waarp.ftp.core.command.extension.XSHA1;
33 import org.waarp.ftp.core.command.internal.IncorrectCommand;
34
35
36
37
38
39
40 public class SITE extends AbstractCommand {
41
42 @Override
43 public final void exec() throws CommandAbstractException {
44 if (!hasArg()) {
45 invalidCurrentCommand();
46 throw new Reply501Exception("Need a command at least as argument");
47 }
48
49 AbstractCommand command = getSession().getBusinessHandler()
50 .getSpecializedSiteCommand(
51 getSession(), getArg());
52 boolean special = true;
53 if (command == null) {
54
55 command = FtpCommandCode.getFromLine(getSession(), getArg());
56 special = false;
57 }
58
59 getSession().setReplyCode(ReplyCode.REPLY_200_COMMAND_OKAY, null);
60
61 if (special || FtpCommandCode.isExtensionCommand(command.getCode())) {
62
63
64 if (getSession().getDataConn().getFtpTransferControl()
65 .isFtpTransferExecuting()) {
66 throw new Reply503Exception(
67 "Previous transfer command is not finished yet");
68 }
69 } else {
70 throw new Reply502Exception("Command not implemented: " + getArg());
71 }
72
73
74 getSession().setPreviousAsCurrentCommand();
75 if (getSession().getCurrentCommand().isNextCommandValid(command)) {
76 getSession().setNextCommand(command);
77 getSession().getBusinessHandler().beforeRunCommand();
78 command.exec();
79 } else {
80 command = new IncorrectCommand();
81 command.setArgs(getSession(), getArg(), null,
82 FtpCommandCode.IncorrectSequence);
83 getSession().setNextCommand(command);
84 getSession().getBusinessHandler().beforeRunCommand();
85 command.exec();
86 }
87 }
88 }