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.service;
21
22 import org.waarp.common.command.exception.CommandAbstractException;
23 import org.waarp.common.command.exception.Reply450Exception;
24 import org.waarp.common.command.exception.Reply501Exception;
25 import org.waarp.common.command.exception.Reply550Exception;
26 import org.waarp.common.logging.WaarpLogger;
27 import org.waarp.common.logging.WaarpLoggerFactory;
28 import org.waarp.ftp.core.command.AbstractCommand;
29 import org.waarp.ftp.core.file.FtpFile;
30
31
32
33
34 public class RETR extends AbstractCommand {
35 private static final WaarpLogger logger =
36 WaarpLoggerFactory.getInstance(RETR.class);
37
38 @Override
39 public final void exec() throws CommandAbstractException {
40 if (!hasArg()) {
41 invalidCurrentCommand();
42 throw new Reply501Exception("Need a pathname as argument");
43 }
44 final String filename = getArg();
45 final FtpFile file = getSession().getDir().setFile(filename, false);
46 if (file != null) {
47 if (file.retrieve()) {
48 getSession().openDataConnection();
49 getSession().getDataConn().getFtpTransferControl()
50 .setNewFtpTransfer(getCode(), file);
51 return;
52 }
53 logger.info("File not accessible: {}", file);
54
55 throw new Reply450Exception("Retrieve operation not allowed");
56 }
57 logger.info("Filename not allowed: {}", filename);
58
59 throw new Reply550Exception("Filename not allowed");
60 }
61
62 }