1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.waarp.ftp.filesystembased;
19
20 import org.waarp.common.command.exception.CommandAbstractException;
21 import org.waarp.common.command.exception.Reply502Exception;
22 import org.waarp.common.file.filesystembased.FilesystemBasedRestartImpl;
23 import org.waarp.ftp.core.command.FtpArgumentCode.TransferMode;
24 import org.waarp.ftp.core.command.FtpArgumentCode.TransferStructure;
25 import org.waarp.ftp.core.command.FtpArgumentCode.TransferType;
26 import org.waarp.ftp.core.data.FtpDataAsyncConn;
27 import org.waarp.ftp.core.session.FtpSession;
28
29
30
31
32
33
34
35
36 public class FilesystemBasedFtpRestart extends FilesystemBasedRestartImpl {
37
38
39
40 public FilesystemBasedFtpRestart(FtpSession session) {
41 super(session);
42 }
43
44 @Override
45 public boolean restartMarker(String marker) throws CommandAbstractException {
46 FtpDataAsyncConn dataConn = ((FtpSession) getSession()).getDataConn();
47 if (dataConn.getStructure() == TransferStructure.FILE &&
48 dataConn.getMode() == TransferMode.STREAM &&
49 dataConn.getType() != TransferType.LENGTH) {
50 long newposition = 0;
51 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 (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 }