⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telnetgateway.java

📁 java开源的企业总线.xmlBlaster
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*------------------------------------------------------------------------------Name:      TelnetGateway.javaProject:   xmlBlaster.orgCopyright: xmlBlaster.org, see xmlBlaster-LICENSE fileComment:   Main manager class for administrative commands------------------------------------------------------------------------------*/package org.xmlBlaster.engine.admin.extern;import java.util.logging.Logger;import java.util.logging.Level;import org.xmlBlaster.util.XmlBlasterException;import org.xmlBlaster.engine.ServerScope;import org.xmlBlaster.engine.admin.CommandManager;import org.xmlBlaster.engine.admin.I_ExternGateway;import org.xmlBlaster.engine.admin.SetReturn;import org.xmlBlaster.engine.qos.AddressServer;import org.xmlBlaster.engine.qos.ConnectQosServer;import org.xmlBlaster.engine.qos.ConnectReturnQosServer;import org.xmlBlaster.util.Global;import org.xmlBlaster.util.MsgUnit;import org.xmlBlaster.util.Timestamp;import org.xmlBlaster.util.I_Timeout;import org.xmlBlaster.util.def.ErrorCode;import org.xmlBlaster.util.key.QueryKeyData;import remotecons.RemoteServer;import remotecons.ifc.CommandHandlerIfc;import remotecons.wttools.ConnectionServer;import java.util.LinkedList;import java.util.StringTokenizer;import java.util.Iterator;import java.util.Set;import java.util.HashSet;import java.io.IOException;/** * The gateway from outside telnet connections to inside CommandManager.  * <p /> * @author xmlBlaster@marcelruff.info * @since 0.79f * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/admin.telnet.html">admin.telnet requirement</a> * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/admin.commands.html">admin.commands requirement</a> */public final class TelnetGateway implements CommandHandlerIfc, I_ExternGateway, I_Timeout{   private String ME;   private ServerScope glob;   private static Logger log = Logger.getLogger(TelnetGateway.class.getName());   private CommandManager commandManager;   private int port;   private RemoteServer rs;   private final String CRLF = "\r\n";   private static int instanceCounter = 0;   private boolean isShutdown = true;   private boolean isLogin = false;   private ConnectReturnQosServer connectRetQos;   private String loginName = "";   private String sessionId;   private Set telnetInstancesSet;   private Timestamp timerKey;   private long sessionTimeout = 3600000L; // autologout after 1 hour   private ConnectionServer connectionServer;   private AddressServer addressServer;   private String lastCommand = "";   /**    * Default port to access xmlBlaster with telnet for administration (2702).     */   public static final int TELNET_PORT = 2702;   public TelnetGateway() {      instanceCounter++;   }   /**    * Creates the remote console server.     * <p />    * Is called by CommandManager on startup    * @return true if started and active    */   public boolean initialize(ServerScope glob, CommandManager commandManager) throws XmlBlasterException {      initializeVariables(glob, commandManager, true);      return initListener();   }   /**    * @param isBootstrap The first instance has no timer set    * @return true if started and active    */   private boolean initializeVariables(ServerScope glob, CommandManager commandManager, boolean isBootstrap) {      this.glob = glob;      this.ME = "TelnetGateway" + instanceCounter + this.glob.getLogPrefixDashed();      this.telnetInstancesSet = new HashSet();      this.commandManager = commandManager;      this.sessionTimeout = glob.getProperty().get("admin.remoteconsole.sessionTimeout", sessionTimeout);      this.sessionTimeout = glob.getProperty().get("admin.remoteconsole.sessionTimeout[" + glob.getId() + "]", sessionTimeout);      this.port = glob.getProperty().get("admin.remoteconsole.port", TELNET_PORT); // 0 == off      this.port = glob.getProperty().get("admin.remoteconsole.port[" + glob.getId() + "]", this.port);      if (this.port <= 1000) {         if (log.isLoggable(Level.FINE)) log.fine("No telnet gateway configured, port=" + port + " try '-admin.remoteconsole.port " + TELNET_PORT + "' if you want one");         return false;      }      if (!isBootstrap) { // Ignore the first bootstrap instance         if (sessionTimeout > 0L) {            log.info("New connection from telnet client accepted, session timeout is " + Timestamp.millisToNice(sessionTimeout));            timerKey = glob.getTelnetSessionTimer().addTimeoutListener(this, sessionTimeout, null);         }         else            log.info("Session for " + loginName + " lasts forever, requested expiry timer was 0");      }      return true;   }   // Hack into remotecons to allow shutdown (marcel)   public void register(remotecons.wttools.ConnectionServer server) {      this.connectionServer = server;   }   private void stopTimer() {      if (this.timerKey != null && glob.hasTelnetSessionTimer()) {         this.glob.getTelnetSessionTimer().removeTimeoutListener(this.timerKey);         this.timerKey = null;      }   }   protected void finalize() {      stopTimer();      disconnect();   }   /**    * We are notified when this session expires.     * @param userData You get bounced back your userData which you passed    *                 with Timeout.addTimeoutListener()    */   public final void timeout(Object userData)   {      synchronized (this) {         timerKey = null;         if (isLogin)            log.warning("Session timeout " + Timestamp.millisToNice(sessionTimeout) + " for telnet client " + loginName + " occurred, autologout.");         else            log.warning("Session timeout " + Timestamp.millisToNice(sessionTimeout) + " for not authorized telnet client occurred, autologout.");      }      //disconnect(); This happens automatically in Authenticate.java at the same time      connectRetQos = null;      if (connectionServer != null)         connectionServer.shutdown();  // Hack into remotecons to allow shutdown (marcel)   }   private synchronized void disconnect() {      if (isLogin) {         if (connectRetQos != null) {            try {               glob.getAuthenticate().disconnect(this.addressServer, connectRetQos.getSecretSessionId(), null);            }            catch (org.xmlBlaster.util.XmlBlasterException e) {               log.warning(e.getMessage());            }            log.info("Logout of '" + loginName + "', telnet connection destroyed");            connectRetQos = null;         }         else            log.info("Connection from not authorized telnet client destroyed");      }      isLogin = false;   }   private boolean initListener() throws XmlBlasterException {       if (this.port > 1000) {         createRemoteConsole(port);         log.info("Started remote console server for administration, try 'telnet " + glob.getLocalIP() + " " + port + "' to access it and type 'help'.");         return true;      }      if (log.isLoggable(Level.FINE)) log.fine("No telnet gateway configured, port=" + port + " try '-admin.remoteconsole.port " + TELNET_PORT + "' if you want one");      return false;   }   /**    * Creates a server which is accessible with telnet.     * This allows you to access xmlBlaster and query for example the free memory:    * <pre>    *  telnet 192.168.1.2 2702    *  mem    * </pre>    * Enter 'help' for all available commands.    */   private void createRemoteConsole(int port) throws XmlBlasterException {      if (port > 1000) {         rs = new RemoteServer();         rs.setServer_port(port);         rs.setAs_daemon(true);         LinkedList ll = new LinkedList();         ll.add(this);         try {           rs.initialize(ll);         } catch (IOException e) {           //e.printStackTrace();           if (log.isLoggable(Level.FINE)) log.fine("Initializing of remote console on port=" + port + " failed:" + e.toString());           throw new XmlBlasterException(glob, ErrorCode.INTERNAL_UNKNOWN, ME, "Initializing of remote telnet console on port=" + port + " failed:" + e.toString());         }      }   }   /**    * Enforced by "remotecons.CommandHandlerIfc"    */   public String handleCommand(String cmd) {      try {         if (cmd == null || cmd.length() < 1) {            lastCommand = "";            return getErrorText("Ignoring your empty command.");         }         cmd = cmd.trim();         if (cmd.length() < 1) {            lastCommand = "";            return getErrorText("Ignoring your empty command.");         }         if (cmd.equalsIgnoreCase("quit")) {            lastCommand = "";            stopTimer();            disconnect();            return null; // handled by internal Handler         }         // Commands without login:         if (cmd.equalsIgnoreCase("time")) {            lastCommand = cmd;            return ""+new java.util.Date()+CRLF;         }         if (cmd.toUpperCase().startsWith("MEM")) {            lastCommand = cmd;            Runtime rt = Runtime.getRuntime();            return ""+rt.totalMemory()+"/"+rt.freeMemory()+CRLF;         }         StringTokenizer st = new StringTokenizer(cmd, " ");         if (!st.hasMoreTokens()) {            lastCommand = cmd;            return getErrorText("Ignoring your empty command.");         }         String cmdType = st.nextToken();         cmdType = cmdType.trim();         if (!st.hasMoreTokens()) {            if (cmdType.equalsIgnoreCase("GET") ||                cmdType.equalsIgnoreCase("SET") ||

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -