network.FtpLogs.java Source code

Java tutorial

Introduction

Here is the source code for network.FtpLogs.java

Source

package network;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import telemetry.FramePart;
import common.Config;
import common.Log;

/**
 * 
 * FOX 1 Telemetry Decoder
 * @author chris.e.thompson g0kla/ac2cz
 *
 * Copyright (C) 2015 amsat.org
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
public class FtpLogs implements Runnable {
    boolean running = false;
    String server = "n0jy.org";
    int port = 21;
    String user = "g0kla";
    String pass = "argyl3sw3@t3R";

    FTPClient ftpClient = new FTPClient();

    public void stopProcessing() {
        running = false;
    }

    @Override
    public void run() {
        running = true;

        while (running) {
            try {
                Thread.sleep(1000 * 60 * Config.ftpPeriod); // refresh data periodically
            } catch (InterruptedException e) {
                Log.println("ERROR: ftpLogs thread interrupted");
                e.printStackTrace(Log.getWriter());
            }

            try {
                if (Config.ftpFiles)
                    sendFiles();
            } catch (SocketException e) {
                Log.println("ERROR: ftpLogs socket exception");
                e.printStackTrace(Log.getWriter());
            } catch (IOException e) {
                Log.println("ERROR: ftpLogs IO Exception");
                e.printStackTrace(Log.getWriter());
            }
        }

    }

    private void sendFiles() throws SocketException, IOException {
        ftpClient.connect(server, port);
        Log.println("Connected to " + server + ".");
        Log.print(ftpClient.getReplyString());
        int reply = ftpClient.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftpClient.disconnect();
            Log.println("FTP server refused connection.");
        } else {
            ftpClient.login(user, pass);
            Log.println("Logging in..");
            Log.print(ftpClient.getReplyString());

            ftpClient.enterLocalPassiveMode();
            ftpClient.setControlKeepAliveTimeout(300); // set timeout to 5 minutes.  Send NOOPs to keep control channel alive

            ftpClient.setFileType(FTP.ASCII_FILE_TYPE);

            /**
             * This is currently disabled because the payload store changed.  We probablly only want to send for one
             * satellite as this is only used for debugging
             * 
            sendFile(PayloadStore.RT_LOG);
            sendFile(PayloadStore.MAX_LOG);
            sendFile(PayloadStore.MIN_LOG);
            sendFile(PayloadStore.RAD_LOG);
            */
            ftpClient.disconnect();
        }
    }

    @SuppressWarnings("unused")
    private void sendFile(String fileName) throws FileNotFoundException {
        File firstLocalFile = new File(fileName);

        String firstRemoteFile = FramePart.fileDateStamp() + "_" + Config.callsign.toLowerCase() + "_" + fileName;
        InputStream inputStream = new FileInputStream(firstLocalFile);

        Log.println("Uploading log file: " + fileName);
        boolean done;
        try {
            done = ftpClient.storeFile(firstRemoteFile, inputStream);
            Log.print(ftpClient.getReplyString());
            inputStream.close();
            if (done) {
                Log.println(" ... success.");
            } else
                Log.println(" ... fail.");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.println(" ... fail.");
        }

    }
}