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.parameter;
21
22 import org.waarp.common.command.ReplyCode;
23 import org.waarp.common.command.exception.Reply501Exception;
24 import org.waarp.common.command.exception.Reply504Exception;
25 import org.waarp.common.exception.InvalidArgumentException;
26 import org.waarp.ftp.core.command.AbstractCommand;
27 import org.waarp.ftp.core.command.FtpArgumentCode;
28 import org.waarp.ftp.core.command.FtpArgumentCode.TransferMode;
29
30
31
32
33 public class MODE extends AbstractCommand {
34 @Override
35 public final void exec() throws Reply501Exception, Reply504Exception {
36
37 if (!hasArg()) {
38
39 getSession().getDataConn().setMode(FtpArgumentCode.TransferMode.STREAM);
40 getSession().setReplyCode(ReplyCode.REPLY_200_COMMAND_OKAY,
41 "Mode set to " +
42 FtpArgumentCode.TransferMode.STREAM.name());
43 return;
44 }
45 final FtpArgumentCode.TransferMode transferMode;
46 try {
47 transferMode = FtpArgumentCode.getTransferMode(getArg().charAt(0));
48 } catch (final InvalidArgumentException e) {
49 throw new Reply501Exception("Unrecognize Mode: " + getArg());
50 }
51 if (transferMode == FtpArgumentCode.TransferMode.BLOCK) {
52 getSession().getDataConn().setMode(FtpArgumentCode.TransferMode.BLOCK);
53 } else if (transferMode == FtpArgumentCode.TransferMode.STREAM) {
54 getSession().getDataConn().setMode(FtpArgumentCode.TransferMode.STREAM);
55 } else if (transferMode == TransferMode.ZLIB) {
56 getSession().getDataConn().setMode(FtpArgumentCode.TransferMode.ZLIB);
57 } else {
58 throw new Reply504Exception(
59 "Mode not implemented: " + transferMode.name());
60 }
61 getSession().setReplyCode(ReplyCode.REPLY_200_COMMAND_OKAY,
62 "Mode set to " + transferMode.name());
63 }
64
65 }