diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java | 397 |
1 files changed, 0 insertions, 397 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java deleted file mode 100644 index 82625fa7..00000000 --- a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.apache.tools.ant.taskdefs.optional.net; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Calendar; -import java.util.Enumeration; -import java.util.Vector; - -import org.apache.commons.net.telnet.TelnetClient; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.Task; - -/** - * Automates the telnet protocol. - * - */ - -public class TelnetTask extends Task { - private static final int WAIT_INTERVAL = 250; - private static final int TELNET_PORT = 23; - - /** - * The userid to login with, if automated login is used - */ - private String userid = null; - - /** - * The password to login with, if automated login is used - */ - private String password = null; - - /** - * The server to connect to. - */ - private String server = null; - - /** - * The tcp port to connect to. - */ - private int port = TELNET_PORT; - - /** - * The list of read/write commands for this session - */ - private Vector telnetTasks = new Vector(); - - /** - * If true, adds a CR to beginning of login script - */ - private boolean addCarriageReturn = false; - - /** - * Default time allowed for waiting for a valid response - * for all child reads. A value of 0 means no limit. - */ - private Integer defaultTimeout = null; - - /** - * Verify that all parameters are included. - * Connect and possibly login - * Iterate through the list of Reads and writes - * @throws BuildException on error - */ - public void execute() throws BuildException { - /** A server name is required to continue */ - if (server == null) { - throw new BuildException("No Server Specified"); - } - /** A userid and password must appear together - * if they appear. They are not required. - */ - if (userid == null && password != null) { - throw new BuildException("No Userid Specified"); - } - if (password == null && userid != null) { - throw new BuildException("No Password Specified"); - } - - /** Create the telnet client object */ - AntTelnetClient telnet = null; - try { - telnet = new AntTelnetClient(); - try { - telnet.connect(server, port); - } catch (IOException e) { - throw new BuildException("Can't connect to " + server); - } - /** Login if userid and password were specified */ - if (userid != null && password != null) { - login(telnet); - } - /** Process each sub command */ - Enumeration tasksToRun = telnetTasks.elements(); - while (tasksToRun != null && tasksToRun.hasMoreElements()) { - TelnetSubTask task = (TelnetSubTask) tasksToRun.nextElement(); - if (task instanceof TelnetRead && defaultTimeout != null) { - ((TelnetRead) task).setDefaultTimeout(defaultTimeout); - } - task.execute(telnet); - } - } finally { - if (telnet != null && telnet.isConnected()) { - try { - telnet.disconnect(); - } catch (IOException e) { - throw new BuildException("Error disconnecting from " - + server); - } - } - } - } - - /** - * Process a 'typical' login. If it differs, use the read - * and write tasks explicitly - */ - private void login(AntTelnetClient telnet) { - if (addCarriageReturn) { - telnet.sendString("\n", true); - } - telnet.waitForString("ogin:"); - telnet.sendString(userid, true); - telnet.waitForString("assword:"); - telnet.sendString(password, false); - } - - /** - * Set the the login id to use on the server; - * required if <tt>password</tt> is set. - * @param u a <code>String</code> value - */ - public void setUserid(String u) { - this.userid = u; - } - - /** - * Set the the login password to use - * required if <tt>userid</tt> is set. - * @param p a <code>String</code> value - */ - public void setPassword(String p) { - this.password = p; - } - - /** - * Set the hostname or address of the remote server. - * @param m a <code>String</code> value - */ - public void setServer(String m) { - this.server = m; - } - - /** - * Set the tcp port to connect to; default is 23. - * @param p an <code>int</code> value - */ - public void setPort(int p) { - this.port = p; - } - - /** - * send a carriage return after connecting; optional, defaults to false. - * @param b a <code>boolean</code> value - */ - public void setInitialCR(boolean b) { - this.addCarriageReturn = b; - } - - /** - * set a default timeout in seconds to wait for a response, - * zero means forever (the default) - * @param i an <code>Integer</code> value - */ - public void setTimeout(Integer i) { - this.defaultTimeout = i; - } - - /** - * A string to wait for from the server. - * A subTask <read> tag was found. Create the object, - * Save it in our list, and return it. - * @return a read telnet sub task - */ - - public TelnetSubTask createRead() { - TelnetSubTask task = (TelnetSubTask) new TelnetRead(); - telnetTasks.addElement(task); - return task; - } - - /** - * Add text to send to the server - * A subTask <write> tag was found. Create the object, - * Save it in our list, and return it. - * @return a write telnet sub task - */ - public TelnetSubTask createWrite() { - TelnetSubTask task = (TelnetSubTask) new TelnetWrite(); - telnetTasks.addElement(task); - return task; - } - - /** - * This class is the parent of the Read and Write tasks. - * It handles the common attributes for both. - */ - public class TelnetSubTask { - // CheckStyle:VisibilityModifier OFF - bc - protected String taskString = ""; - // CheckStyle:VisibilityModifier ON - /** - * Execute the subtask. - * @param telnet the client - * @throws BuildException always as it is not allowed to instantiate this object - */ - public void execute(AntTelnetClient telnet) - throws BuildException { - throw new BuildException("Shouldn't be able instantiate a SubTask directly"); - } - - /** - * the message as nested text - * @param s the nested text - */ - public void addText(String s) { - setString(getProject().replaceProperties(s)); - } - - /** - * the message as an attribute - * @param s a <code>String</code> value - */ - public void setString(String s) { - taskString += s; - } - } - - /** - * Sends text to the connected server - */ - public class TelnetWrite extends TelnetSubTask { - private boolean echoString = true; - /** - * Execute the write task. - * @param telnet the task to use - * @throws BuildException on error - */ - public void execute(AntTelnetClient telnet) - throws BuildException { - telnet.sendString(taskString, echoString); - } - - /** - * Whether or not the message should be echoed to the log. - * Defaults to <code>true</code>. - * @param b a <code>boolean</code> value - */ - public void setEcho(boolean b) { - echoString = b; - } - } - - /** - * Reads the output from the connected server - * until the required string is found or we time out. - */ - public class TelnetRead extends TelnetSubTask { - private Integer timeout = null; - /** - * Execute the read task. - * @param telnet the task to use - * @throws BuildException on error - */ - public void execute(AntTelnetClient telnet) - throws BuildException { - telnet.waitForString(taskString, timeout); - } - /** - * a timeout value that overrides any task wide timeout. - * @param i an <code>Integer</code> value - */ - public void setTimeout(Integer i) { - this.timeout = i; - } - - /** - * Sets the default timeout if none has been set already - * @param defaultTimeout an <code>Integer</code> value - * @ant.attribute ignore="true" - */ - public void setDefaultTimeout(Integer defaultTimeout) { - if (timeout == null) { - timeout = defaultTimeout; - } - } - } - - /** - * This class handles the abstraction of the telnet protocol. - * Currently it is a wrapper around <a - * href="http://jakarta.apache.org/commons/net/index.html">Jakarta - * Commons Net</a>. - */ - public class AntTelnetClient extends TelnetClient { - /** - * Read from the telnet session until the string we are - * waiting for is found - * @param s The string to wait on - */ - public void waitForString(String s) { - waitForString(s, null); - } - - /** - * Read from the telnet session until the string we are - * waiting for is found or the timeout has been reached - * @param s The string to wait on - * @param timeout The maximum number of seconds to wait - */ - public void waitForString(String s, Integer timeout) { - InputStream is = this.getInputStream(); - try { - StringBuffer sb = new StringBuffer(); - int windowStart = -s.length(); - if (timeout == null || timeout.intValue() == 0) { - while (windowStart < 0 - || !sb.substring(windowStart).equals(s)) { - sb.append((char) is.read()); - windowStart++; - } - } else { - Calendar endTime = Calendar.getInstance(); - endTime.add(Calendar.SECOND, timeout.intValue()); - while (windowStart < 0 - || !sb.substring(windowStart).equals(s)) { - while (Calendar.getInstance().before(endTime) - && is.available() == 0) { - Thread.sleep(WAIT_INTERVAL); - } - if (is.available() == 0) { - log("Read before running into timeout: " - + sb.toString(), Project.MSG_DEBUG); - throw new BuildException( - "Response timed-out waiting for \"" + s + '\"', - getLocation()); - } - sb.append((char) is.read()); - windowStart++; - } - } - log(sb.toString(), Project.MSG_INFO); - } catch (BuildException be) { - throw be; - } catch (Exception e) { - throw new BuildException(e, getLocation()); - } - } - - /** - * Write this string to the telnet session. - * @param s the string to write - * @param echoString if true log the string sent - */ - public void sendString(String s, boolean echoString) { - OutputStream os = this.getOutputStream(); - try { - os.write((s + "\n").getBytes()); - if (echoString) { - log(s, Project.MSG_INFO); - } - os.flush(); - } catch (Exception e) { - throw new BuildException(e, getLocation()); - } - } - } -} |