KickJava   Java API By Example, From Geeks To Geeks.

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


1 /**
2  * Command PASV.
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.DataPortListener;
10 import com.coldcore.coloradoftp.connection.DataPortListenerSet;
11 import com.coldcore.coloradoftp.factory.ObjectFactory;
12 import com.coldcore.coloradoftp.factory.ObjectName;
13 import com.coldcore.coloradoftp.session.DataOpenerType;
14 import com.coldcore.coloradoftp.session.Session;
15 import com.coldcore.coloradoftp.session.SessionAttributeName;
16 import org.apache.log4j.Logger;
17
18 import java.util.Set JavaDoc;
19
20 public class PasvCommand extends AbstractCommand {
21
22   private static Logger log = Logger.getLogger(PasvCommand.class);
23   protected String JavaDoc ip;
24
25
26   /** Get server IP
27    * @return Server IP address
28    */

29   public String JavaDoc getIp() {
30     return ip;
31   }
32
33
34   /** Set server IP
35    * @param ip Server IP address
36    */

37   public void setIp(String JavaDoc ip) {
38     this.ip = ip;
39   }
40
41
42   public Reply execute() {
43     Reply reply = getReply();
44     if (!testLogin()) return reply;
45
46     Session session = getConnection().getSession();
47     session.removeAttribute(SessionAttributeName.DATA_OPENER_TYPE);
48
49     DataPortListenerSet listeners = (DataPortListenerSet) ObjectFactory.getObject(ObjectName.DATA_PORT_LISTENER_SET);
50     if (listeners.boundNumber() == 0 || ip == null || ip.length() == 0) {
51       log.warn("No IP address, cannot accept data connections");
52       reply.setCode("425");
53       reply.setText("Can't open data connection.");
54       return reply;
55     }
56
57     int port = 0;
58     Set<DataPortListener> set = listeners.list();
59     for (DataPortListener listener : set) {
60       if (listener.addConnection(controlConnection)) {
61         port = listener.getPort();
62         break;
63       }
64     }
65
66     if (port == 0) {
67       log.warn("No free data port listeners left");
68       reply.setCode("425");
69       reply.setText("Failed to enter passive mode, try again.");
70       return reply;
71     }
72
73     log.debug("Data connection will be accepted on "+ip+":"+port);
74     int i = port/256;
75     String JavaDoc pstr = i+","+(port-i*256);
76     String JavaDoc ipcs = ip.replaceAll("\\.", ",");
77
78     //So others will know how to prepare for a new data connection
79
session.setAttribute(SessionAttributeName.DATA_OPENER_TYPE, DataOpenerType.PASV);
80
81     reply.setCode("227");
82     reply.setText("Entering Passive Mode ("+ipcs+","+pstr+").");
83     return reply;
84   }
85 }
86
Popular Tags