# HG changeset patch
# User Carl Byington
# Date 1400798495 25200
# Node ID 3b760b39962a4da77d68fe5e919528a48378b14a
# Parent 3248b46f3973000a9e796c6ea0db506ffddfac7a
adding tn5250 files
diff -r 3248b46f3973 -r 3b760b39962a res/values/strings.xml
--- a/res/values/strings.xml Thu May 22 13:41:05 2014 -0700
+++ b/res/values/strings.xml Thu May 22 15:41:35 2014 -0700
@@ -119,6 +119,11 @@
"Host %1$s key fingerprint is %2$s"
+
+ "The certificate is %1$s"
+ "Unknown Certificate - Do you accept it?"
+ "Do you want to save this certificate?"
+
"Passwords do not match!"
"Wrong password!"
"Private key appears corrupt!"
diff -r 3248b46f3973 -r 3b760b39962a src/com/five_ten_sg/connectbot/transport/SSH.java
--- a/src/com/five_ten_sg/connectbot/transport/SSH.java Thu May 22 13:41:05 2014 -0700
+++ b/src/com/five_ten_sg/connectbot/transport/SSH.java Thu May 22 15:41:35 2014 -0700
@@ -87,8 +87,9 @@
}
/**
+ * @param host
* @param bridge
- * @param db
+ * @param manager
*/
public SSH(HostBean host, TerminalBridge bridge, TerminalManager manager) {
super(host, bridge, manager);
diff -r 3248b46f3973 -r 3b760b39962a src/org/tn5250j/framework/Tn5250jListener.java
--- a/src/org/tn5250j/framework/Tn5250jListener.java Thu May 22 13:41:05 2014 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/**Copyright (C) 2004 Seagull Software
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*
-*@author bvansomeren (bvansomeren@seagull.nl)
-*/
-package org.tn5250j.framework;
-
-import java.io.File;
-import java.util.Properties;
-
-public abstract class Tn5250jListener {
- public abstract void actionPerformed(Tn5250jEvent event);
-
- public abstract void init(File fileDir, Properties config);
-
- public abstract void run();
-
- public abstract void destroy();
-
- public abstract String getName();
-
- public abstract void setController(Tn5250jController control);
-
- public abstract void sessionCreated(Tn5250jSession session);
-}
diff -r 3248b46f3973 -r 3b760b39962a src/org/tn5250j/framework/tn5250/tnvt.java
--- a/src/org/tn5250j/framework/tn5250/tnvt.java Thu May 22 13:41:05 2014 -0700
+++ b/src/org/tn5250j/framework/tn5250/tnvt.java Thu May 22 15:41:35 2014 -0700
@@ -80,6 +80,9 @@
import javax.net.ssl.SSLSocket;
+import com.five_ten_sg.connectbot.service.TerminalBridge;
+import com.five_ten_sg.connectbot.service.TerminalManager;
+
import org.tn5250j.Session5250;
import org.tn5250j.TN5250jConstants;
import org.tn5250j.encoding.CharMappings;
@@ -89,8 +92,6 @@
import org.tn5250j.tools.logging.TN5250jLogger;
public final class tnvt implements Runnable {
-
-
// negotiating commands
private static final byte IAC = (byte) -1; // 255 FF
private static final byte DONT = (byte) -2; //254 FE
@@ -131,7 +132,6 @@
private Thread pthread;
private int readType;
private boolean enhanced = true;
- private Session5250 controller;
private boolean cursorOn = false;
private String session = "";
private int port = 23;
@@ -160,6 +160,8 @@
private boolean firstScreen;
private String sslType;
private WTDSFParser sfParser;
+ private TerminalBridge bridge;
+ private TerminalManager manager;
private final TN5250jLogger log = TN5250jLogFactory.getLogger(this.getClass());
@@ -169,17 +171,16 @@
* @param type
* @param support132
*/
- public tnvt(Session5250 session, Screen5250 screen52, boolean type, boolean support132) {
-
- controller = session;
+ public tnvt(Screen5250 screen52, boolean enhanced, boolean support132, TerminalBridge bridge, TerminalManager manager) {
if (log.isInfoEnabled()) {
log.info(" new session -> " + controller.getSessionName());
}
-
- enhanced = type;
+ this.screen52 = screen52;
this.support132 = support132;
+ this.enhanced = enhanced;
+ this.bridge = bridge;
+ this.manager = manager;
setCodePage("37");
- this.screen52 = screen52;
dataIncluded = new boolean[24];
if (System.getProperties().containsKey("SESSION_CONNECT_USER")) {
@@ -295,9 +296,8 @@
// sock = new Socket(s, port);
//smk - For SSL compability
SocketConnector sc = new SocketConnector();
- if (sslType != null)
- sc.setSSLType(sslType);
- sock = sc.createSocket(s, port);
+ if (sslType != null) sc.setSSLType(sslType);
+ sock = sc.createSocket(s, port, bridge, manager);
if (sock == null) {
log.warn("I did not get a socket");
@@ -384,11 +384,9 @@
log.info("Closing socket");
sock.close();
}
- if (bin != null)
- bin.close();
- if (bout != null)
- bout.close();
- connected = false;
+ if (bin != null) bin.close();
+ if (bout != null) bout.close();
+ connected = false;
firstScreen = false;
// WVL - LDC : TR.000345 : properly disconnect and clear screen
@@ -398,9 +396,6 @@
screen52.setCursorActive(false);
screen52.clearAll();
screen52.restoreScreen();
-
- controller.fireSessionChanged(TN5250jConstants.STATE_DISCONNECTED);
-
} catch (Exception exception) {
log.warn(exception.getMessage());
connected = false;
@@ -1165,95 +1160,8 @@
}
- // private final void execCmd() {
- // String name = "";
- // String argString = "";
- //
- // StringBuffer sb = new StringBuffer();
- // sb.append(screen52.screen[0][3].getChar());
- // sb.append(screen52.screen[0][4].getChar());
- // sb.append(screen52.screen[0][5].getChar());
- // sb.append(screen52.screen[0][6].getChar());
- //
- // System.out.println("command = " + sb);
- // int x = 8;
- // sb.setLength(0);
- // while (screen52.screen[0][x].getChar() > ' ') {
- // sb.append(screen52.screen[0][x].getChar());
- // x++;
- // }
- // name = sb.toString();
- // System.out.println("name = " + name);
- //
- // sb.setLength(0);
- // x++;
- // while (screen52.screen[0][x].getChar() >= ' ') {
- // sb.append(screen52.screen[0][x].getChar());
- // x++;
- // }
- // argString = sb.toString();
- // System.out.println("args = " + argString);
- //
- // sendAidKey(AID_ENTER);
- //
- // try {
- //
- // Class c = Class.forName(name);
- // String args1[] = {argString};
- // String args2[] = {};
- //
- // Method m = c.getMethod("main",
- // new Class[] { args1.getClass() });
- // m.setAccessible(true);
- // int mods = m.getModifiers();
- // if (m.getReturnType() !=
- // void.class || !Modifier.isStatic(mods) ||
- // !Modifier.isPublic(mods)) {
- //
- // throw new NoSuchMethodException("main");
- // }
- // try {
- // if (argString.length() > 0)
- // m.invoke(null, new Object[] { args1 });
- // else
- // m.invoke(null, new Object[] { args2 });
- // }
- // catch (IllegalAccessException e) {
- // // This should not happen, as we have
- // // disabled access checks
- // System.out.println("iae " + e.getMessage());
- //
- // }
- // }
- // catch (ClassNotFoundException cnfe) {
- // System.out.println("cnfe " + cnfe.getMessage());
- // }
- // catch (NoSuchMethodException nsmf) {
- // System.out.println("nsmf " + nsmf.getMessage());
- // }
- // catch (InvocationTargetException ite) {
- // System.out.println("ite " + ite.getMessage());
- // }
- // // catch (IllegalAccessException iae) {
- // // System.out.println("iae " + iae.getMessage());
- // // }
- // // catch (InstantiationException ie) {
- // // System.out.println("ie " + ie.getMessage());
- // // }
- // // try {
- // //
- // // Runtime rt = Runtime.getRuntime();
- // // Process proc = rt.exec("notepad");
- // // int exitVal = proc.exitValue();
- // // }
- // // catch (Throwable t) {
- // //
- // // t.printStackTrace();
- // // }
- // }
private final void readScreen() throws IOException {
-
int rows = screen52.getRows();
int cols = screen52.getColumns();
byte abyte0[] = new byte[rows * cols];
@@ -1263,7 +1171,6 @@
}
private final void fillScreenArray(byte[] sa, int rows, int cols) {
-
int la = 32;
int sac = 0;
int len = rows * cols;
@@ -1980,12 +1887,9 @@
break;
case 21: // WTDSF - Write To Display Structured Field order
- log
- .debug("WTDSF - Write To Display Structured Field order");
+ log.debug("WTDSF - Write To Display Structured Field order");
byte[] seg = bk.getSegment();
error = sfParser.parseWriteToDisplayStructuredField(seg);
-
- // error = writeToDisplayStructuredField();
break;
case 29: // SF - Start of Field
@@ -2002,8 +1906,7 @@
// control word
// check if the first fcw1 is an 0x81 if it is then get
- // the
- // next pair for checking
+ // the next pair for checking
if (fcw1 == 0x81) {
bk.getNextByte();
fcw1 = bk.getNextByte() & 0xff; // check for field
@@ -2023,9 +1926,7 @@
+ " "
+ Integer.toHexString(bk
.getNextByte() & 0xff));
- // bk.getNextByte();
- attr = bk.getNextByte() & 0xff; // attribute
- // field
+ attr = bk.getNextByte() & 0xff; // attribute field
}
} else {
attr = fcw1; // attribute of field
@@ -2133,10 +2034,8 @@
screen52.clearTable();
// well that is the first time I have seen this. This fixes a
- // problem
- // with S/36 command line. Finally got it.
- if (l <= 3)
- return false;
+ // problem with S/36 command line. Finally got it.
+ if (l <= 3) return false;
screen52.setErrorLine(bk.getNextByte()); // error row
diff -r 3248b46f3973 -r 3b760b39962a src/org/tn5250j/framework/transport/SSL/SSLImplementation.java
--- a/src/org/tn5250j/framework/transport/SSL/SSLImplementation.java Thu May 22 13:41:05 2014 -0700
+++ b/src/org/tn5250j/framework/transport/SSL/SSLImplementation.java Thu May 22 15:41:35 2014 -0700
@@ -37,7 +37,9 @@
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
-import javax.swing.JOptionPane;
+
+import com.five_ten_sg.connectbot.service.TerminalBridge;
+import com.five_ten_sg.connectbot.service.TerminalManager;
import org.tn5250j.GlobalConfigure;
import org.tn5250j.framework.transport.SSLInterface;
@@ -49,9 +51,9 @@
* This class implements the SSLInterface and is used to create SSL socket
* instances.
*
- *
+ *
* @author Stephen M. Kennedy
- *
+ *
*/
public class SSLImplementation implements SSLInterface, X509TrustManager {
@@ -61,6 +63,10 @@
private String userKsPath;
private char[] userksPassword = "changeit".toCharArray();
+ TerminalBridge bridge = null;
+ TerminalManager manager = null;
+ String target = null; // destination:port
+
KeyManagerFactory userkmf = null;
TrustManagerFactory usertmf = null;
@@ -71,7 +77,9 @@
TN5250jLogger logger;
- public SSLImplementation() {
+ public SSLImplementation(TerminalBridge bridge, TerminalManager manager) {
+ this.bridge = bridge;
+ this.manager = manager;
logger = TN5250jLogFactory.getLogger(getClass());
}
@@ -107,6 +115,7 @@
throw new IllegalStateException("SSL Context Not Initialized");
SSLSocket socket = null;
try {
+ target = destination + ":" + String.valueOf(port);
socket = (SSLSocket) sslContext.getSocketFactory().createSocket(
destination, port);
} catch (Exception e) {
@@ -119,7 +128,7 @@
/*
* (non-Javadoc)
- *
+ *
* @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
*/
public X509Certificate[] getAcceptedIssuers() {
@@ -128,7 +137,7 @@
/*
* (non-Javadoc)
- *
+ *
* @see
* javax.net.ssl.X509TrustManager#checkClientTrusted(java.security.cert.
* X509Certificate[], java.lang.String)
@@ -141,7 +150,7 @@
/*
* (non-Javadoc)
- *
+ *
* @see
* javax.net.ssl.X509TrustManager#checkServerTrusted(java.security.cert.
* X509Certificate[], java.lang.String)
@@ -181,19 +190,16 @@
certInfo = certInfo.concat("Public Key: "
+ cert.getPublicKey().getFormat() + "\n");
- int accept = JOptionPane
- .showConfirmDialog(null, certInfo, "Unknown Certificate - Do you accept it?",
- javax.swing.JOptionPane.YES_NO_OPTION);
- if (accept != JOptionPane.YES_OPTION) {
+ bridge.outputLine(manager.res.getString(R.string.host_authenticity_warning, target));
+ bridge.outputLine(manager.res.getString(R.string.host_certificate, certInfo));
+ Boolean result = bridge.promptHelper.requestBooleanPrompt(null, manager.res.getString(R.string.prompt_accept_certificate));
+ if ((result == null) || (!result.booleanValue()) {
throw new java.security.cert.CertificateException(
"Certificate Rejected");
}
- int save = JOptionPane.showConfirmDialog(null,
- "Remember this certificate?", "Save Certificate",
- javax.swing.JOptionPane.YES_NO_OPTION);
-
- if (save == JOptionPane.YES_OPTION) {
+ result = bridge.promptHelper.requestBooleanPrompt(null, manager.res.getString(R.string.prompt_save_certificate));
+ if ((result != null) && (result.booleanValue()) {
try {
userks.setCertificateEntry(cert.getSubjectDN().getName(),
cert);
@@ -206,6 +212,5 @@
}
}
}
-
}
}
\ No newline at end of file
diff -r 3248b46f3973 -r 3b760b39962a src/org/tn5250j/framework/transport/SocketConnector.java
--- a/src/org/tn5250j/framework/transport/SocketConnector.java Thu May 22 13:41:05 2014 -0700
+++ b/src/org/tn5250j/framework/transport/SocketConnector.java Thu May 22 15:41:35 2014 -0700
@@ -25,6 +25,7 @@
import java.net.Socket;
+import org.tn5250j.framework.transport.SSL.SSLImplementation;
import org.tn5250j.TN5250jConstants;
import org.tn5250j.tools.logging.TN5250jLogFactory;
import org.tn5250j.tools.logging.TN5250jLogger;
@@ -44,7 +45,7 @@
/**
* Set the type of SSL connection to use. Specify null or an empty string
- * to use a plain socket.
+ * to use a plain socket.
* @param type The SSL connection type
* @see org.tn5250j.framework.transport.SSLConstants
*/
@@ -55,18 +56,18 @@
/**
* Create a new client Socket to the given destination and port. If an SSL
* socket type has not been specified (by setSSLType(String)), then
- * a plain socket will be created. Otherwise, a new SSL socket of the
+ * a plain socket will be created. Otherwise, a new SSL socket of the
* specified type will be created.
* @param destination
* @param port
- * @return a new client socket, or null if
+ * @return a new client socket, or null if
*/
public Socket createSocket(String destination, int port) {
Socket socket = null;
Exception ex = null;
-
- if (sslType == null || sslType.trim().length() == 0 ||
+
+ if (sslType == null || sslType.trim().length() == 0 ||
sslType.toUpperCase().equals(TN5250jConstants.SSL_TYPE_NONE)) {
logger.info("Creating Plain Socket");
try {
@@ -77,20 +78,17 @@
}
} else { //SSL SOCKET
- logger.info("Creating SSL ["+sslType+"] Socket");
-
+ logger.info("Creating SSL ["+sslType+"] Socket");
+
SSLInterface sslIf = null;
-
- String sslImplClassName =
- "org.tn5250j.framework.transport.SSL.SSLImplementation";
+
try {
- Class> c = Class.forName(sslImplClassName);
- sslIf = (SSLInterface)c.newInstance();
+ sslIf = (SSLInterface) new SSLImplementation();
} catch (Exception e) {
ex = new Exception("Failed to create SSLInterface Instance. " +
"Message is ["+e.getMessage()+"]");
}
-
+
if (sslIf != null) {
sslIf.init(sslType);
socket = sslIf.createSSLSocket(destination,port);
@@ -105,6 +103,6 @@
}
return socket;
}
-
-
+
+
}
\ No newline at end of file