1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.ftp.filesystembased;
21
22 import org.waarp.common.command.exception.CommandAbstractException;
23 import org.waarp.common.command.exception.Reply502Exception;
24 import org.waarp.common.file.filesystembased.FilesystemBasedRestartImpl;
25 import org.waarp.ftp.core.command.FtpArgumentCode.TransferMode;
26 import org.waarp.ftp.core.command.FtpArgumentCode.TransferStructure;
27 import org.waarp.ftp.core.command.FtpArgumentCode.TransferType;
28 import org.waarp.ftp.core.data.FtpDataAsyncConn;
29 import org.waarp.ftp.core.session.FtpSession;
30
31
32
33
34
35 public class FilesystemBasedFtpRestart extends FilesystemBasedRestartImpl {
36
37
38
39 public FilesystemBasedFtpRestart(final FtpSession session) {
40 super(session);
41 }
42
43 @Override
44 public final boolean restartMarker(final String marker)
45 throws CommandAbstractException {
46 final FtpDataAsyncConn dataConn = ((FtpSession) getSession()).getDataConn();
47 if (dataConn.getStructure() == TransferStructure.FILE &&
48 dataConn.getMode() == TransferMode.STREAM &&
49 dataConn.getType() != TransferType.LENGTH) {
50 final long newposition;
51 final String[] args = marker.split(" ");
52 try {
53 newposition = Long.parseLong(args[0]);
54 if (args.length > 1) {
55 limit = Integer.parseInt(args[1]);
56 }
57 } catch (final NumberFormatException e) {
58 throw new Reply502Exception(
59 "Marker must be length in byte as a position");
60 }
61 position = newposition;
62 setSet(true);
63 return true;
64 }
65 throw new Reply502Exception(
66 "Marker not implemented for such Mode, Type and Structure");
67 }
68 }