aboutsummaryrefslogtreecommitdiffstats
path: root/appc-config/appc-config-adaptor/provider
diff options
context:
space:
mode:
Diffstat (limited to 'appc-config/appc-config-adaptor/provider')
-rw-r--r--appc-config/appc-config-adaptor/provider/src/main/java/org/openecomp/appc/ccadaptor/SshJcraftWrapper.java1942
1 files changed, 988 insertions, 954 deletions
diff --git a/appc-config/appc-config-adaptor/provider/src/main/java/org/openecomp/appc/ccadaptor/SshJcraftWrapper.java b/appc-config/appc-config-adaptor/provider/src/main/java/org/openecomp/appc/ccadaptor/SshJcraftWrapper.java
index ea98baed8..4d2169401 100644
--- a/appc-config/appc-config-adaptor/provider/src/main/java/org/openecomp/appc/ccadaptor/SshJcraftWrapper.java
+++ b/appc-config/appc-config-adaptor/provider/src/main/java/org/openecomp/appc/ccadaptor/SshJcraftWrapper.java
@@ -1,20 +1,24 @@
/*-
* ============LICENSE_START=======================================================
- * ONAP : APP-C
+ * ONAP : APPC
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
* Licensed 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.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
* ============LICENSE_END=========================================================
*/
@@ -33,446 +37,445 @@ import com.jcraft.jsch.*;
public class SshJcraftWrapper
{
- private String debugLogFileName = "/tmp/sshJcraftWrapperDebug";
- InputStream inputStream = null;
- OutputStream outputStream = null;
- private TelnetListener listener = null;
- private String routerLogFileName = null;
- DebugLog debugLog = new DebugLog();
- private String host = null;
- private String RouterName = null;
- private int BUFFER_SIZE = 512000;
- // private int BUFFER_SIZE = 4000000;
- private DataInputStream dis = null;
- private BufferedReader reader = null;
- char[] charBuffer = new char[BUFFER_SIZE];
- private BufferedWriter out = null;
- private File _tmpFile = null;
- private JSch jsch = null;
- private Session session = null;
- private Channel channel = null;
- private String tId = "";
- private String aggregatedReceivedString = "";
- private File extraDebugFile = new File("/tmp/sshJcraftWrapperDEBUG");
- private String routerCmdType = "XML";
- private String routerFileName = null;
- private File jcraftReadSwConfigFileFromDisk = new File("/tmp/jcraftReadSwConfigFileFromDisk");
- private String equipNameCode = null;
- private String hostName = null;
- private String userName = null;
- private String passWord = null;
- private StringBuffer charactersFromBufferFlush = new StringBuffer();
- private Runtime runtime = Runtime.getRuntime();
- private DebugLog dbLog = new DebugLog();
-
- public void SshJcraftWrapper()
- {
- String fn = "SshJcraftWrapper.SshJcraftWrapper";
- debugLog.printRTAriDebug (fn, "SshJcraftWrapper has been instantated");
- routerLogFileName = "/tmp/" +host;
- this.host = host;
- }
-
- public void connect (String hostname, String username, String password, String prompt, int timeOut) throws IOException
- {
- String fn = "SshJcraftWrapper.connect";
- jsch = new JSch();
- debugLog.printRTAriDebug (fn, "Attempting to connect to "+hostname +" username="+username +
- " password="+password + " prompt='"+prompt +"' timeOut="+timeOut);
- debugLog.printRTAriDebug (fn, "Trace A");
- RouterName = hostname;
- hostName = hostname;
- userName = username;
- passWord = password;
- try
- {
- session = jsch.getSession(username, hostname, 22);
- UserInfo ui = new MyUserInfo();
- session.setPassword(password);
- session.setUserInfo(ui);
- session.connect(timeOut);
- channel = session.openChannel("shell");
- session.setServerAliveCountMax(0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
- ((ChannelShell)channel).setPtyType("vt102");
- inputStream = channel.getInputStream();
- dis = new DataInputStream(inputStream);
- reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
- channel.connect();
- debugLog.printRTAriDebug (fn, "Successfully connected.");
- debugLog.printRTAriDebug (fn, "Flushing input buffer");
- try
+
+ private String debugLogFileName = "/tmp/sshJcraftWrapperDebug";
+ InputStream inputStream = null;
+ OutputStream outputStream = null;
+ private TelnetListener listener = null;
+ private String routerLogFileName = null;
+ DebugLog debugLog = new DebugLog();
+ private String host = null;
+ private String RouterName = null;
+ private int BUFFER_SIZE = 512000;
+ // private int BUFFER_SIZE = 4000000;
+ private DataInputStream dis = null;
+ private BufferedReader reader = null;
+ char[] charBuffer = new char[BUFFER_SIZE];
+ private BufferedWriter out = null;
+ private File _tmpFile = null;
+ private JSch jsch = null;
+ private Session session = null;
+ private Channel channel = null;
+ private String tId = "";
+ private String aggregatedReceivedString = "";
+ private File extraDebugFile = new File("/tmp/sshJcraftWrapperDEBUG");
+ private String routerCmdType = "XML";
+ private String routerFileName = null;
+ private File jcraftReadSwConfigFileFromDisk = new File("/tmp/jcraftReadSwConfigFileFromDisk");
+ private String equipNameCode = null;
+ private String hostName = null;
+ private String userName = null;
+ private String passWord = null;
+ private StringBuffer charactersFromBufferFlush = new StringBuffer();
+ private Runtime runtime = Runtime.getRuntime();
+ private DebugLog dbLog = new DebugLog();
+
+ public void SshJcraftWrapper()
+ {
+ String fn = "SshJcraftWrapper.SshJcraftWrapper";
+ debugLog.printRTAriDebug (fn, "SshJcraftWrapper has been instantated");
+ routerLogFileName = "/tmp/" +host;
+ this.host = host;
+ }
+
+ public void connect (String hostname, String username, String password, String prompt, int timeOut) throws IOException
+ {
+ String fn = "SshJcraftWrapper.connect";
+ jsch = new JSch();
+ debugLog.printRTAriDebug (fn, "Attempting to connect to "+hostname +" username="+username +" password="+password + " prompt='"+prompt +"' timeOut="+timeOut);
+ debugLog.printRTAriDebug (fn, "Trace A");
+ RouterName = hostname;
+ hostName = hostname;
+ userName = username;
+ passWord = password;
+ try
+ {
+ session = jsch.getSession(username, hostname, 22);
+ UserInfo ui = new MyUserInfo();
+ session.setPassword(password);
+ session.setUserInfo(ui);
+ session.connect(timeOut);
+ channel = session.openChannel("shell");
+ session.setServerAliveCountMax(0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+ ((ChannelShell)channel).setPtyType("vt102");
+ inputStream = channel.getInputStream();
+ dis = new DataInputStream(inputStream);
+ reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+ channel.connect();
+ debugLog.printRTAriDebug (fn, "Successfully connected.");
+ debugLog.printRTAriDebug (fn, "Flushing input buffer");
+ try
+ {
+ receiveUntil(prompt, 3000, "No cmd was sent, just waiting");
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception: Nothing to flush out.");
+ }
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception. e="+e);
+ // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostname +" "+e);
+ throw new IOException(e.toString());
+ }
+ }
+
+ // User specifies the port number.
+ public void connect (String hostname, String username, String password, String prompt, int timeOut, int portNum) throws IOException
+ {
+ String fn = "SshJcraftWrapper.connect";
+ debugLog.printRTAriDebug (fn, ":Attempting to connect to "+hostname +" username="+username +" password="+password + " prompt='"+prompt +"' timeOut="+timeOut +" portNum="+portNum);
+ RouterName = hostname;
+ hostName = hostname;
+ userName = username;
+ passWord = password;
+ RouterName = hostname;
+ jsch = new JSch();
+ try
+ {
+ session = jsch.getSession(username, hostname, portNum);
+ UserInfo ui = new MyUserInfo();
+ session.setPassword(password);
+ session.setUserInfo(ui);
+ session.setConfig("StrictHostKeyChecking", "no");
+ debugLog.printRTAriDebug (fn, ":StrictHostKeyChecking set to 'no'");
+
+ session.connect(timeOut);
+ session.setServerAliveCountMax(0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+ channel = session.openChannel("shell");
+ ((ChannelShell)channel).setPtyType("vt102");
+ inputStream = channel.getInputStream();
+ dis = new DataInputStream(inputStream);
+ reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+ channel.connect();
+ debugLog.printRTAriDebug (fn, ":Successfully connected.");
+ debugLog.printRTAriDebug (fn, ":Flushing input buffer");
+ try
+ {
+ if (prompt.equals("]]>]]>"))
+ receiveUntil("]]>]]>", 10000, "No cmd was sent, just waiting");
+ else
+ receiveUntil(":~#", 5000, "No cmd was sent, just waiting");
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception::: Nothing to flush out.");
+ }
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, ":Caught an Exception. e="+e);
+ dbLog.outputStackTrace(e);
+
+ // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostname +" "+e);
+ throw new IOException(e.toString());
+ }
+ }
+
+
+ public String receiveUntil (String delimeters, int timeout, String cmdThatWasSent) throws TimedOutException, IOException
+ {
+ String fn = "SshJcraftWrapper.receiveUntil";
+ boolean match = false;
+ boolean cliPromptCmd = false;
+ StringBuffer sb2 = new StringBuffer();
+ StringBuffer sbReceive = new StringBuffer();
+ debugLog.printRTAriDebug (fn, "delimeters='"+delimeters +"' timeout="+timeout +" cmdThatWasSent='"+cmdThatWasSent +"'");
+ appendToFile(debugLogFileName, fn +" delimeters='"+delimeters +"' timeout="+timeout +" cmdThatWasSent='"+cmdThatWasSent +"'\n");
+ String CmdThatWasSent = removeWhiteSpaceAndNewLineCharactersAroundString(cmdThatWasSent);
+ int readCounts = 0;
+ aggregatedReceivedString = "";
+
+ long deadline = new Date().getTime() + timeout;
+ try
+ {
+ session.setTimeout(timeout); // This is the socket timeout value.
+ while (!match)
{
- receiveUntil(prompt, 3000, "No cmd was sent, just waiting");
+ if(new Date().getTime() > deadline)
+ {
+ debugLog.printRTAriDebug (fn, "Throwing a TimedOutException: time in routine has exceed our deadline: RouterName:"+RouterName +" CmdThatWasSent="+ CmdThatWasSent);
+ throw new TimedOutException("Timeout: time in routine has exceed our deadline");
+ }
+ try
+ {
+ Thread.sleep(500);
+ }
+ catch (java.lang.InterruptedException ee)
+ {
+ boolean ignore = true;
+ }
+ int len = reader.read(charBuffer, 0, BUFFER_SIZE);
+ appendToFile(debugLogFileName, fn +" After reader.read cmd: len="+len +"\n");
+ if (len <= 0)
+ {
+ debugLog.printRTAriDebug (fn, "Reader read "+len +" bytes. Looks like we timed out, router="+RouterName);
+ throw new TimedOutException ("Received a SocketTimeoutException router="+RouterName);
+ }
+ if (!cliPromptCmd)
+ {
+ if (cmdThatWasSent.indexOf("IOS_XR_uploadedSwConfigCmd") != -1)
+ {
+ if (out == null)
+ {
+ // This is a IOS XR sw config file. We will write it to the disk.
+ timeout = timeout * 2;
+ deadline = new Date().getTime() + timeout;
+ debugLog.printRTAriDebug (fn, "IOS XR upload for software config: timeout="+timeout);
+ StringTokenizer st = new StringTokenizer(cmdThatWasSent);
+ st.nextToken();
+ routerFileName = st.nextToken();
+ out = new BufferedWriter(new FileWriter(routerFileName));
+ routerLogFileName = "/tmp/"+RouterName;
+ _tmpFile = new File(routerLogFileName);
+ debugLog.printRTAriDebug (fn, "Will write the swConfigFile to disk, routerFileName="+routerFileName);
+ }
+ int c;
+ out.write(charBuffer, 0, len);
+ out.flush();
+ appendToFile(debugLogFileName, fn +" Wrote "+len +" bytes to the disk\n");
+ if (_tmpFile.exists())
+ appendToRouterFile(routerLogFileName, len);
+ match = checkIfReceivedStringMatchesDelimeter(len, "\nXML>");
+ if (match == true)
+ {
+ out.flush();
+ out.close();
+ out = null;
+ return null;
+ }
+ }
+ else
+ {
+ readCounts ++;
+ appendToFile(debugLogFileName, fn +" readCounts="+readCounts +" Reader read "+len +" of data\n");
+ int c;
+ sb2.setLength(0);
+ for(int i=0; i<len; i++ )
+ {
+ c = charBuffer[i];
+ if ((c != 7) && (c != 13) && (c != 0) && (c != 27))
+ {
+ sbReceive.append((char)charBuffer[i]);
+ sb2.append((char)charBuffer[i]);
+ }
+ }
+ appendToRouterFile("/tmp/"+RouterName, len);
+ if (listener != null)
+ listener.receivedString(sb2.toString());
+
+ appendToFile(debugLogFileName, fn +" Trace 1\n");
+ match = checkIfReceivedStringMatchesDelimeter(delimeters, sb2.toString(), cmdThatWasSent);
+ appendToFile(debugLogFileName, fn +" Trace 2\n");
+ if (match == true)
+ {
+ appendToFile(debugLogFileName, fn +" Match was true, breaking...\n");
+ break;
+ }
+ }
+ }
+ else
+ {
+ debugLog.printRTAriDebug (fn, "cliPromptCmd, Trace 2");
+ sb2.setLength(0);
+ for(int i=0; i<len; i++ )
+ {
+ sbReceive.append( (char)charBuffer[i] );
+ sb2.append( (char)charBuffer[i] );
+ }
+ appendToRouterFile("/tmp/"+RouterName, sb2);
+ if (listener != null)
+ listener.receivedString(sb2.toString());
+ debugLog.printRTAriDebug (fn, "sb2='"+sb2.toString() +"' delimeters='" +delimeters +"'");
+ if (sb2.toString().indexOf("\nariPrompt>") != -1)
+ {
+ debugLog.printRTAriDebug (fn, "Found our prompt");
+ match = true;
+ break;
+ }
+ }
}
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception: Nothing to flush out.");
+ }
+ catch (JSchException e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an JSchException e="+e.toString());
+ dbLog.outputStackTrace(e);
+ throw new TimedOutException (e.toString());
+ }
+ catch (IOException ee)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an IOException: ee="+ee.toString());
+ dbLog.outputStackTrace(ee);
+ throw new TimedOutException (ee.toString());
+ }
+ String result = stripOffCmdFromRouterResponse(sbReceive.toString());
+ debugLog.printRTAriDebug (fn, "Leaving method successfully");
+ return (result);
+ }
+
+ public boolean checkIfReceivedStringMatchesDelimeter(String delimeters, String receivedString, String cmdThatWasSent)
+ {
+ // The delimeters are in a '|' seperated string. Return true on the first match.
+ String fn = "SshJcraftWrapper.checkIfReceivedStringMatchesDelimeter";
+ appendToFile(debugLogFileName, fn +" Entered: delimeters='"+delimeters +" cmdThatWasSent='"+cmdThatWasSent +"' receivedString='"+receivedString +"'\n");
+ StringTokenizer st = new StringTokenizer(delimeters, "|");
+
+ if ((delimeters.indexOf("#$") != -1) || (routerCmdType.equals("CLI"))) // This would be an IOS XR, CLI command.
+ {
+ int x = receivedString.lastIndexOf("#");
+ int y = receivedString.length() - 1;
+ appendToFile(debugLogFileName, fn +" IOS XR, CLI command\n");
+ if (extraDebugFile.exists())
+ appendToFile(debugLogFileName, fn +" :::cmdThatWasSent='"+cmdThatWasSent +"' x="+x +" y="+y +"\n");
+ if ((x != -1) && (y == x))
+ return(true);
+ else
+ return(false);
+ }
+ if (cmdThatWasSent.indexOf("show config") != -1)
+ {
+ appendToFile(debugLogFileName, fn +"In the block for 'show config'\n");
+ while (st.hasMoreTokens())
+ {
+ String delimeter = st.nextToken();
+ // Make sure we don't get faked out by a response of " #".
+ // Proc #0
+ // # signaling-local-address ipv6 FD00:F4D5:EA06:1::110:136:254
+ // LAAR2#
+ int x = receivedString.lastIndexOf(delimeter);
+ if ((receivedString.lastIndexOf(delimeter) != -1) && (receivedString.lastIndexOf(" #") != x-1))
+ {
+ appendToFile(debugLogFileName, fn +"receivedString=\n'" +receivedString +"'\n");
+ appendToFile(debugLogFileName, fn +"Returning true for the 'show config' command. We found our real delmeter. \n\n");
+ return (true);
+ }
}
- }
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception. e="+e);
- throw new IOException(e.toString());
- }
- }
-
- // User specifies the port number.
- public void connect (String hostname, String username, String password, String prompt, int timeOut, int portNum) throws IOException
- {
- String fn = "SshJcraftWrapper.connect";
- debugLog.printRTAriDebug (fn, ":Attempting to connect to "+hostname +" username="+username +
- " password="+password + " prompt='"+prompt +"' timeOut="+timeOut +" portNum="+portNum);
- RouterName = hostname;
- hostName = hostname;
- userName = username;
- passWord = password;
- RouterName = hostname;
- jsch = new JSch();
- try
- {
- session = jsch.getSession(username, hostname, portNum);
- UserInfo ui = new MyUserInfo();
- session.setPassword(password);
- session.setUserInfo(ui);
- session.setConfig("StrictHostKeyChecking", "no");
- debugLog.printRTAriDebug (fn, ":StrictHostKeyChecking set to 'no'");
-
- session.connect(timeOut);
- session.setServerAliveCountMax(0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
- channel = session.openChannel("shell");
- ((ChannelShell)channel).setPtyType("vt102");
- inputStream = channel.getInputStream();
- dis = new DataInputStream(inputStream);
- reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
- channel.connect();
- debugLog.printRTAriDebug (fn, ":Successfully connected.");
- debugLog.printRTAriDebug (fn, ":Flushing input buffer");
- try
+ }
+ else
+ {
+ aggregatedReceivedString = aggregatedReceivedString + receivedString;
+ _appendToFile ("/tmp/aggregatedReceivedString.debug", aggregatedReceivedString);
+
+ while (st.hasMoreTokens())
{
- if (prompt.equals("]]>]]>"))
- receiveUntil("]]>]]>", 10000, "No cmd was sent, just waiting");
- else
- receiveUntil(":~#", 5000, "No cmd was sent, just waiting");
+ String delimeter = st.nextToken();
+ appendToFile(debugLogFileName, fn +" Looking for an delimeter of:'"+delimeter+"'\n");
+ appendToFile(debugLogFileName, fn +" receivedString='"+receivedString);
+ if (aggregatedReceivedString.indexOf(delimeter) != -1)
+ {
+ debugLog.printRTAriDebug (fn, "Found our delimeter, which was: '"+delimeter +"'");
+ aggregatedReceivedString = "";
+ return (true);
}
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception::: Nothing to flush out.");
+ }
+ }
+ return (false);
+ }
+
+ public boolean checkIfReceivedStringMatchesDelimeter(int len, String delimeter)
+ {
+ String fnName = "SshJcraftWrapper.checkIfReceivedStringMatchesDelimeter:::";
+ int x;
+ int c;
+ String str = null;
+
+ if (jcraftReadSwConfigFileFromDisk())
+ {
+ DebugLog.printAriDebug(fnName, "jcraftReadSwConfigFileFromDisk block");
+ File fileName = new File(routerFileName);
+ appendToFile(debugLogFileName, fnName +" jcraftReadSwConfigFileFromDisk::: Will read the tail end of the file from the disk");
+ try
+ {
+ str = getLastFewLinesOfFile(fileName, 3);
+ }
+ catch (IOException e)
+ {
+ DebugLog.printAriDebug(fnName, "Caught an Exception, e="+e);
+ dbLog.outputStackTrace(e);
+ e.printStackTrace();
+ }
+ }
+ else
+ {
+ // DebugLog.printAriDebug(fnName, "TRACE 1: ******************************");
+ // When looking at the end of the charBuffer, don't include any linefeeds or spaces. We only want to make the smallest string possible.
+ for(x=len-1; x>=0; x--)
+ {
+ c = charBuffer[x];
+ if (extraDebugFile.exists())
+ appendToFile(debugLogFileName, fnName +" x="+x +" c="+c +"\n");
+ if ((c != 10) && (c != 32)) // Not a line feed nor a space.
+ break;
+ }
+ if ((x+1 - 13) >= 0)
+ {
+ str = new String (charBuffer, (x+1-13), 13);
+ appendToFile(debugLogFileName, fnName +" str:'"+str +"'\n");
+ }
+ else
+ {
+ File fileName = new File(routerFileName);
+ appendToFile(debugLogFileName, fnName +" Will read the tail end of the file from the disk, x="+x +" len="+len +" str::'"+str +"' routerFileName='" +routerFileName +"'\n");
+ DebugLog.printAriDebug(fnName, "Will read the tail end of the file from the disk, x="+x +" len="+len +" str::'"+str +"' routerFileName='" +routerFileName +"'");
+ try
+ {
+ str = getLastFewLinesOfFile(fileName, 3);
}
- }
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, ":Caught an Exception. e="+e);
+ catch (IOException e)
+ {
+ DebugLog.printAriDebug(fnName, "Caught an Exception, e="+e);
dbLog.outputStackTrace(e);
+ e.printStackTrace();
+ }
+ }
+ }
- throw new IOException(e.toString());
- }
- }
-
-
- public String receiveUntil (String delimeters, int timeout, String cmdThatWasSent) throws TimedOutException, IOException
- {
- String fn = "SshJcraftWrapper.receiveUntil";
- boolean match = false;
- boolean cliPromptCmd = false;
- StringBuffer sb2 = new StringBuffer();
- StringBuffer sbReceive = new StringBuffer();
- debugLog.printRTAriDebug (fn, "delimeters='"+delimeters +"' timeout="+timeout +" cmdThatWasSent='"+cmdThatWasSent +"'");
- appendToFile(debugLogFileName, fn +" delimeters='"+delimeters +"' timeout="+timeout +" cmdThatWasSent='"+cmdThatWasSent +"'\n");
- String CmdThatWasSent = removeWhiteSpaceAndNewLineCharactersAroundString(cmdThatWasSent);
- int readCounts = 0;
- aggregatedReceivedString = "";
-
- long deadline = new Date().getTime() + timeout;
- try
- {
- session.setTimeout(timeout); // This is the socket timeout value.
- while (!match)
- {
- if(new Date().getTime() > deadline)
- {
- debugLog.printRTAriDebug (fn, "Throwing a TimedOutException: time in routine has exceed our deadline: RouterName:"+
- RouterName +" CmdThatWasSent="+ CmdThatWasSent);
- throw new TimedOutException("Timeout: time in routine has exceed our deadline");
- }
- try
- {
- Thread.sleep(500);
- }
- catch (java.lang.InterruptedException ee)
- {
- boolean ignore = true;
- }
- int len = reader.read(charBuffer, 0, BUFFER_SIZE);
- appendToFile(debugLogFileName, fn +" After reader.read cmd: len="+len +"\n");
- if (len <= 0)
- {
- debugLog.printRTAriDebug (fn, "Reader read "+len +" bytes. Looks like we timed out, router="+RouterName);
- throw new TimedOutException ("Received a SocketTimeoutException router="+RouterName);
- }
- if (!cliPromptCmd)
- {
- if (cmdThatWasSent.indexOf("IOS_XR_uploadedSwConfigCmd") != -1)
- {
- if (out == null)
- {
- // This is a IOS XR sw config file. We will write it to the disk.
- timeout = timeout * 2;
- deadline = new Date().getTime() + timeout;
- debugLog.printRTAriDebug (fn, "IOS XR upload for software config: timeout="+timeout);
- StringTokenizer st = new StringTokenizer(cmdThatWasSent);
- st.nextToken();
- routerFileName = st.nextToken();
- out = new BufferedWriter(new FileWriter(routerFileName));
- routerLogFileName = "/tmp/"+RouterName;
- _tmpFile = new File(routerLogFileName);
- debugLog.printRTAriDebug (fn, "Will write the swConfigFile to disk, routerFileName="+routerFileName);
- }
- int c;
- out.write(charBuffer, 0, len);
- out.flush();
- appendToFile(debugLogFileName, fn +" Wrote "+len +" bytes to the disk\n");
- if (_tmpFile.exists())
- appendToRouterFile(routerLogFileName, len);
- match = checkIfReceivedStringMatchesDelimeter(len, "\nXML>");
- if (match == true)
- {
- out.flush();
- out.close();
- out = null;
- return null;
- }
- }
- else
- {
- readCounts ++;
- appendToFile(debugLogFileName, fn +" readCounts="+readCounts +" Reader read "+len +" of data\n");
- int c;
- sb2.setLength(0);
- for(int i=0; i<len; i++ )
- {
- c = charBuffer[i];
- if ((c != 7) && (c != 13) && (c != 0) && (c != 27))
- {
- sbReceive.append((char)charBuffer[i]);
- sb2.append((char)charBuffer[i]);
- }
- }
- appendToRouterFile("/tmp/"+RouterName, len);
- if (listener != null)
- listener.receivedString(sb2.toString());
-
- appendToFile(debugLogFileName, fn +" Trace 1\n");
- match = checkIfReceivedStringMatchesDelimeter(delimeters, sb2.toString(), cmdThatWasSent);
- appendToFile(debugLogFileName, fn +" Trace 2\n");
- if (match == true)
- {
- appendToFile(debugLogFileName, fn +" Match was true, breaking...\n");
- break;
- }
- }
- }
- else
- {
- debugLog.printRTAriDebug (fn, "cliPromptCmd, Trace 2");
- sb2.setLength(0);
- for(int i=0; i<len; i++ )
- {
- sbReceive.append( (char)charBuffer[i] );
- sb2.append( (char)charBuffer[i] );
- }
- appendToRouterFile("/tmp/"+RouterName, sb2);
- if (listener != null)
- listener.receivedString(sb2.toString());
- debugLog.printRTAriDebug (fn, "sb2='"+sb2.toString() +"' delimeters='" +delimeters +"'");
- if (sb2.toString().indexOf("\nariPrompt>") != -1)
- {
- debugLog.printRTAriDebug (fn, "Found our prompt");
- match = true;
- break;
- }
- }
- }
- }
- catch (JSchException e)
- {
- debugLog.printRTAriDebug (fn, "Caught an JSchException e="+e.toString());
- dbLog.outputStackTrace(e);
- throw new TimedOutException (e.toString());
- }
- catch (IOException ee)
- {
- debugLog.printRTAriDebug (fn, "Caught an IOException: ee="+ee.toString());
- dbLog.outputStackTrace(ee);
- throw new TimedOutException (ee.toString());
- }
- String result = stripOffCmdFromRouterResponse(sbReceive.toString());
- debugLog.printRTAriDebug (fn, "Leaving method successfully");
- return (result);
- }
-
- public boolean checkIfReceivedStringMatchesDelimeter(String delimeters, String receivedString, String cmdThatWasSent)
- {
- // The delimeters are in a '|' seperated string. Return true on the first match.
- String fn = "SshJcraftWrapper.checkIfReceivedStringMatchesDelimeter";
- appendToFile(debugLogFileName, fn +" Entered: delimeters='"+delimeters +" cmdThatWasSent='"+cmdThatWasSent +"' receivedString='"+receivedString +"'\n");
- StringTokenizer st = new StringTokenizer(delimeters, "|");
-
- if ((delimeters.indexOf("#$") != -1) || (routerCmdType.equals("CLI"))) // This would be an IOS XR, CLI command.
- {
- int x = receivedString.lastIndexOf("#");
- int y = receivedString.length() - 1;
- appendToFile(debugLogFileName, fn +" IOS XR, CLI command\n");
- if (extraDebugFile.exists())
- appendToFile(debugLogFileName, fn +" :::cmdThatWasSent='"+cmdThatWasSent +"' x="+x +" y="+y +"\n");
- if ((x != -1) && (y == x))
- return(true);
- else
- return(false);
- }
- if (cmdThatWasSent.indexOf("show config") != -1)
- {
- appendToFile(debugLogFileName, fn +"In the block for 'show config'\n");
- while (st.hasMoreTokens())
- {
- String delimeter = st.nextToken();
- // Make sure we don't get faked out by a response of " #".
- // Proc #0
- // # signaling-local-address ipv6 FD00:F4D5:EA06:1::110:136:254
- // LAAR2#
- int x = receivedString.lastIndexOf(delimeter);
- if ((receivedString.lastIndexOf(delimeter) != -1) && (receivedString.lastIndexOf(" #") != x-1))
- {
- appendToFile(debugLogFileName, fn +"receivedString=\n'" +receivedString +"'\n");
- appendToFile(debugLogFileName, fn +"Returning true for the 'show config' command. We found our real delmeter. \n\n");
- return (true);
- }
- }
- }
- else
- {
- aggregatedReceivedString = aggregatedReceivedString + receivedString;
- _appendToFile ("/tmp/aggregatedReceivedString.debug", aggregatedReceivedString);
-
- while (st.hasMoreTokens())
- {
- String delimeter = st.nextToken();
- appendToFile(debugLogFileName, fn +" Looking for an delimeter of:'"+delimeter+"'\n");
- appendToFile(debugLogFileName, fn +" receivedString='"+receivedString);
- if (aggregatedReceivedString.indexOf(delimeter) != -1)
- {
- debugLog.printRTAriDebug (fn, "Found our delimeter, which was: '"+delimeter +"'");
- aggregatedReceivedString = "";
- return (true);
- }
- }
- }
- return (false);
- }
-
- public boolean checkIfReceivedStringMatchesDelimeter(int len, String delimeter)
- {
- String fnName = "SshJcraftWrapper.checkIfReceivedStringMatchesDelimeter:::";
- int x;
- int c;
- String str = null;
-
- if (jcraftReadSwConfigFileFromDisk())
- {
- DebugLog.printAriDebug(fnName, "jcraftReadSwConfigFileFromDisk block");
- File fileName = new File(routerFileName);
- appendToFile(debugLogFileName, fnName +" jcraftReadSwConfigFileFromDisk::: Will read the tail end of the file from the disk");
- try
- {
- str = getLastFewLinesOfFile(fileName, 3);
- }
- catch (IOException e)
- {
- DebugLog.printAriDebug(fnName, "Caught an Exception, e="+e);
- dbLog.outputStackTrace(e);
- e.printStackTrace();
- }
- }
- else
- {
- // DebugLog.printAriDebug(fnName, "TRACE 1: ******************************");
- // When looking at the end of the charBuffer, don't include any linefeeds or spaces. We only want to make the smallest string possible.
- for(x=len-1; x>=0; x--)
- {
- c = charBuffer[x];
- if (extraDebugFile.exists())
- appendToFile(debugLogFileName, fnName +" x="+x +" c="+c +"\n");
- if ((c != 10) && (c != 32)) // Not a line feed nor a space.
- break;
- }
- if ((x+1 - 13) >= 0)
- {
- str = new String (charBuffer, (x+1-13), 13);
- appendToFile(debugLogFileName, fnName +" str:'"+str +"'\n");
- }
- else
- {
- File fileName = new File(routerFileName);
- appendToFile(debugLogFileName, fnName +" Will read the tail end of the file from the disk, x="+x +
- " len="+len +" str::'"+str +"' routerFileName='" +routerFileName +"'\n");
- DebugLog.printAriDebug(fnName, "Will read the tail end of the file from the disk, x="+x +" len="
- +len +" str::'"+str +"' routerFileName='" +routerFileName +"'");
- try
- {
- str = getLastFewLinesOfFile(fileName, 3);
- }
- catch (IOException e)
- {
- DebugLog.printAriDebug(fnName, "Caught an Exception, e="+e);
- dbLog.outputStackTrace(e);
- e.printStackTrace();
- }
- }
- }
-
- if (str.indexOf(delimeter) != -1)
- {
- DebugLog.printAriDebug(fnName, "str in break is:'"+str +"'" +" delimeter='" +delimeter +"'");
- appendToFile(debugLogFileName, fnName +" str in break is:'"+str +" delimeter='" +delimeter +"'" +"'\n");
- return(true);
- }
- else
- {
- appendToFile(debugLogFileName, fnName +" Returning false");
- return(false);
- }
-
- }
-
- public void closeConnection()
- {
- String fn = "SshJcraftWrapper.closeConnection";
- debugLog.printRTAriDebug (fn, "Executing the closeConnection....");
- inputStream = null;
- outputStream = null;
- dis = null;
- charBuffer = null;
- session.disconnect();
+ if (str.indexOf(delimeter) != -1)
+ {
+ DebugLog.printAriDebug(fnName, "str in break is:'"+str +"'" +" delimeter='" +delimeter +"'");
+ appendToFile(debugLogFileName, fnName +" str in break is:'"+str +" delimeter='" +delimeter +"'" +"'\n");
+ return(true);
+ }
+ else
+ {
+ appendToFile(debugLogFileName, fnName +" Returning false");
+ return(false);
+ }
+
+ }
+
+ public void closeConnection()
+ {
+ String fn = "SshJcraftWrapper.closeConnection";
+ debugLog.printRTAriDebug (fn, "Executing the closeConnection....");
+ inputStream = null;
+ outputStream = null;
+ dis = null;
+ charBuffer = null;
+ session.disconnect();
session = null;
- }
+ }
- public void send (String cmd) throws IOException
- {
- String fn = "SshJcraftWrapper.send";
- OutputStream out = channel.getOutputStream();
- DataOutputStream dos = new DataOutputStream(out);
+ public void send (String cmd) throws IOException
+ {
+ String fn = "SshJcraftWrapper.send";
+ OutputStream out = channel.getOutputStream();
+ DataOutputStream dos = new DataOutputStream(out);
- if ((cmd.charAt(cmd.length() - 1) != '\n') && (cmd.charAt(cmd.length() - 1) != '\r'))
- cmd += "\n";
+ if ((cmd.charAt(cmd.length() - 1) != '\n') && (cmd.charAt(cmd.length() - 1) != '\r'))
+ cmd += "\n";
int length = cmd.length();
int i = -1;
int nchars = 300000;
int ncharsTotalSent = 0;
int ncharsSent = 0;
- appendToFile(debugLogFileName, fn+": Sending: '"+cmd );
- debugLog.printRTAriDebug (fn, "Length of cmd is:" +length); // 2,937,706
- try
- {
+ appendToFile(debugLogFileName, fn+": Sending: '"+cmd );
+ // debugLog.printRTAriDebug (fn, "cmd = "+cmd);
+ debugLog.printRTAriDebug (fn, "Length of cmd is:" +length); // 2,937,706
+ try
+ {
if (length > 600000)
{
int timeout = 9000;
@@ -481,324 +484,332 @@ public class SshJcraftWrapper
String Cmd = cmd.substring(i, Math.min(length, i + nchars));
ncharsSent = Cmd.length();
ncharsTotalSent = ncharsTotalSent + Cmd.length();
- debugLog.printRTAriDebug (fn, "i="+i +" Sending Cmd: ncharsSent="+ncharsSent);
- dos.writeBytes(Cmd);
- dos.flush();
+ debugLog.printRTAriDebug (fn, "i="+i +" Sending Cmd: ncharsSent="+ncharsSent);
+ dos.writeBytes(Cmd);
+ dos.flush();
try
{
- debugLog.printRTAriDebug (fn, ":::i="+i +" length="+length);
+ debugLog.printRTAriDebug (fn, ":::i="+i +" length="+length);
if (ncharsSent < length)
- receiveUntilBufferFlush (ncharsSent, timeout, "buffer flush i="+i);
+ receiveUntilBufferFlush (ncharsSent, timeout, "buffer flush i="+i);
else
{
- debugLog.printRTAriDebug (fn, "i="+i +" No Waiting this time....");
- dos.flush();
+ debugLog.printRTAriDebug (fn, "i="+i +" No Waiting this time....");
+ dos.flush();
}
}
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception: Nothing to flush out.");
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception: Nothing to flush out.");
}
}
}
else
{
- debugLog.printRTAriDebug (fn, "Before executing the dos.writeBytes");
- dos.writeBytes(cmd);
+ debugLog.printRTAriDebug (fn, "Before executing the dos.writeBytes");
+ dos.writeBytes(cmd);
}
- dos.flush();
- debugLog.printRTAriDebug (fn, "Leaving method");
- appendToFile(debugLogFileName, fn+": Leaving method\n");
- }
- catch (IOException e)
- {
- debugLog.printRTAriDebug (fn, "Caught an IOException. e="+e);
+ dos.flush();
+ debugLog.printRTAriDebug (fn, "Leaving method");
+ appendToFile(debugLogFileName, fn+": Leaving method\n");
+ }
+ catch (IOException e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an IOException. e="+e);
dbLog.outputStackTrace(e);
- throw new IOException(e.toString());
- }
- }
-
-
- public void sendChar (int v) throws IOException
- {
- String fn = "SshJcraftWrapper.sendChar";
- OutputStream out = channel.getOutputStream();
- DataOutputStream dos = new DataOutputStream(out);
- try
- {
- debugLog.printRTAriDebug (fn, "Sending: '" +v +"'");
- dos.writeChar (v);
- dos.flush();
- }
- catch (IOException e)
- {
- debugLog.printRTAriDebug (fn, "Caught an IOException. e="+e);
- throw new IOException(e.toString());
- }
- }
-
- public void send (byte[] b, int off, int len) throws IOException
- {
- String fn = "SshJcraftWrapper.send:byte[]";
- OutputStream out = channel.getOutputStream();
- DataOutputStream dos = new DataOutputStream(out);
- try
- {
- dos.write (b, off, len);
- dos.flush();
- }
- catch (IOException e)
- {
- debugLog.printRTAriDebug (fn, "Caught an IOException. e="+e);
- throw new IOException(e.toString());
- }
- }
-
- public static class MyUserInfo implements UserInfo, UIKeyboardInteractive
- {
- public String getPassword()
- {
- return null;
- }
- public boolean promptYesNo(String str)
- {
- return false;
- }
- public String getPassphrase()
- {
- return null;
- }
- public boolean promptPassphrase(String message)
- {
- return false;
- }
- public boolean promptPassword(String message)
- {
- return false;
- }
- public void showMessage(String message)
- { }
- public String[] promptKeyboardInteractive(String destination,
- String name,
- String instruction,
- String[] prompt,
- boolean[] echo)
- {
- return null;
- }
- }
-
- public void addListener(TelnetListener listener)
- {
- this.listener = listener;
- }
-
- public void appendToFile (String fileName, String dataToWrite)
- {
- String fn = "SshJcraftWrapper.appendToFile";
-
- try
- {
- // First check to see if a file 'fileName' exist, if it does
- // write to it. If it does not exist, don't write to it.
- File tmpFile = new File(fileName);
- if (tmpFile.exists())
- {
- BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
- out.write(getTheDate() +": " +tId +": "+dataToWrite);
- out.close();
- }
- }
- catch (IOException e)
- {
- debugLog.printRTAriDebug (fn, "Caught an IOException: e="+e);
- }
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception: e="+e);
- }
- }
+ throw new IOException(e.toString());
+ }
+ }
+
+
+ public void sendChar (int v) throws IOException
+ {
+ String fn = "SshJcraftWrapper.sendChar";
+ OutputStream out = channel.getOutputStream();
+ DataOutputStream dos = new DataOutputStream(out);
+ try
+ {
+ debugLog.printRTAriDebug (fn, "Sending: '" +v +"'");
+ dos.writeChar (v);
+ dos.flush();
+ }
+ catch (IOException e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an IOException. e="+e);
+ throw new IOException(e.toString());
+ }
+ }
+
+ public void send (byte[] b, int off, int len) throws IOException
+ {
+ String fn = "SshJcraftWrapper.send:byte[]";
+ OutputStream out = channel.getOutputStream();
+ DataOutputStream dos = new DataOutputStream(out);
+ try
+ {
+ dos.write (b, off, len);
+ dos.flush();
+ }
+ catch (IOException e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an IOException. e="+e);
+ throw new IOException(e.toString());
+ }
+ }
+
+ public static class MyUserInfo implements UserInfo, UIKeyboardInteractive
+ {
+ public String getPassword()
+ {
+ return null;
+ }
+ public boolean promptYesNo(String str)
+ {
+ return false;
+ }
+ public String getPassphrase()
+ {
+ return null;
+ }
+ public boolean promptPassphrase(String message)
+ {
+ return false;
+ }
+ public boolean promptPassword(String message)
+ {
+ return false;
+ }
+ public void showMessage(String message)
+ { }
+ public String[] promptKeyboardInteractive(String destination,
+ String name,
+ String instruction,
+ String[] prompt,
+ boolean[] echo)
+ {
+ return null;
+ }
+ }
+
+ public void addListener(TelnetListener listener)
+ {
+ this.listener = listener;
+ }
+
+ public void appendToFile (String fileName, String dataToWrite)
+ {
+ String fn = "SshJcraftWrapper.appendToFile";
+
+ try
+ {
+ // First check to see if a file 'fileName' exist, if it does
+ // write to it. If it does not exist, don't write to it.
+ File tmpFile = new File(fileName);
+ if (tmpFile.exists())
+ {
+ BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
+ // out.write(dataToWrite);
+ // out.write(getTheDate() +": " +Thread.currentThread().getName() +": "+dataToWrite);
+ out.write(getTheDate() +": " +tId +": "+dataToWrite);
+ out.close();
+ }
+ }
+ catch (IOException e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an IOException: e="+e);
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception: e="+e);
+ }
+ }
public void _appendToFile (String fileName, String dataToWrite)
- {
- String fn = "SshJcraftWrapper.appendToFile";
-
- try
- {
- // First check to see if a file 'fileName' exist, if it does
- // write to it. If it does not exist, don't write to it.
- File tmpFile = new File(fileName);
- if (tmpFile.exists())
- {
- BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
- out.write(dataToWrite);
- out.close();
- }
- }
- catch (IOException e)
- {
- debugLog.printRTAriDebug (fn, "Caught an IOException: e="+e);
- }
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception: e="+e);
- }
- }
-
-
- public String getTheDate()
- {
- Calendar cal = Calendar.getInstance();
- java.util.Date today = cal.getTime();
- DateFormat df1 = DateFormat.getDateInstance();
- DateFormat df3 = new SimpleDateFormat("MM/dd/yyyy H:mm:ss ");
- return (df3.format(today));
- }
-
-
- public void appendToRouterFile (String fileName, StringBuffer dataToWrite)
- {
- String fnName = "SshJcraftWrapper.appendToRouterFile";
- debugLog.printRTAriDebug (fnName, "Entered.... ");
- try
- {
- // First check to see if a file 'fileName' exist, if it does
- // write to it. If it does not exist, don't write to it.
- File tmpFile = new File(fileName);
- {
- // if ((tmpFile.exists()) && (tmpFile.setWritable(true, true)))
- if (tmpFile.exists())
- {
- BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
- out.write(dataToWrite.toString());
- out.close();
- }
- }
- }
- catch (IOException e)
- {
- System.err.println("writeToFile() exception: " + e);
- e.printStackTrace();
- }
- }
-
- public void appendToRouterFile (String fileName, int len)
- {
- String fnName = "SshJcraftWrapper.appendToFile";
- try
- {
- // First check to see if a file 'fileName' exist, if it does
- // write to it. If it does not exist, don't write to it.
- File tmpFile = new File(fileName);
- // if ((tmpFile.exists()) && (tmpFile.setWritable(true, true)))
- if (tmpFile.exists())
- {
- BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
- out.write(charBuffer, 0, len);
- out.close();
- }
- }
- catch (IOException e)
- {
- System.err.println("writeToFile() exception: " + e);
- e.printStackTrace();
- }
- }
-
- public String removeWhiteSpaceAndNewLineCharactersAroundString(String str)
- {
- if (str != null)
- {
- StringTokenizer strTok = new StringTokenizer(str, "\n");
- StringBuffer sb = new StringBuffer();
-
- while (strTok.hasMoreTokens())
- {
- String line = strTok.nextToken();
- sb.append(line);
- }
- return (sb.toString().trim());
- }
- else
- return(str);
- }
-
- public String stripOffCmdFromRouterResponse(String routerResponse)
- {
- String fn = "SshJcraftWrapper.stripOffCmdFromRouterResponse";
- // appendToFile(debugLogFileName, fn+": routerResponse='"+routerResponse +"'\n");
-
- // The session of SSH will echo the command sent to the router, in the router's response.
- // Since all our commands are terminated by a '\n', strip off the first line
- // of the response from the router. This first line contains the orginal command.
-
- StringTokenizer rr = new StringTokenizer(routerResponse, "\n");
- StringBuffer sb = new StringBuffer();
-
- int numTokens = rr.countTokens();
- if (numTokens > 1)
- {
- rr.nextToken(); //Skip the first line.
- while (rr.hasMoreTokens())
- {
- sb.append(rr.nextToken()+'\n');
- }
- }
- return (sb.toString());
- }
-
- public void setRouterCommandType(String type)
- {
- String fn = "SshJcraftWrapper.setRouterCommandType";
- this.routerCmdType = type;
- debugLog.printRTAriDebug (fn, "Setting routerCmdType to a value of '"+type +"'");
- }
-
- public String getLastFewLinesOfFile(File file, int linesToRead) throws FileNotFoundException, IOException
- {
- String fn = "SshJcraftWrapper.getLastFewLinesOfFile";
- RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
- int lines = 0;
- StringBuilder builder = new StringBuilder();
- String tail = "";
- long length = file.length();
- length--;
- randomAccessFile.seek(length);
- for(long seek = length; seek >= 0; --seek)
- {
- randomAccessFile.seek(seek);
- char c = (char)randomAccessFile.read();
- builder.append(c);
- if(c == '\n')
- {
- builder = builder.reverse();
- tail = builder.toString() + tail;
- lines++;
- builder.setLength(0);
- if (lines == linesToRead)
- {
- break;
- }
- }
- }
- randomAccessFile.close();
- if(!jcraftReadSwConfigFileFromDisk())
- debugLog.printRTAriDebug (fn, "tail='"+tail +"'");
- appendToFile(debugLogFileName, "tail='"+tail +"'\n");
- return tail;
- }
-
- public boolean jcraftReadSwConfigFileFromDisk()
- {
- if (jcraftReadSwConfigFileFromDisk.exists())
- return(true);
- else
- return(false);
- }
+ {
+ String fn = "SshJcraftWrapper.appendToFile";
+
+ try
+ {
+ // First check to see if a file 'fileName' exist, if it does
+ // write to it. If it does not exist, don't write to it.
+ File tmpFile = new File(fileName);
+ if (tmpFile.exists())
+ {
+ BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
+ out.write(dataToWrite);
+ out.close();
+ }
+ }
+ catch (IOException e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an IOException: e="+e);
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception: e="+e);
+ }
+ }
+
+
+ public String getTheDate()
+ {
+ Calendar cal = Calendar.getInstance();
+ java.util.Date today = cal.getTime();
+ DateFormat df1 = DateFormat.getDateInstance();
+ DateFormat df3 = new SimpleDateFormat("MM/dd/yyyy H:mm:ss ");
+ return (df3.format(today));
+ }
+
+
+ public void appendToRouterFile (String fileName, StringBuffer dataToWrite)
+ {
+ String fnName = "SshJcraftWrapper.appendToRouterFile";
+ debugLog.printRTAriDebug (fnName, "Entered.... ");
+ try
+ {
+ // First check to see if a file 'fileName' exist, if it does
+ // write to it. If it does not exist, don't write to it.
+ File tmpFile = new File(fileName);
+ {
+ // if ((tmpFile.exists()) && (tmpFile.setWritable(true, true)))
+ if (tmpFile.exists())
+ {
+ BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
+ // out.write("<!-- "+getTheDate() +": " +tId +" -->\n");
+ out.write(dataToWrite.toString());
+ out.close();
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ System.err.println("writeToFile() exception: " + e);
+ e.printStackTrace();
+ }
+ }
+
+ public void appendToRouterFile (String fileName, int len)
+ {
+ String fnName = "SshJcraftWrapper.appendToFile";
+ // debugLog.printRTAriDebug (fnName, "Entered.... len="+len);
+ try
+ {
+ // First check to see if a file 'fileName' exist, if it does
+ // write to it. If it does not exist, don't write to it.
+ File tmpFile = new File(fileName);
+ // if ((tmpFile.exists()) && (tmpFile.setWritable(true, true)))
+ if (tmpFile.exists())
+ {
+ BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
+ // out.write("<!-- "+getTheDate() +": " +tId +" -->\n");
+ out.write(charBuffer, 0, len);
+ out.close();
+ }
+ }
+ catch (IOException e)
+ {
+ System.err.println("writeToFile() exception: " + e);
+ e.printStackTrace();
+ }
+ }
+
+ public String removeWhiteSpaceAndNewLineCharactersAroundString(String str)
+ {
+ if (str != null)
+ {
+ StringTokenizer strTok = new StringTokenizer(str, "\n");
+ StringBuffer sb = new StringBuffer();
+
+ while (strTok.hasMoreTokens())
+ {
+ String line = strTok.nextToken();
+ sb.append(line);
+ }
+ return (sb.toString().trim());
+ }
+ else
+ return(str);
+ }
+
+ public String stripOffCmdFromRouterResponse(String routerResponse)
+ {
+ String fn = "SshJcraftWrapper.stripOffCmdFromRouterResponse";
+ // appendToFile(debugLogFileName, fn+": routerResponse='"+routerResponse +"'\n");
+
+ // The session of SSH will echo the command sent to the router, in the router's response.
+ // Since all our commands are terminated by a '\n', strip off the first line
+ // of the response from the router. This first line contains the orginal command.
+
+ StringTokenizer rr = new StringTokenizer(routerResponse, "\n");
+ StringBuffer sb = new StringBuffer();
+
+ int numTokens = rr.countTokens();
+ // debugLog.printRTAriDebug (fn, "Number of lines in the response from the router is:" +numTokens);
+ if (numTokens > 1)
+ {
+ rr.nextToken(); //Skip the first line.
+ while (rr.hasMoreTokens())
+ {
+ sb.append(rr.nextToken()+'\n');
+ }
+ }
+ return (sb.toString());
+ }
+
+ public void setRouterCommandType(String type)
+ {
+ String fn = "SshJcraftWrapper.setRouterCommandType";
+ this.routerCmdType = type;
+ debugLog.printRTAriDebug (fn, "Setting routerCmdType to a value of '"+type +"'");
+ }
+
+ public String getLastFewLinesOfFile(File file, int linesToRead) throws FileNotFoundException, IOException
+ {
+ String fn = "SshJcraftWrapper.getLastFewLinesOfFile";
+ RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
+ int lines = 0;
+ StringBuilder builder = new StringBuilder();
+ String tail = "";
+ long length = file.length();
+ length--;
+ randomAccessFile.seek(length);
+ for(long seek = length; seek >= 0; --seek)
+ {
+ randomAccessFile.seek(seek);
+ char c = (char)randomAccessFile.read();
+ builder.append(c);
+ if(c == '\n')
+ {
+ builder = builder.reverse();
+ // System.out.println(builder.toString());
+ tail = builder.toString() + tail;
+ lines++;
+ builder.setLength(0);
+ if (lines == linesToRead)
+ {
+ break;
+ }
+ }
+ }
+ randomAccessFile.close();
+ if(!jcraftReadSwConfigFileFromDisk())
+ debugLog.printRTAriDebug (fn, "tail='"+tail +"'");
+ appendToFile(debugLogFileName, "tail='"+tail +"'\n");
+ return tail;
+ }
+
+ public boolean jcraftReadSwConfigFileFromDisk()
+ {
+ if (jcraftReadSwConfigFileFromDisk.exists())
+ return(true);
+ else
+ return(false);
+ }
public String getEquipNameCode()
{
return (equipNameCode);
+
}
public void setEquipNameCode(String equipNameCode)
@@ -812,58 +823,57 @@ public class SshJcraftWrapper
}
// Routine does reads until it has read 'nchars' or times out.
- public void receiveUntilBufferFlush (int ncharsSent, int timeout, String message) throws TimedOutException, IOException
- {
- String fn = "SshJcraftWrapper.receiveUntilBufferFlush";
- StringBuffer sb2 = new StringBuffer();
- StringBuffer sbReceive = new StringBuffer();
- debugLog.printRTAriDebug (fn, "ncharsSent="+ncharsSent+" timeout="+timeout +" "+message);
- int ncharsTotalReceived = 0;
- int ncharsRead = 0;
- boolean flag = false;
- charactersFromBufferFlush.setLength(0);
-
- long deadline = new Date().getTime() + timeout;
- logMemoryUsage();
- try
- {
- session.setTimeout(timeout); // This is the socket timeout value.
- while (true)
- {
- if(new Date().getTime() > deadline)
- {
- debugLog.printRTAriDebug (fn, "Throwing a TimedOutException: time in routine has exceed our deadline: ncharsSent="
- +ncharsSent+" ncharsTotalReceived="+ncharsTotalReceived);
- flag = true;
- throw new TimedOutException("Timeout: time in routine has exceed our deadline");
- }
- ncharsRead = reader.read(charBuffer, 0, BUFFER_SIZE);
- if (listener != null)
- listener.receivedString(String.copyValueOf(charBuffer,0,ncharsRead));
- appendToRouterFile("/tmp/"+RouterName, ncharsRead);
- ncharsTotalReceived = ncharsTotalReceived + ncharsRead;
- if (ncharsTotalReceived >= ncharsSent)
+ public void receiveUntilBufferFlush (int ncharsSent, int timeout, String message) throws TimedOutException, IOException
+ {
+ String fn = "SshJcraftWrapper.receiveUntilBufferFlush";
+ StringBuffer sb2 = new StringBuffer();
+ StringBuffer sbReceive = new StringBuffer();
+ debugLog.printRTAriDebug (fn, "ncharsSent="+ncharsSent+" timeout="+timeout +" "+message);
+ int ncharsTotalReceived = 0;
+ int ncharsRead = 0;
+ boolean flag = false;
+ charactersFromBufferFlush.setLength(0);
+
+ long deadline = new Date().getTime() + timeout;
+ logMemoryUsage();
+ try
+ {
+ session.setTimeout(timeout); // This is the socket timeout value.
+ while (true)
+ {
+ if(new Date().getTime() > deadline)
{
- debugLog.printRTAriDebug (fn, "Received the correct number of characters, ncharsSent="
- +ncharsSent +" ncharsTotalReceived="+ncharsTotalReceived);
- logMemoryUsage();
- return;
+ debugLog.printRTAriDebug (fn, "Throwing a TimedOutException: time in routine has exceed our deadline: ncharsSent="+ncharsSent+" ncharsTotalReceived="+ncharsTotalReceived);
+ flag = true;
+ throw new TimedOutException("Timeout: time in routine has exceed our deadline");
}
- }
- }
- catch (JSchException e)
- {
- debugLog.printRTAriDebug (fn, "Caught an JSchException e="+e.toString());
- debugLog.printRTAriDebug (fn, "ncharsSent="+ncharsSent+" ncharsTotalReceived="+ncharsTotalReceived +" ncharsRead="+ncharsRead);
- throw new TimedOutException (e.toString());
- }
- }
+ ncharsRead = reader.read(charBuffer, 0, BUFFER_SIZE);
+ if (listener != null)
+ listener.receivedString(String.copyValueOf(charBuffer,0,ncharsRead));
+ appendToRouterFile("/tmp/"+RouterName, ncharsRead);
+ ncharsTotalReceived = ncharsTotalReceived + ncharsRead;
+ // debugLog.printRTAriDebug (fn, "::ncharsSent="+ncharsSent+" ncharsTotalReceived="+ncharsTotalReceived +" ncharsRead="+ncharsRead);
+ if (ncharsTotalReceived >= ncharsSent)
+ {
+ debugLog.printRTAriDebug (fn, "Received the correct number of characters, ncharsSent="+ncharsSent +" ncharsTotalReceived="+ncharsTotalReceived);
+ logMemoryUsage();
+ return;
+ }
+ }
+ }
+ catch (JSchException e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an JSchException e="+e.toString());
+ debugLog.printRTAriDebug (fn, "ncharsSent="+ncharsSent+" ncharsTotalReceived="+ncharsTotalReceived +" ncharsRead="+ncharsRead);
+ throw new TimedOutException (e.toString());
+ }
+ }
public String getHostName()
{
return(hostName);
}
-
+
public String getUserName()
{
return(userName);
@@ -880,23 +890,24 @@ public class SshJcraftWrapper
try
{
Session sftpSession = jsch.getSession(userName, hostName, 22);
- UserInfo ui = new MyUserInfo();
- sftpSession.setPassword(passWord);
- sftpSession.setUserInfo(ui);
- sftpSession.connect(30*1000);
- debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
+ UserInfo ui = new MyUserInfo();
+ sftpSession.setPassword(passWord);
+ sftpSession.setUserInfo(ui);
+ sftpSession.connect(30*1000);
+ debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
ChannelSftp sftp=(ChannelSftp)sftpSession.openChannel("sftp");
- debugLog.printRTAriDebug (fn, "Connecting....");
+ debugLog.printRTAriDebug (fn, "Connecting....");
sftp.connect();
- debugLog.printRTAriDebug (fn, "Sending "+sourcePath +" --> "+destDirectory);
+ debugLog.printRTAriDebug (fn, "Sending "+sourcePath +" --> "+destDirectory);
sftp.put(sourcePath, destDirectory, ChannelSftp.OVERWRITE);
- debugLog.printRTAriDebug (fn, "Sent successfully");
+ debugLog.printRTAriDebug (fn, "Sent successfully");
sftpSession.disconnect();
}
catch (Exception e)
{
- debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
- throw new IOException(e.toString());
+ debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
+ // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
+ throw new IOException(e.toString());
}
}
@@ -908,24 +919,25 @@ public class SshJcraftWrapper
try
{
Session sftpSession = jsch.getSession(userName, hostName, 22);
- UserInfo ui = new MyUserInfo();
- sftpSession.setPassword(passWord);
- sftpSession.setUserInfo(ui);
- sftpSession.connect(30*1000);
- debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
+ UserInfo ui = new MyUserInfo();
+ sftpSession.setPassword(passWord);
+ sftpSession.setUserInfo(ui);
+ sftpSession.connect(30*1000);
+ debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
ChannelSftp sftp=(ChannelSftp)sftpSession.openChannel("sftp");
- debugLog.printRTAriDebug (fn, "Connecting....");
+ debugLog.printRTAriDebug (fn, "Connecting....");
sftp.connect();
InputStream is = new ByteArrayInputStream(stringOfData.getBytes());
- debugLog.printRTAriDebug (fn, "Sending stringOfData --> "+fullPathDest);
+ debugLog.printRTAriDebug (fn, "Sending stringOfData --> "+fullPathDest);
sftp.put(is, fullPathDest, ChannelSftp.OVERWRITE);
- debugLog.printRTAriDebug (fn, "Sent successfully");
+ debugLog.printRTAriDebug (fn, "Sent successfully");
sftpSession.disconnect();
}
catch (Exception e)
{
- debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
- throw new IOException(e.toString());
+ debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
+ // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
+ throw new IOException(e.toString());
}
}
@@ -935,27 +947,27 @@ public class SshJcraftWrapper
try
{
Session sftpSession = jsch.getSession(userName, hostName, 22);
- UserInfo ui = new MyUserInfo();
- sftpSession.setPassword(passWord);
- sftpSession.setUserInfo(ui);
- sftpSession.connect(30*1000);
- debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
+ UserInfo ui = new MyUserInfo();
+ sftpSession.setPassword(passWord);
+ sftpSession.setUserInfo(ui);
+ sftpSession.connect(30*1000);
+ debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
ChannelSftp sftp=(ChannelSftp)sftpSession.openChannel("sftp");
- debugLog.printRTAriDebug (fn, "Connecting....");
+ debugLog.printRTAriDebug (fn, "Connecting....");
sftp.connect();
InputStream in = null;
in = sftp.get(fullFilePathName);
String sftpFileString = readInputStreamAsString(in);
- debugLog.printRTAriDebug (fn, "Retreived successfully");
- // debugLog.printRTAriDebug (fn, "sftpFileString="+sftpFileString);
+ debugLog.printRTAriDebug (fn, "Retreived successfully");
+ // debugLog.printRTAriDebug (fn, "sftpFileString="+sftpFileString);
sftpSession.disconnect();
return(sftpFileString);
}
catch (Exception e)
{
- debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
+ debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
// dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
- throw new IOException(e.toString());
+ throw new IOException(e.toString());
}
}
@@ -978,97 +990,105 @@ public class SshJcraftWrapper
{
String fn = "SshJcraftWrapper.logMemoryUsage";
int mb = 1024*1024;
- long usedMemory;
- long maxMemoryAdvailable;
- long memoryLetfOnHeap;
- maxMemoryAdvailable = (runtime.maxMemory() / mb);
+ long usedMemory;
+ long maxMemoryAdvailable;
+ long memoryLetfOnHeap;
+ maxMemoryAdvailable = (runtime.maxMemory() / mb);
usedMemory = ((runtime.totalMemory()/mb) - (runtime.freeMemory()/mb));
memoryLetfOnHeap = maxMemoryAdvailable - usedMemory;
DebugLog.printAriDebug(fn, "maxMemoryAdvailable="+maxMemoryAdvailable +" usedMemory="+usedMemory +" memoryLetfOnHeap="+memoryLetfOnHeap);
}
+ // ----------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------
+ // ----------------------------------------------------------------------------
- // User specifies the port number, and the subsystem
- public void connect (String hostname, String username, String password, String prompt, int timeOut, int portNum, String subsystem) throws IOException
- {
- String fn = "SshJcraftWrapper.connect";
-
- debugLog.printRTAriDebug (fn, ":::Attempting to connect to "+hostname +" username="+username +" password="+password + " prompt='"+prompt +"' timeOut="+timeOut +" portNum="+portNum +" subsystem="+subsystem);
- RouterName = hostname;
- jsch = new JSch();
- try
- {
- session = jsch.getSession(username, hostname, portNum);
- UserInfo ui = new MyUserInfo();
- session.setPassword(password);
- session.setUserInfo(ui);
- session.setConfig("StrictHostKeyChecking", "no");
- session.connect(timeOut);
- session.setServerAliveCountMax(0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
- channel = session.openChannel("subsystem");
- ((ChannelSubsystem)channel).setSubsystem(subsystem);
- ((ChannelSubsystem)channel).setPty(true);
-
- inputStream = channel.getInputStream();
- dis = new DataInputStream(inputStream);
- reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
- channel.connect();
- debugLog.printRTAriDebug (fn, "Successfully connected.");
- debugLog.printRTAriDebug (fn, "Five second sleep....");
+
+ // User specifies the port number, and the subsystem
+ public void connect (String hostname, String username, String password, String prompt, int timeOut, int portNum, String subsystem) throws IOException
+ {
+ String fn = "SshJcraftWrapper.connect";
+
+ debugLog.printRTAriDebug (fn, ":::Attempting to connect to "+hostname +" username="+username +" password="+password + " prompt='"+prompt +"' timeOut="+timeOut +" portNum="+portNum +" subsystem="+subsystem);
+ RouterName = hostname;
+ jsch = new JSch();
+ try
+ {
+ session = jsch.getSession(username, hostname, portNum);
+ UserInfo ui = new MyUserInfo();
+ session.setPassword(password);
+ session.setUserInfo(ui);
+ session.setConfig("StrictHostKeyChecking", "no");
+ session.connect(timeOut);
+ session.setServerAliveCountMax(0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+ channel = session.openChannel("subsystem");
+ ((ChannelSubsystem)channel).setSubsystem(subsystem);
+ // ((ChannelSubsystem)channel).setPtyType("vt102");
+ ((ChannelSubsystem)channel).setPty(true);
+
+ inputStream = channel.getInputStream();
+ dis = new DataInputStream(inputStream);
+ reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+ channel.connect();
+ debugLog.printRTAriDebug (fn, "Successfully connected.");
+ debugLog.printRTAriDebug (fn, "Five second sleep....");
try { Thread.sleep(5000); } catch (java.lang.InterruptedException ee) { boolean ignore = true; }
- }
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception. e="+e);
- throw new IOException(e.toString());
- }
- }
-
- public void connect (String hostName, String username, String password, int portNumber) throws IOException
- {
- String fn = "SshJcraftWrapper.connect";
- jsch = new JSch();
- debugLog.printRTAriDebug (fn, "::Attempting to connect to "+hostName +" username="+username +" password="+password +" portNumber="+portNumber);
- debugLog.printRTAriDebug (fn, "Trace C");
- RouterName = hostName;
- this.hostName = hostName;
- userName = username;
- passWord = password;
- try
- {
- java.util.Properties config = new java.util.Properties();
- config.put("StrictHostKeyChecking", "no");
- session = jsch.getSession(username, hostName, 22);
- UserInfo ui = new MyUserInfo();
- session.setConfig(config);
- session.setPassword(password);
- session.setUserInfo(ui);
- session.connect(30000);
- channel = session.openChannel("shell");
- session.setServerAliveCountMax(0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
- ((ChannelShell)channel).setPtyType("vt102");
- inputStream = channel.getInputStream();
- dis = new DataInputStream(inputStream);
- reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
- channel.connect();
- debugLog.printRTAriDebug (fn, "::Successfully connected.");
- debugLog.printRTAriDebug (fn, "::Flushing input buffer");
- try
- {
- receiveUntil(":~#", 9000, "No cmd was sent, just waiting, but we can stop on a '~#'");
- }
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception::: Nothing to flush out.");
- }
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception. e="+e);
+ throw new IOException(e.toString());
+ }
+ }
+
+ public void connect (String hostName, String username, String password, int portNumber) throws IOException
+ {
+ String fn = "SshJcraftWrapper.connect";
+ jsch = new JSch();
+ debugLog.printRTAriDebug (fn, "::Attempting to connect to "+hostName +" username="+username +" password="+password +" portNumber="+portNumber);
+ debugLog.printRTAriDebug (fn, "Trace C");
+ RouterName = hostName;
+ this.hostName = hostName;
+ userName = username;
+ passWord = password;
+ try
+ {
+ java.util.Properties config = new java.util.Properties();
+ config.put("StrictHostKeyChecking", "no");
+ session = jsch.getSession(username, hostName, 22);
+ // session = jsch.getSession(username, hostName, portNumber);
+ UserInfo ui = new MyUserInfo();
+ session.setConfig(config);
+ session.setPassword(password);
+ session.setUserInfo(ui);
+ session.connect(30000);
+ channel = session.openChannel("shell");
+ session.setServerAliveCountMax(0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+ ((ChannelShell)channel).setPtyType("vt102");
+ inputStream = channel.getInputStream();
+ dis = new DataInputStream(inputStream);
+ reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+ channel.connect();
+ debugLog.printRTAriDebug (fn, "::Successfully connected.");
+ debugLog.printRTAriDebug (fn, "::Flushing input buffer");
+ try
+ {
+ receiveUntil(":~#", 9000, "No cmd was sent, just waiting, but we can stop on a '~#'");
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception::: Nothing to flush out.");
+ }
- }
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception. e="+e);
- throw new IOException(e.toString());
- }
- }
+ }
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception. e="+e);
+ // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostName +" "+e);
+ throw new IOException(e.toString());
+ }
+ }
public void put(String sourcePath, String destDirectory) throws IOException
@@ -1076,24 +1096,25 @@ public class SshJcraftWrapper
String fn = "SshJcraftWrapper.sftp";
try
{
- Session sftpSession = jsch.getSession(userName, hostName, 22);
- UserInfo ui = new MyUserInfo();
- sftpSession.setPassword(passWord);
- sftpSession.setUserInfo(ui);
- sftpSession.connect(30*1000);
- debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
- ChannelSftp sftp=(ChannelSftp)sftpSession.openChannel("sftp");
- debugLog.printRTAriDebug (fn, "Connecting....");
- sftp.connect();
- debugLog.printRTAriDebug (fn, "Sending "+sourcePath +" --> "+destDirectory);
- sftp.put(sourcePath, destDirectory, ChannelSftp.OVERWRITE);
- debugLog.printRTAriDebug (fn, "Sent successfully");
+ Session sftpSession = jsch.getSession(userName, hostName, 22);
+ UserInfo ui = new MyUserInfo();
+ sftpSession.setPassword(passWord);
+ sftpSession.setUserInfo(ui);
+ sftpSession.connect(30*1000);
+ debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
+ ChannelSftp sftp=(ChannelSftp)sftpSession.openChannel("sftp");
+ debugLog.printRTAriDebug (fn, "Connecting....");
+ sftp.connect();
+ debugLog.printRTAriDebug (fn, "Sending "+sourcePath +" --> "+destDirectory);
+ sftp.put(sourcePath, destDirectory, ChannelSftp.OVERWRITE);
+ debugLog.printRTAriDebug (fn, "Sent successfully");
sftpSession.disconnect();
}
catch (Exception e)
{
- debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
- throw new IOException(e.toString());
+ debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
+ // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
+ throw new IOException(e.toString());
}
}
@@ -1103,36 +1124,48 @@ public class SshJcraftWrapper
Session sftpSession = null;
try
{
- debugLog.printRTAriDebug (fn, "userName="+userName +" hostName="+hostName +" passWord="+passWord);
- jsch = new JSch();
+ debugLog.printRTAriDebug (fn, "userName="+userName +" hostName="+hostName +" passWord="+passWord);
+ jsch = new JSch();
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
sftpSession = jsch.getSession(userName, hostName, 22);
- UserInfo ui = new MyUserInfo();
- sftpSession.setPassword(passWord);
- sftpSession.setUserInfo(ui);
+ UserInfo ui = new MyUserInfo();
+ sftpSession.setPassword(passWord);
+ sftpSession.setUserInfo(ui);
sftpSession.setConfig(config);
- sftpSession.connect(30*1000);
- debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
+ sftpSession.connect(30*1000);
+ debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
ChannelSftp sftp=(ChannelSftp)sftpSession.openChannel("sftp");
- debugLog.printRTAriDebug (fn, "Connecting....");
+ debugLog.printRTAriDebug (fn, "Connecting....");
sftp.connect();
String oldFiles = fullPathDest +"*";
- debugLog.printRTAriDebug (fn, "Deleting old files --> "+oldFiles);
- sftp.rm(oldFiles);
- debugLog.printRTAriDebug (fn, "Sending stringOfData --> "+fullPathDest);
+ debugLog.printRTAriDebug (fn, "Deleting old files --> "+oldFiles);
+ try{
+ sftp.rm(oldFiles);
+ debugLog.printRTAriDebug (fn, "Sending stringOfData --> "+fullPathDest);
+ }
+ catch(SftpException sft){
+ String exp = "No such file";
+ if(sft.getMessage()!=null && sft.getMessage().contains(exp))
+ debugLog.printRTAriDebug (fn, "No files found -- Continue");
+ else{
+ debugLog.printRTAriDebug (fn, "Exception while sftp.rm " + sft.getMessage());
+ sft.printStackTrace();
+ throw sft;
+ }
+ }
sftp.put(is, fullPathDest, ChannelSftp.OVERWRITE);
- debugLog.printRTAriDebug (fn, "Sent successfully");
+ debugLog.printRTAriDebug (fn, "Sent successfully");
sftpSession.disconnect();
sftpSession = null;
}
catch (Exception e)
{
- debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
+ debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
sftpSession.disconnect();
sftpSession = null;
// dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
- throw new IOException(e.toString());
+ throw new IOException(e.toString());
}
}
@@ -1143,57 +1176,57 @@ public class SshJcraftWrapper
Session sftpSession = null;
try
{
- debugLog.printRTAriDebug (fn, "userName="+userName +" hostName="+hostName +" passWord="+passWord);
- jsch = new JSch();
+ debugLog.printRTAriDebug (fn, "userName="+userName +" hostName="+hostName +" passWord="+passWord);
+ jsch = new JSch();
sftpSession = jsch.getSession(userName, hostName, 22);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
- UserInfo ui = new MyUserInfo();
- sftpSession.setPassword(passWord);
- sftpSession.setUserInfo(ui);
+ UserInfo ui = new MyUserInfo();
+ sftpSession.setPassword(passWord);
+ sftpSession.setUserInfo(ui);
sftpSession.setConfig(config);
- sftpSession.connect(30*1000);
- debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
+ sftpSession.connect(30*1000);
+ debugLog.printRTAriDebug (fn, "Opening up an sftp channel....");
ChannelSftp sftp=(ChannelSftp)sftpSession.openChannel("sftp");
- debugLog.printRTAriDebug (fn, "Connecting....");
+ debugLog.printRTAriDebug (fn, "Connecting....");
sftp.connect();
InputStream in = null;
in = sftp.get(fullFilePathName);
String sftpFileString = readInputStreamAsString(in);
- debugLog.printRTAriDebug (fn, "Retreived successfully");
- // debugLog.printRTAriDebug (fn, "sftpFileString="+sftpFileString);
+ debugLog.printRTAriDebug (fn, "Retreived successfully");
+ // debugLog.printRTAriDebug (fn, "sftpFileString="+sftpFileString);
sftpSession.disconnect();
sftpSession = null;
return(sftpFileString);
}
catch (Exception e)
{
- debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
+ debugLog.printRTAriDebug (fn, "Caught an Exception, e="+e);
sftpSession.disconnect();
sftpSession = null;
// dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e);
- throw new IOException(e.toString());
+ throw new IOException(e.toString());
}
}
public String send(String cmd, String delimiter) throws IOException
- {
- String fn = "SshJcraftWrapper.send";
- OutputStream out = channel.getOutputStream();
- DataOutputStream dos = new DataOutputStream(out);
+ {
+ String fn = "SshJcraftWrapper.send";
+ OutputStream out = channel.getOutputStream();
+ DataOutputStream dos = new DataOutputStream(out);
- if ((cmd.charAt(cmd.length() - 1) != '\n') && (cmd.charAt(cmd.length() - 1) != '\r'))
- cmd += "\n";
+ if ((cmd.charAt(cmd.length() - 1) != '\n') && (cmd.charAt(cmd.length() - 1) != '\r'))
+ cmd += "\n";
int length = cmd.length();
int i = -1;
int nchars = 300000;
int ncharsTotalSent = 0;
int ncharsSent = 0;
- debugLog.printRTAriDebug (fn, "Length of cmd is:" +length); // 2,937,706
- debugLog.printRTAriDebug (fn, "Length of cmd is:" +length); // 2,937,706
- try
- {
+ debugLog.printRTAriDebug (fn, "Length of cmd is:" +length); // 2,937,706
+ debugLog.printRTAriDebug (fn, "Length of cmd is:" +length); // 2,937,706
+ try
+ {
if (length > 600000)
{
int timeout = 9000;
@@ -1202,42 +1235,43 @@ public class SshJcraftWrapper
String Cmd = cmd.substring(i, Math.min(length, i + nchars));
ncharsSent = Cmd.length();
ncharsTotalSent = ncharsTotalSent + Cmd.length();
- debugLog.printRTAriDebug (fn, "i="+i +" Sending Cmd: ncharsSent="+ncharsSent);
- dos.writeBytes(Cmd);
- dos.flush();
+ debugLog.printRTAriDebug (fn, "i="+i +" Sending Cmd: ncharsSent="+ncharsSent);
+ dos.writeBytes(Cmd);
+ dos.flush();
try
{
- debugLog.printRTAriDebug (fn, ":::i="+i +" length="+length);
+ debugLog.printRTAriDebug (fn, ":::i="+i +" length="+length);
if (ncharsSent < length)
- receiveUntilBufferFlush (ncharsSent, timeout, "buffer flush i="+i);
+ receiveUntilBufferFlush (ncharsSent, timeout, "buffer flush i="+i);
else
{
- debugLog.printRTAriDebug (fn, "i="+i +" No Waiting this time....");
- dos.flush();
+ debugLog.printRTAriDebug (fn, "i="+i +" No Waiting this time....");
+ dos.flush();
}
}
- catch (Exception e)
- {
- debugLog.printRTAriDebug (fn, "Caught an Exception: Nothing to flush out.");
+ catch (Exception e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an Exception: Nothing to flush out.");
}
}
}
else
{
- debugLog.printRTAriDebug (fn, "Before executing the dos.writeBytes");
- dos.writeBytes(cmd);
+ debugLog.printRTAriDebug (fn, "Before executing the dos.writeBytes");
+ dos.writeBytes(cmd);
}
- dos.flush();
+ dos.flush();
// Now lets get the response.
String response = receiveUntil (delimiter, 300000, cmd);
- debugLog.printRTAriDebug (fn, "Leaving method");
+ debugLog.printRTAriDebug (fn, "Leaving method");
return(response);
- }
- catch (IOException e)
- {
- debugLog.printRTAriDebug (fn, "Caught an IOException. e="+e);
- throw new IOException(e.toString());
- }
- }
+ }
+ catch (IOException e)
+ {
+ debugLog.printRTAriDebug (fn, "Caught an IOException. e="+e);
+ throw new IOException(e.toString());
+ }
+ }
+
}