📄 moduleftpoversftp.java
字号:
/****************************************************************************** * * Copyright (c) 1999-2003 AppGate Network Security AB. All Rights Reserved. * * This file contains Original Code and/or Modifications of Original Code as * defined in and that are subject to the MindTerm Public Source License, * Version 2.0, (the 'License'). You may not use this file except in compliance * with the License. * * You should have received a copy of the MindTerm Public Source License * along with this software; see the file LICENSE. If not, write to * AppGate Network Security AB, Otterhallegatan 2, SE-41118 Goteborg, SWEDEN * *****************************************************************************/package com.mindbright.application;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.io.IOException;import java.applet.AppletContext;import java.awt.Dialog;import java.awt.TextField;import java.awt.Label;import java.awt.Button;import java.awt.Panel;import java.awt.GridBagConstraints;import java.awt.FlowLayout;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import com.mindbright.gui.AWTConvenience;import com.mindbright.gui.AWTGridBagContainer;public class ModuleFTPOverSFTP implements MindTermModule, ActionListener, Runnable{ Dialog ftpdDialog; TextField ftpHost; TextField ftpPort; Label lblStatus; Button startBut, closeBut, browseBut; ServerSocket ftpdListen; MindTermApp mindterm; Thread ftpd; public void ftpdDialog() { } public void init(MindTermApp mindterm) { this.mindterm = mindterm; } public void activate(MindTermApp mindterm) { if(ftpdDialog == null) { Label lbl; Panel p; ftpdDialog = new Dialog(mindterm.getParentFrame(), mindterm.getAppName() + " - FTP To SFTP Bridge", false); AWTGridBagContainer grid = new AWTGridBagContainer(ftpdDialog); lbl = new Label("Listen address:"); grid.add(lbl, 0, 1); lbl = new Label("Listen port:"); grid.add(lbl, 0, 1); ftpHost = new TextField("127.0.0.1", 20); grid.add(ftpHost, 1, 1); ftpPort = new TextField("21", 5); grid.add(ftpPort, 1, 1); grid.getConstraints().anchor = GridBagConstraints.CENTER; lblStatus = new Label("Bridge disabled...", Label.CENTER); grid.add(lblStatus, 2, 2); p = new Panel(new FlowLayout()); p.add(startBut = new Button("Enable")); startBut.addActionListener(this); if(mindterm.isApplet()) { p.add(browseBut = new Button("Browser...")); browseBut.addActionListener(this); } p.add(closeBut = new Button("Close Dialog")); closeBut.addActionListener( new AWTConvenience.CloseAction(ftpdDialog)); grid.add(p, 3, GridBagConstraints.REMAINDER); ftpdDialog.addWindowListener(new AWTConvenience.CloseAdapter(closeBut)); AWTConvenience.setBackgroundOfChildren(ftpdDialog); AWTConvenience.setKeyListenerOfChildren(ftpdDialog, new AWTConvenience.OKCancelAdapter(startBut, closeBut), null); ftpdDialog.setResizable(true); ftpdDialog.pack(); } String host = mindterm.getProperty("sftpbridge-host"); String port = mindterm.getProperty("sftpbridge-port"); if(host != null && !host.equals("")) { ftpHost.setText(host); } if(port != null && !port.equals("")) { ftpPort.setText(port); } updateFtpdDialog(false); AWTConvenience.placeDialog(ftpdDialog); ftpdDialog.setVisible(true); } public boolean isAvailable(MindTermApp mindterm) { return (mindterm.isConnected() && (mindterm.getConnection() != null)); } public void connected(MindTermApp mindterm) { String ftpdHost = mindterm.getProperty("sftpbridge-host"); String ftpdPort = mindterm.getProperty("sftpbridge-port"); if(ftpdHost != null && ftpdHost.trim().length() > 0) { try { startFtpdLoop(ftpdHost, ftpdPort); mindterm.alert("Starting ftp to sftp bridge on " + ftpdHost + ":" + ftpdPort); } catch (Exception e) { mindterm.alert("Error starting ftp to sftp bridge on " + ftpdHost + ":" + ftpdPort + " - " + e.getMessage()); } } } public void disconnected(MindTermApp mindterm) { stopFtpdLoop(); } public String description(MindTermApp mindterm) { return null; } private void updateFtpdDialog(boolean preserveMsg) { if(ftpdListen == null) { if(!preserveMsg) lblStatus.setText("Bridge disabled..."); ftpPort.setEnabled(true); ftpHost.setEnabled(true); if(browseBut != null) { browseBut.setEnabled(false); } startBut.setLabel("Enable"); } else { if(!preserveMsg) lblStatus.setText("Bridge enabled: " + ftpHost.getText() + ":" + ftpPort.getText()); ftpPort.setEnabled(false); ftpHost.setEnabled(false); if(browseBut != null) { browseBut.setEnabled(true); } startBut.setLabel("Disable"); } } public void run() { ftpdLoop(ftpdListen); } public void startFtpdLoop(String host, String portStr) throws Exception { if (com.mindbright.util.Util.isNetscapeJava()) { try { netscape.security.PrivilegeManager.enablePrivilege("TerminalEmulator"); } catch (netscape.security.ForbiddenTargetException e) { } } int port = Integer.parseInt(portStr); ftpdListen = new ServerSocket(port, 32, InetAddress.getByName(host)); ftpd = new Thread(this, "FTPOverSFTP"); ftpd.start(); } public void stopFtpdLoop() { if(ftpdListen != null) { try { ftpdListen.close(); } catch (IOException e) { /* don't care */ } finally { ftpdListen = null; } } if(ftpd != null && ftpd.isAlive()) { ftpd.stop(); } ftpd = null; } public void ftpdLoop(ServerSocket listen) { if (com.mindbright.util.Util.isNetscapeJava()) { try { netscape.security.PrivilegeManager.enablePrivilege("TerminalEmulator"); } catch (netscape.security.ForbiddenTargetException e) { } } Socket conn = null; try { for(;;) { conn = null; conn = listen.accept(); try { com.mindbright.ssh2.SSH2FTPOverSFTP ftp = new com.mindbright.ssh2.SSH2FTPOverSFTP(mindterm.getConnection(), conn.getInputStream(), conn.getOutputStream(), mindterm.getAppName() + ", FTP To SFTP Bridge"); } catch (Throwable se) { mindterm.alert("Failed to start FTP over SFTP bridge: " + se.getMessage()); se.printStackTrace(); try { conn.close(); } catch (Throwable t) { } } } } catch (Exception e) { if (conn != null) { try { conn.close(); } catch (Throwable t) { } } e.printStackTrace(); /* ServerSocket closed (or error...) */ } } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("Browser...")) { AppletContext ctx = (AppletContext)mindterm.getAppletContext(); String host = ftpHost.getText(); if("0.0.0.0".equals(host)) { host = "127.0.0.1"; } String url = "ftp://" + host + ":" + ftpPort.getText(); try { ctx.showDocument(new java.net.URL(url), "_blank"); } catch (Exception ex) { mindterm.alert("Error running ftp browser: " + ex); } } else { if(ftpd != null) { startBut.setLabel("Enable"); stopFtpdLoop(); updateFtpdDialog(false); mindterm.setProperty("sftpbridge-host", ""); mindterm.setProperty("sftpbridge-port", ""); } else { boolean err = false; lblStatus.setText(""); try { String host = ftpHost.getText(); String port = ftpPort.getText(); startFtpdLoop(host, port); mindterm.setProperty("sftpbridge-host", host); mindterm.setProperty("sftpbridge-port", port); } catch (Exception ex) { err = true; ftpdListen = null; lblStatus.setText("Error: " + ex.getMessage()); } updateFtpdDialog(err); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -