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