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.control;
21  
22  import io.netty.channel.Channel;
23  import org.waarp.common.command.exception.CommandAbstractException;
24  import org.waarp.common.file.Restart;
25  import org.waarp.common.file.filesystembased.FilesystemBasedOptsMLSxImpl;
26  import org.waarp.ftp.core.command.AbstractCommand;
27  import org.waarp.ftp.core.command.FtpCommandCode;
28  import org.waarp.ftp.core.data.FtpTransfer;
29  import org.waarp.ftp.core.file.FtpAuth;
30  import org.waarp.ftp.core.file.FtpDir;
31  import org.waarp.ftp.core.session.FtpSession;
32  
33  
34  
35  
36  
37  public abstract class BusinessHandler {
38    private static final String FILENAME = " \"filename\"";
39    private static final String[] PROPERTIES_0_LENGTH = new String[0];
40    
41  
42  
43    private NetworkHandler networkHandler;
44  
45    
46  
47  
48    private FtpSession session;
49  
50    
51  
52  
53    protected BusinessHandler() {
54      
55    }
56  
57    
58  
59  
60  
61  
62    public final void setNetworkHandler(final NetworkHandler networkHandler) {
63      this.networkHandler = networkHandler;
64      session = this.networkHandler.getFtpSession();
65    }
66  
67    
68  
69  
70    public final NetworkHandler getNetworkHandler() {
71      return networkHandler;
72    }
73  
74    
75  
76    
77  
78  
79    public final FtpSession getFtpSession() {
80      return session;
81    }
82  
83    
84  
85  
86  
87  
88    public abstract FtpAuth getBusinessNewAuth();
89  
90    
91  
92  
93  
94  
95    public abstract FtpDir getBusinessNewDir();
96  
97    
98  
99  
100 
101 
102   public abstract Restart getBusinessNewRestart();
103 
104   
105 
106 
107 
108 
109   public abstract String getHelpMessage(String arg);
110 
111   
112 
113 
114   public abstract String getFeatMessage();
115 
116   protected final String getSslFeatMessage() {
117     return "AUTH TLS\nAUTH SSL\nCCC\nPROT P\nPROT C";
118   }
119 
120   
121 
122 
123 
124 
125   protected final String getDefaultFeatMessage() {
126     final StringBuilder builder = new StringBuilder();
127     builder.append(FtpCommandCode.MODE.name()).append(" Z\n")
128            .append(FtpCommandCode.MDTM.name()).append('\n')
129            .append(FtpCommandCode.MLSD.name())
130            .append(getFtpSession().getDir().getOptsMLSx().getFeat())
131            .append('\n').append(FtpCommandCode.MLST.name())
132            .append(getFtpSession().getDir().getOptsMLSx().getFeat())
133            .append('\n').append(FtpCommandCode.SIZE.name()).append('\n')
134            .append(FtpCommandCode.XCUP.name()).append('\n')
135            .append(FtpCommandCode.XCWD.name()).append('\n')
136            .append(FtpCommandCode.XMKD.name()).append('\n')
137            .append(FtpCommandCode.XPWD.name()).append('\n')
138            .append(FtpCommandCode.XRMD.name()).append('\n')
139            .append(FtpCommandCode.PASV.name()).append('\n')
140            .append(FtpCommandCode.ALLO.name()).append('\n')
141            .append(FtpCommandCode.EPRT.name()).append('\n')
142            .append(FtpCommandCode.EPSV.name()).append('\n')
143            .append(FtpCommandCode.XCRC.name()).append(' ').append(FILENAME)
144            .append('\n').append(FtpCommandCode.XMD5.name()).append(' ')
145            .append(FILENAME).append('\n').append(FtpCommandCode.XSHA1.name())
146            .append(' ').append(FILENAME).append('\n')
147            .append(FtpCommandCode.XDIGEST.name()).append(' ').append(
148                "Digest_algo_among(CRC32,ADLER32,MD5,MD2,SHA-1,SHA-256,SHA-384,SHA-512)")
149            .append(' ').append(FILENAME).append('\n')
150            .append(FtpCommandCode.SITE.name()).append(' ')
151            .append(FtpCommandCode.XCRC.name())
152            
153            .append('\n').append(FtpCommandCode.SITE.name()).append(' ')
154            .append(FtpCommandCode.XMD5.name())
155            
156            .append('\n').append(FtpCommandCode.SITE.name()).append(' ')
157            .append(FtpCommandCode.XSHA1.name())
158            
159            .append('\n').append(FtpCommandCode.SITE.name()).append(' ')
160            .append(FtpCommandCode.XDIGEST.name()).append(' ').append(
161                "Digest_algo_among(CRC32,ADLER32,MD5,MD2,SHA-1,SHA-256,SHA-384,SHA-512)")
162            
163            .append('\n').append("LAN EN*").append('\n')
164            .append(FtpCommandCode.REST.name()).append(" STREAM\n");
165     return builder.toString();
166   }
167 
168   
169 
170 
171 
172 
173 
174 
175   public abstract String getOptsMessage(String[] args)
176       throws CommandAbstractException;
177 
178   
179 
180 
181 
182 
183 
184 
185 
186 
187 
188   public abstract AbstractCommand getSpecializedSiteCommand(FtpSession session,
189                                                             String line);
190 
191   
192 
193 
194 
195 
196 
197   protected final String getMLSxOptsMessage(final String[] args) {
198     String[] properties = PROPERTIES_0_LENGTH;
199     if (args.length >= 2) {
200       properties = args[1].split(";");
201     }
202 
203     final FilesystemBasedOptsMLSxImpl optsMLSx =
204         (FilesystemBasedOptsMLSxImpl) getFtpSession().getDir().getOptsMLSx();
205     optsMLSx.setOptsModify((byte) 0);
206     optsMLSx.setOptsPerm((byte) 0);
207     optsMLSx.setOptsSize((byte) 0);
208     optsMLSx.setOptsType((byte) 0);
209     for (final String propertie : properties) {
210       if ("modify".equalsIgnoreCase(propertie)) {
211         optsMLSx.setOptsModify((byte) 1);
212       } else if ("perm".equalsIgnoreCase(propertie)) {
213         optsMLSx.setOptsPerm((byte) 1);
214       } else if ("size".equalsIgnoreCase(propertie)) {
215         optsMLSx.setOptsSize((byte) 1);
216       } else if ("type".equalsIgnoreCase(propertie)) {
217         optsMLSx.setOptsType((byte) 1);
218       }
219     }
220     return args[0] + ' ' + FtpCommandCode.OPTS.name() + optsMLSx.getFeat();
221   }
222 
223   
224 
225 
226 
227 
228 
229 
230 
231 
232   public abstract void executeChannelClosed();
233 
234   
235 
236 
237   protected abstract void cleanSession();
238 
239   
240 
241 
242   public final void clear() {
243     cleanSession();
244   }
245 
246   
247 
248 
249 
250 
251 
252 
253   public abstract void executeChannelConnected(Channel channel);
254 
255   
256 
257 
258 
259 
260 
261 
262   public abstract void exceptionLocalCaught(Throwable e);
263 
264   
265 
266 
267 
268 
269 
270 
271   public abstract void beforeRunCommand() throws CommandAbstractException;
272 
273   
274 
275 
276 
277 
278 
279 
280 
281 
282 
283   public abstract void afterRunCommandOk() throws CommandAbstractException;
284 
285   
286 
287 
288 
289 
290 
291 
292 
293 
294   public abstract void afterRunCommandKo(CommandAbstractException e);
295 
296   
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307   public abstract void afterTransferDoneBeforeAnswer(FtpTransfer transfer)
308       throws CommandAbstractException;
309 }