KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > coldcore > coloradoftp > command > impl > ftp > PortCommand


1 /**
2  * Command PORT.
3  * See FTP spec for details on the command.
4  */

5 package com.coldcore.coloradoftp.command.impl.ftp;
6
7 import com.coldcore.coloradoftp.command.Reply;
8 import com.coldcore.coloradoftp.command.impl.AbstractCommand;
9 import com.coldcore.coloradoftp.connection.DataConnectionInitiator;
10 import com.coldcore.coloradoftp.session.DataOpenerType;
11 import com.coldcore.coloradoftp.session.Session;
12 import com.coldcore.coloradoftp.session.SessionAttributeName;
13 import org.apache.log4j.Logger;
14
15 import java.util.StringTokenizer JavaDoc;
16
17 public class PortCommand extends AbstractCommand {
18
19   private static Logger log = Logger.getLogger(PortCommand.class);
20
21
22   public Reply execute() {
23     Reply reply = getReply();
24     if (!testLogin()) return reply;
25
26     Session session = getConnection().getSession();
27     session.removeAttribute(SessionAttributeName.DATA_OPENER_TYPE);
28
29     //Get host address and port numer client listens to
30
try {
31       StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(getParameter(), ",");
32       String JavaDoc ip = Integer.parseInt(st.nextToken())+"."
33                 + Integer.parseInt(st.nextToken())+"."
34                 + Integer.parseInt(st.nextToken())+"."
35                 + Integer.parseInt(st.nextToken());
36       int port = Integer.parseInt(st.nextToken())*256+Integer.parseInt(st.nextToken());
37
38       DataConnectionInitiator initiator = controlConnection.getDataConnectionInitiator();
39       initiator.setIp(ip);
40       initiator.setPort(port);
41       log.debug("Data connection will connect to "+ip+":"+port);
42
43     } catch (Throwable JavaDoc e) {
44       reply.setCode("501");
45       reply.setText("Send correct IP and port number.");
46       return reply;
47     }
48
49     //So others will know how to prepare for a new data connection
50
session.setAttribute(SessionAttributeName.DATA_OPENER_TYPE, DataOpenerType.PORT);
51
52     reply.setCode("200");
53     reply.setText("PORT command successful.");
54     return reply;
55   }
56 }
57
Popular Tags