2668 |
07 May 08 |
olle |
1 |
/* |
2668 |
07 May 08 |
olle |
$Id$ |
2668 |
07 May 08 |
olle |
3 |
|
2668 |
07 May 08 |
olle |
Copyright (C) 2008 Gregory Vincic, Olle Mansson |
2668 |
07 May 08 |
olle |
5 |
|
2668 |
07 May 08 |
olle |
This file is part of Proteios. |
2668 |
07 May 08 |
olle |
Available at http://www.proteios.org/ |
2668 |
07 May 08 |
olle |
8 |
|
2668 |
07 May 08 |
olle |
Proteios is free software; you can redistribute it and/or modify it |
2668 |
07 May 08 |
olle |
under the terms of the GNU General Public License as published by |
2668 |
07 May 08 |
olle |
the Free Software Foundation; either version 2 of the License, or |
2668 |
07 May 08 |
olle |
(at your option) any later version. |
2668 |
07 May 08 |
olle |
13 |
|
2668 |
07 May 08 |
olle |
Proteios is distributed in the hope that it will be useful, but |
2668 |
07 May 08 |
olle |
WITHOUT ANY WARRANTY; without even the implied warranty of |
2668 |
07 May 08 |
olle |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
2668 |
07 May 08 |
olle |
General Public License for more details. |
2668 |
07 May 08 |
olle |
18 |
|
2668 |
07 May 08 |
olle |
You should have received a copy of the GNU General Public License |
2668 |
07 May 08 |
olle |
along with this program; if not, write to the Free Software |
2668 |
07 May 08 |
olle |
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
2668 |
07 May 08 |
olle |
02111-1307, USA. |
2668 |
07 May 08 |
olle |
23 |
*/ |
2668 |
07 May 08 |
olle |
24 |
package se.lu.thep.coreftpd; |
2668 |
07 May 08 |
olle |
25 |
|
2668 |
07 May 08 |
olle |
26 |
import org.proteios.core.Application; |
2668 |
07 May 08 |
olle |
27 |
import org.proteios.core.Config; |
2668 |
07 May 08 |
olle |
28 |
|
2668 |
07 May 08 |
olle |
29 |
import java.io.IOException; |
2668 |
07 May 08 |
olle |
30 |
import java.net.*; |
2668 |
07 May 08 |
olle |
31 |
|
2668 |
07 May 08 |
olle |
32 |
import se.lu.thep.coreftpd.ftp_server.FTPServer; |
2668 |
07 May 08 |
olle |
33 |
import se.lu.thep.coreftpd.ftp_server.FTPSettings; |
2668 |
07 May 08 |
olle |
34 |
import se.lu.thep.coreftpd.webserver.ClassChooser; |
2668 |
07 May 08 |
olle |
35 |
|
2668 |
07 May 08 |
olle |
36 |
/** |
2668 |
07 May 08 |
olle |
* This class allows scripts to control the Xerver FTP Server for Proteios. |
2668 |
07 May 08 |
olle |
38 |
* |
2668 |
07 May 08 |
olle |
* @author Olle |
2668 |
07 May 08 |
olle |
* @version 2.0 |
2668 |
07 May 08 |
olle |
41 |
*/ |
2668 |
07 May 08 |
olle |
42 |
public class ProteiosFTPServerControl |
2668 |
07 May 08 |
olle |
43 |
{ |
2668 |
07 May 08 |
olle |
44 |
private static FTPSettings FTPS_settings = null; |
2668 |
07 May 08 |
olle |
45 |
|
2668 |
07 May 08 |
olle |
46 |
/** |
2668 |
07 May 08 |
olle |
* Logger used. Used to log specific events. |
2668 |
07 May 08 |
olle |
48 |
*/ |
2668 |
07 May 08 |
olle |
49 |
private static final org.apache.log4j.Logger log = org.apache.log4j.LogManager |
2668 |
07 May 08 |
olle |
50 |
.getLogger("se.lu.thep.coreftpd"); |
2668 |
07 May 08 |
olle |
51 |
|
2668 |
07 May 08 |
olle |
52 |
private static String tmpDirPath = null; |
2668 |
07 May 08 |
olle |
53 |
|
2668 |
07 May 08 |
olle |
54 |
private static Boolean b_start_server = null; |
2668 |
07 May 08 |
olle |
55 |
|
2668 |
07 May 08 |
olle |
56 |
private static int portNoUsed = -1; |
2668 |
07 May 08 |
olle |
57 |
|
2668 |
07 May 08 |
olle |
58 |
/** |
2668 |
07 May 08 |
olle |
* Control Xerver FTP Server for Proteios |
2668 |
07 May 08 |
olle |
60 |
*/ |
2668 |
07 May 08 |
olle |
61 |
public static void main(String[] s) |
2668 |
07 May 08 |
olle |
62 |
{ |
2668 |
07 May 08 |
olle |
63 |
/* |
2668 |
07 May 08 |
olle |
* Start Application |
2668 |
07 May 08 |
olle |
65 |
*/ |
2668 |
07 May 08 |
olle |
66 |
Config.setConfigFileName("/ftp.properties"); |
2668 |
07 May 08 |
olle |
67 |
Application.start(); |
2668 |
07 May 08 |
olle |
68 |
/* |
2668 |
07 May 08 |
olle |
* Start FTP server at specified port (as default port 21 is normally |
2668 |
07 May 08 |
olle |
* used). |
2668 |
07 May 08 |
olle |
71 |
*/ |
2668 |
07 May 08 |
olle |
72 |
int portNo = -1; |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): s.length = " + s.length); |
2668 |
07 May 08 |
olle |
74 |
log.debug("s.length = " + s.length); |
2668 |
07 May 08 |
olle |
// Parse argument array |
2668 |
07 May 08 |
olle |
76 |
if (s.length < 2) |
2668 |
07 May 08 |
olle |
77 |
{ |
2668 |
07 May 08 |
olle |
78 |
printUsageInfo(); |
2668 |
07 May 08 |
olle |
79 |
} |
2668 |
07 May 08 |
olle |
80 |
else |
2668 |
07 May 08 |
olle |
81 |
{ |
2668 |
07 May 08 |
olle |
82 |
for (int i = 0; i < s.length; i++) |
2668 |
07 May 08 |
olle |
83 |
{ |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): s[" + i + "] = \"" + s[i] + "\""); |
2668 |
07 May 08 |
olle |
85 |
log.debug("s[" + i + "] = \"" + s[i] + "\""); |
2668 |
07 May 08 |
olle |
86 |
if (s[i].startsWith("-t")) |
2668 |
07 May 08 |
olle |
87 |
{ |
2668 |
07 May 08 |
olle |
// Path to directory for temporary files |
2668 |
07 May 08 |
olle |
89 |
if (s[i].length() > 2) |
2668 |
07 May 08 |
olle |
90 |
{ |
2668 |
07 May 08 |
olle |
91 |
tmpDirPath = s[0].substring(2); |
2668 |
07 May 08 |
olle |
92 |
} |
2668 |
07 May 08 |
olle |
93 |
} |
2668 |
07 May 08 |
olle |
94 |
else if (s[i].startsWith("-p")) |
2668 |
07 May 08 |
olle |
95 |
{ |
2668 |
07 May 08 |
olle |
96 |
if (s[i].length() > 2) |
2668 |
07 May 08 |
olle |
97 |
{ |
2668 |
07 May 08 |
olle |
98 |
try |
2668 |
07 May 08 |
olle |
99 |
{ |
2668 |
07 May 08 |
olle |
100 |
portNo = Integer.parseInt(s[i].substring(2)); |
2668 |
07 May 08 |
olle |
101 |
} |
2668 |
07 May 08 |
olle |
102 |
catch (Exception e) |
2668 |
07 May 08 |
olle |
103 |
{ |
2668 |
07 May 08 |
olle |
104 |
System.out.println("Port number argument \"" + s[i].substring(2) + "\" could not be parsed to an integer"); |
2668 |
07 May 08 |
olle |
105 |
log.debug("Port number argument \"" + s[i].substring(2) + "\" could not be parsed to an integer"); |
2668 |
07 May 08 |
olle |
106 |
printUsageInfo(); |
2668 |
07 May 08 |
olle |
107 |
} |
2668 |
07 May 08 |
olle |
108 |
} |
2668 |
07 May 08 |
olle |
109 |
} |
2668 |
07 May 08 |
olle |
110 |
else if (s[i].equals("-start")) |
2668 |
07 May 08 |
olle |
111 |
{ |
2668 |
07 May 08 |
olle |
112 |
if (b_start_server == null) |
2668 |
07 May 08 |
olle |
113 |
{ |
2668 |
07 May 08 |
olle |
114 |
b_start_server = true; |
2668 |
07 May 08 |
olle |
115 |
} |
2668 |
07 May 08 |
olle |
116 |
else |
2668 |
07 May 08 |
olle |
117 |
{ |
2668 |
07 May 08 |
olle |
118 |
System.out.println("Only one argument \"-start\" or \"-stop\" allowed"); |
2668 |
07 May 08 |
olle |
119 |
printUsageInfo(); |
2668 |
07 May 08 |
olle |
120 |
} |
2668 |
07 May 08 |
olle |
121 |
} |
2668 |
07 May 08 |
olle |
122 |
else if (s[i].equals("-stop")) |
2668 |
07 May 08 |
olle |
123 |
{ |
2668 |
07 May 08 |
olle |
124 |
if (b_start_server == null) |
2668 |
07 May 08 |
olle |
125 |
{ |
2668 |
07 May 08 |
olle |
126 |
b_start_server = false; |
2668 |
07 May 08 |
olle |
127 |
} |
2668 |
07 May 08 |
olle |
128 |
else |
2668 |
07 May 08 |
olle |
129 |
{ |
2668 |
07 May 08 |
olle |
130 |
System.out.println("Only one argument \"-start\" or \"-stop\" allowed"); |
2668 |
07 May 08 |
olle |
131 |
printUsageInfo(); |
2668 |
07 May 08 |
olle |
132 |
} |
2668 |
07 May 08 |
olle |
133 |
} |
2668 |
07 May 08 |
olle |
134 |
} |
2668 |
07 May 08 |
olle |
135 |
} |
2668 |
07 May 08 |
olle |
// Check input |
2668 |
07 May 08 |
olle |
137 |
if (tmpDirPath == null || tmpDirPath.equals("")) |
2668 |
07 May 08 |
olle |
138 |
{ |
2668 |
07 May 08 |
olle |
139 |
System.out.println("Missing argument -tXXX (XXX = temp dir path)"); |
2668 |
07 May 08 |
olle |
140 |
printUsageInfo(); |
2668 |
07 May 08 |
olle |
141 |
} |
2668 |
07 May 08 |
olle |
142 |
if (b_start_server == null) |
2668 |
07 May 08 |
olle |
143 |
{ |
2668 |
07 May 08 |
olle |
144 |
System.out.println("Missing argument \"-start\" or \"-stop\""); |
2668 |
07 May 08 |
olle |
145 |
printUsageInfo(); |
2668 |
07 May 08 |
olle |
146 |
} |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): b_start_server = " + b_start_server); |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): portNo = " + portNo); |
2668 |
07 May 08 |
olle |
149 |
log.debug("b_start_server = " + b_start_server); |
2668 |
07 May 08 |
olle |
150 |
log.debug("portNo = " + portNo); |
2668 |
07 May 08 |
olle |
151 |
/* |
2668 |
07 May 08 |
olle |
* Get FTP settings |
2668 |
07 May 08 |
olle |
153 |
*/ |
2668 |
07 May 08 |
olle |
154 |
try |
2668 |
07 May 08 |
olle |
155 |
{ |
2668 |
07 May 08 |
olle |
156 |
FTPS_settings = FTPServer.getFTPSettings(); |
2668 |
07 May 08 |
olle |
157 |
} |
2668 |
07 May 08 |
olle |
158 |
catch (Exception e) |
2668 |
07 May 08 |
olle |
159 |
{ |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): Exception when getting FTP settings: " + e); |
2668 |
07 May 08 |
olle |
161 |
log.debug("Exception when getting FTP settings: " + e); |
2668 |
07 May 08 |
olle |
162 |
} |
2668 |
07 May 08 |
olle |
163 |
int defaultPortNo = FTPSettings.i_portNr; |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): defaultPortNo = " + defaultPortNo); |
2668 |
07 May 08 |
olle |
165 |
log.debug("defaultPortNo = " + defaultPortNo); |
2668 |
07 May 08 |
olle |
166 |
if (portNo > 0) |
2668 |
07 May 08 |
olle |
167 |
{ |
2668 |
07 May 08 |
olle |
168 |
portNoUsed = portNo; |
2668 |
07 May 08 |
olle |
169 |
} |
2668 |
07 May 08 |
olle |
170 |
else |
2668 |
07 May 08 |
olle |
171 |
{ |
2668 |
07 May 08 |
olle |
172 |
portNoUsed = defaultPortNo; |
2668 |
07 May 08 |
olle |
173 |
} |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): portNoUsed = " + portNoUsed); |
2668 |
07 May 08 |
olle |
175 |
log.debug("portNoUsed = " + portNoUsed); |
2668 |
07 May 08 |
olle |
176 |
if (b_start_server != null && b_start_server) |
2668 |
07 May 08 |
olle |
177 |
{ |
2668 |
07 May 08 |
olle |
// Start FTP server at port 'portNoUsed' |
2668 |
07 May 08 |
olle |
179 |
String[] argStrings; |
2668 |
07 May 08 |
olle |
180 |
if (portNo < 1) |
2668 |
07 May 08 |
olle |
181 |
{ |
2668 |
07 May 08 |
olle |
182 |
argStrings = new String[2]; |
2668 |
07 May 08 |
olle |
183 |
argStrings[0] = "FTPServer"; |
2668 |
07 May 08 |
olle |
184 |
argStrings[1] = "-t" + tmpDirPath; |
2668 |
07 May 08 |
olle |
185 |
} |
2668 |
07 May 08 |
olle |
186 |
else |
2668 |
07 May 08 |
olle |
187 |
{ |
2668 |
07 May 08 |
olle |
188 |
argStrings = new String[3]; |
2668 |
07 May 08 |
olle |
189 |
argStrings[0] = "FTPServer"; |
2668 |
07 May 08 |
olle |
190 |
argStrings[1] = "-t" + tmpDirPath; |
2668 |
07 May 08 |
olle |
191 |
argStrings[2] = "-p" + portNo; |
2668 |
07 May 08 |
olle |
192 |
} |
2668 |
07 May 08 |
olle |
193 |
log |
2668 |
07 May 08 |
olle |
194 |
.debug("--------------------------------------------------------------------"); |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): argStrings.length = " + argStrings.length); |
2668 |
07 May 08 |
olle |
196 |
log.debug("argStrings.length = " + argStrings.length); |
2668 |
07 May 08 |
olle |
197 |
for (int i = 0; i < argStrings.length; i++) |
2668 |
07 May 08 |
olle |
198 |
{ |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): argStrings[" + i + "] = \"" + argStrings[i] + "\""); |
2668 |
07 May 08 |
olle |
200 |
log.debug("argStrings[" + i + "] = \"" + argStrings[i] + "\""); |
2668 |
07 May 08 |
olle |
201 |
} |
2668 |
07 May 08 |
olle |
202 |
ClassChooser.main(argStrings); |
2668 |
07 May 08 |
olle |
203 |
log |
2668 |
07 May 08 |
olle |
204 |
.debug("--------------------------------------------------------------------"); |
2668 |
07 May 08 |
olle |
205 |
} |
2668 |
07 May 08 |
olle |
206 |
else |
2668 |
07 May 08 |
olle |
207 |
{ |
2668 |
07 May 08 |
olle |
// Stop FTP server at port 'portNoUsed' |
2668 |
07 May 08 |
olle |
209 |
deleteLockFile(); |
2668 |
07 May 08 |
olle |
// Connect to FTP server at port 'portNoUsed' to trigger stop of server |
2668 |
07 May 08 |
olle |
211 |
Socket socket = connectToSocket("localhost", portNoUsed); |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): socket = " + socket); |
2668 |
07 May 08 |
olle |
213 |
log.debug("socket = " + socket); |
2668 |
07 May 08 |
olle |
214 |
if (socket != null) |
2668 |
07 May 08 |
olle |
215 |
{ |
2668 |
07 May 08 |
olle |
216 |
try |
2668 |
07 May 08 |
olle |
217 |
{ |
2668 |
07 May 08 |
olle |
218 |
socket.close(); |
2668 |
07 May 08 |
olle |
219 |
} |
2668 |
07 May 08 |
olle |
220 |
catch(IOException e) |
2668 |
07 May 08 |
olle |
221 |
{ |
2668 |
07 May 08 |
olle |
222 |
System.out.println("ProteiosFTPServerControl::main(): Exception when trying to close socket: " + e); |
2668 |
07 May 08 |
olle |
223 |
log.warn("Exception when trying to close socket: " + e); |
2668 |
07 May 08 |
olle |
224 |
} |
2668 |
07 May 08 |
olle |
225 |
} |
2668 |
07 May 08 |
olle |
226 |
socket = null; |
2668 |
07 May 08 |
olle |
227 |
} |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::main(): end"); |
2668 |
07 May 08 |
olle |
229 |
log.debug("end"); |
2668 |
07 May 08 |
olle |
230 |
} |
2668 |
07 May 08 |
olle |
231 |
|
2668 |
07 May 08 |
olle |
232 |
|
2668 |
07 May 08 |
olle |
233 |
private static void printUsageInfo() |
2668 |
07 May 08 |
olle |
234 |
{ |
2668 |
07 May 08 |
olle |
235 |
System.out.println("ProteiosFTPServerControl -tXXX (XXX = temp dir path) -start|-stop [-pXX = Start FTP server on port XX]"); |
2668 |
07 May 08 |
olle |
236 |
System.exit(0); |
2668 |
07 May 08 |
olle |
237 |
} |
2668 |
07 May 08 |
olle |
238 |
|
2668 |
07 May 08 |
olle |
239 |
|
2668 |
07 May 08 |
olle |
240 |
/** |
2668 |
07 May 08 |
olle |
* Returns the name of the lock file, |
2668 |
07 May 08 |
olle |
* concatenated from the lockfile base name, |
2668 |
07 May 08 |
olle |
* an underscore chararcter '_', the |
2668 |
07 May 08 |
olle |
* number of the port used by the FTP server, |
2668 |
07 May 08 |
olle |
* and file extension ".lck". |
2668 |
07 May 08 |
olle |
246 |
* |
2668 |
07 May 08 |
olle |
* Example: |
2668 |
07 May 08 |
olle |
* Lock file basename = "proteios_ftp" |
2668 |
07 May 08 |
olle |
* FTP port used: 8021 |
2668 |
07 May 08 |
olle |
* Lockfile name: "proteios_ftp_8021.lck" |
2668 |
07 May 08 |
olle |
251 |
* |
2668 |
07 May 08 |
olle |
* @return String The name of the lock file |
2668 |
07 May 08 |
olle |
253 |
*/ |
2668 |
07 May 08 |
olle |
254 |
public static String fetchLockFileName() |
2668 |
07 May 08 |
olle |
255 |
{ |
2668 |
07 May 08 |
olle |
256 |
String lockFileName = new String(FTPServer.LOCK_FILE_BASENAME + "_" + portNoUsed + ".lck"); |
2668 |
07 May 08 |
olle |
257 |
return lockFileName; |
2668 |
07 May 08 |
olle |
258 |
} |
2668 |
07 May 08 |
olle |
259 |
|
2668 |
07 May 08 |
olle |
260 |
|
2668 |
07 May 08 |
olle |
261 |
private static void deleteLockFile() |
2668 |
07 May 08 |
olle |
262 |
{ |
2668 |
07 May 08 |
olle |
263 |
String lockFilePath = new String(tmpDirPath + java.io.File.separator + fetchLockFileName()); |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::deleteLockFile(): lockFilePath = \"" + lockFilePath + "\""); |
2668 |
07 May 08 |
olle |
265 |
log.debug("lockFilePath = \"" + lockFilePath + "\""); |
2668 |
07 May 08 |
olle |
266 |
java.io.File lockFile = new java.io.File(lockFilePath); |
2668 |
07 May 08 |
olle |
267 |
boolean fileDeleted = false; |
2668 |
07 May 08 |
olle |
268 |
try |
2668 |
07 May 08 |
olle |
269 |
{ |
2668 |
07 May 08 |
olle |
270 |
fileDeleted = lockFile.delete(); |
2668 |
07 May 08 |
olle |
271 |
} |
2668 |
07 May 08 |
olle |
272 |
catch (Exception e) |
2668 |
07 May 08 |
olle |
273 |
{ |
2668 |
07 May 08 |
olle |
//System.out.println("Couldn't delete FTP server lock file \"" + lockFilePath + "\":" + e); |
2668 |
07 May 08 |
olle |
275 |
log.debug("Couldn't delete FTP server lock file \"" + lockFilePath + "\":" + e); |
2668 |
07 May 08 |
olle |
276 |
} |
2668 |
07 May 08 |
olle |
277 |
} |
2668 |
07 May 08 |
olle |
278 |
|
2668 |
07 May 08 |
olle |
279 |
|
2668 |
07 May 08 |
olle |
280 |
/** |
2668 |
07 May 08 |
olle |
* Connects to the given host on the given port. |
2668 |
07 May 08 |
olle |
282 |
* |
2668 |
07 May 08 |
olle |
* @param host String Name of host |
2668 |
07 May 08 |
olle |
* @param port int Port number |
2668 |
07 May 08 |
olle |
* @return Socket The socket |
2668 |
07 May 08 |
olle |
286 |
*/ |
2668 |
07 May 08 |
olle |
287 |
public static Socket connectToSocket(String host, int port) |
2668 |
07 May 08 |
olle |
288 |
{ |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::connectToSocket(): host = \"" + host + "\" port = " + port); |
2668 |
07 May 08 |
olle |
290 |
log.debug("host = \"" + host + "\" port = " + port); |
2668 |
07 May 08 |
olle |
291 |
Socket socket = null; |
2668 |
07 May 08 |
olle |
292 |
try |
2668 |
07 May 08 |
olle |
293 |
{ |
2668 |
07 May 08 |
olle |
294 |
socket = new Socket(host, port); |
2668 |
07 May 08 |
olle |
295 |
} |
2668 |
07 May 08 |
olle |
296 |
catch (Exception e) |
2668 |
07 May 08 |
olle |
297 |
{ |
2668 |
07 May 08 |
olle |
//System.out.println("ProteiosFTPServerControl::connectToSocket(): Exception when trying to connect to host = \"" + host + "\" port = " + port + ": " + e); |
2668 |
07 May 08 |
olle |
299 |
log.debug("Exception when trying to connect to host = \"" + host + "\" port = " + port + ": " + e); |
2668 |
07 May 08 |
olle |
300 |
} |
2668 |
07 May 08 |
olle |
301 |
return socket; |
2668 |
07 May 08 |
olle |
302 |
} |
2668 |
07 May 08 |
olle |
303 |
} |