/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.client.ui.io; import java.io.IOException; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; // import sun.net.TransferProtocolClient; // import sun.net.ftp.FtpClient; /** * <p> * This class extends the Apache Commons {@link Net.FtpClient} class to ease future modification. * </p> * <p> * This class creates its own connection to the specified host and does not try to reuse an existing connection. This * has significant downsides, not the least of which is the need to provide login information (username and password), * but also the server seeing multiple incoming connections might think that some kind of DOS attack is being attempted * and lock the account! * </p> * <p> * Currently the only added command is <code>MKDIR</code>. This command may be implemented differently on different * servers (<code>MKDIR</code>, <code>MKD</code>, <code>XMKD</code>, etc) so the first time the application tries to * create a directory for a given host we loop through the possibilities that we know of until one works. That command * string is then saved for later use. * </p> * * @author crash * */ public class FTPCommand extends FTPClient { private final String host; public FTPCommand(String h) throws IOException { host = h; FTPClientConfig config = new FTPClientConfig(); // Nothing to configure just yet but maybe in the future... this.configure(config); this.connect(host); } public int mkdir(String dir) { int result = 0; try { mkd(dir); result = getReplyCode(); } catch (IOException e) { result = getReplyCode(); if (result != 550) { // "Directory already exists" is not necessarily an error. For now just print a // stack trace and we'll decide later if this is a problem... e.printStackTrace(); } } return result; } public int remove(String filename) { int result = 0; try { dele(filename); result = getReplyCode(); } catch (IOException e) { result = getReplyCode(); if (result != 550) { // "File doesn't exist" is not an error, but we should report it for safety's sake. e.printStackTrace(); } } return result; } public boolean closeServer() throws IOException { boolean result = this.logout(); this.disconnect(); return result; } }