--- /dev/null
+// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
+// Jad home page: http://www.kpdus.com/jad.html
+// Decompiler options: packimports(3) fieldsfirst nonlb space
+
+package mcsClient;
+
+import java.io.DataInputStream;
+import java.net.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+
+// Referenced classes of package mcsClient:
+// McsTcpConnection, LockingKeyStateManager, McsVersion
+
+public class MessageReader
+ implements Runnable {
+
+ private DataInputStream socketInput;
+ private int localPort;
+ private InetAddress localAddress;
+ private McsVersion mcsVersion;
+ private LockingKeyStateManager lockingKeyStateManager;
+ private DatagramSocket dgSocket;
+ private boolean firstIdleTime;
+ private int idleTimer1;
+ private int savedIdleTimer1;
+ private int roundTripTime;
+ private static Logger logger = Logger.getAnonymousLogger();
+
+ public MessageReader(McsTcpConnection mcstcpconnection, McsVersion mcsversion, LockingKeyStateManager lockingkeystatemanager) {
+ firstIdleTime = true;
+ idleTimer1 = 0;
+ socketInput = mcstcpconnection.getSocketInput();
+ localPort = mcstcpconnection.getLocalPort();
+ localAddress = mcstcpconnection.getLocalAddress();
+ mcsVersion = mcsversion;
+ lockingKeyStateManager = lockingkeystatemanager;
+ logger.setLevel(Level.WARNING);
+ String s = System.getProperty("mcs.debug");
+ if (s != null && s.equalsIgnoreCase("true"))
+ logger.setLevel(Level.ALL);
+ try {
+ dgSocket = new DatagramSocket(0, localAddress);
+ }
+ catch (Exception exception) {
+ logger.warning(exception.toString());
+ }
+ }
+
+ private void cleanupThread() {
+ if (dgSocket != null) {
+ dgSocket.disconnect();
+ dgSocket.close();
+ }
+ dgSocket = null;
+ socketInput = null;
+ }
+
+ private void process() {
+ boolean flag = false;
+ boolean flag1 = false;
+ boolean flag2 = false;
+ boolean flag3 = false;
+ boolean flag4 = false;
+ boolean flag5 = false;
+ Object obj = null;
+ Thread thread = Thread.currentThread();
+ do {
+ Thread _tmp = thread;
+ if (!Thread.interrupted()) {
+ int i;
+ int j;
+ try {
+ i = socketInput.readInt();
+ j = socketInput.readInt();
+ }
+ catch (Exception exception) {
+ logger.info("Message Reader - Socket closed");
+ return;
+ }
+ if (i > 1458) {
+ logger.warning("Message Reader - invalid message length = " + i + ", command = " + j);
+ JOptionPane.showMessageDialog(new JFrame(), "Invalid message data", "Remote Console Data Communication Error", 0);
+ return;
+ }
+ Thread _tmp1 = thread;
+ if (Thread.interrupted()) {
+ logger.info("MessageReader interrupted. Exiting.");
+ return;
+ }
+ switch (j & 0x3f) {
+ case 2: // '\002'
+ case 3: // '\003'
+ case 4: // '\004'
+ case 6: // '\006'
+ case 23: // '\027'
+ case 25: // '\031'
+ byte abyte0[] = new byte[1458];
+ abyte0[2] = (byte)(i >> 8);
+ abyte0[3] = (byte)i;
+ abyte0[7] = (byte)j;
+ DatagramPacket datagrampacket;
+ try {
+ if (i > 8)
+ socketInput.readFully(abyte0, 8, i - 8);
+ datagrampacket = new DatagramPacket(abyte0, i, dgSocket.getLocalAddress(), localPort);
+ }
+ catch (Exception exception1) {
+ logger.severe("Message Reader - error reading video datagram - " + exception1 + ", length = " + i);
+ JOptionPane.showMessageDialog(new JFrame(), "Error reading video data. Exit and start again.", "Remote Console Data Communication Error", 0);
+ return;
+ }
+ try {
+ dgSocket.send(datagrampacket);
+ break;
+ }
+ catch (Exception exception2) {
+ exception2.printStackTrace();
+ logger.severe("Message Reader - error sending video datagram - " + exception2);
+ JOptionPane.showMessageDialog(new JFrame(), "Error sending video data. Exit and start again.", "Remote Console Data Communication Error", 0);
+ return;
+ }
+
+ case 9: // '\t'
+ try {
+ int k = socketInput.readInt();
+ logger.info("Message Reader got keyboard state " + Integer.toHexString(k & 0xff));
+ lockingKeyStateManager.setTargetKeyState(k);
+ break;
+ }
+ catch (Exception exception3) {
+ logger.severe("Message Reader - error seting key state - " + exception3);
+ }
+ JOptionPane.showMessageDialog(new JFrame(), "Error setting key states. Exit and start again.", "Remote Console Data Communication Error", 0);
+ return;
+
+ case 16: // '\020'
+ try {
+ idleTimer1 = socketInput.readInt();
+ }
+ catch (Exception exception4) {
+ logger.severe("Message Reader - error reading idle time - " + exception4);
+ JOptionPane.showMessageDialog(new JFrame(), "Error idle time data. Exit and start again.", "Remote Console Data Communication Error", 0);
+ return;
+ }
+ if (!firstIdleTime)
+ logger.info("Idle Time1 (%): " + ((idleTimer1 - savedIdleTimer1) * 1000) / 0x16052);
+ else
+ firstIdleTime = false;
+ savedIdleTimer1 = idleTimer1;
+ break;
+
+ case 12: // '\f'
+ int l;
+ try {
+ l = socketInput.readInt();
+ }
+ catch (Exception exception5) {
+ logger.severe("Message Reader - error reading keepalive - " + exception5);
+ JOptionPane.showMessageDialog(new JFrame(), "Error reading keep-alive message. Exit and start again.", "Remote Console Data Communication Error", 0);
+ return;
+ }
+ roundTripTime = (int)System.currentTimeMillis() - l;
+ logger.info("Round trip time (ms) = " + roundTripTime);
+ break;
+
+ case 13: // '\r'
+ try {
+ mcsVersion.setServerMajorRev(socketInput.readInt());
+ mcsVersion.setServerMinorRev(socketInput.readInt());
+ break;
+ }
+ catch (Exception exception6) {
+ logger.severe("Message Reader - error reading server version - " + exception6);
+ }
+ JOptionPane.showMessageDialog(new JFrame(), "Error reading application version information. Exit and start again.", "Remote Console Data Communication Error", 0);
+ return;
+
+ case 5: // '\005'
+ case 7: // '\007'
+ case 8: // '\b'
+ case 10: // '\n'
+ case 11: // '\013'
+ case 14: // '\016'
+ case 15: // '\017'
+ case 17: // '\021'
+ case 18: // '\022'
+ case 19: // '\023'
+ case 20: // '\024'
+ case 21: // '\025'
+ case 22: // '\026'
+ case 24: // '\030'
+ default:
+ logger.warning("MessageReader - unexpected message code " + j);
+ if (i <= 8)
+ break;
+ byte abyte1[] = new byte[i - 8];
+ try {
+ socketInput.read(abyte1, 0, abyte1.length);
+ break;
+ }
+ catch (Exception exception7) {
+ logger.severe("Message Reader - error reading socket - " + exception7);
+ }
+ JOptionPane.showMessageDialog(new JFrame(), "Error reading data from server. Exit and start again.", "Remote Console Data Communication Error", 0);
+ return;
+ }
+ } else {
+ return;
+ }
+ } while (true);
+ }
+
+ public void run() {
+ process();
+ cleanupThread();
+ }
+
+ protected void finalize() throws Throwable {
+ cleanupThread();
+ }
+
+}