add src files decompiled via jad
[rsa2client.git] / src / mcsClient / DatagramReader.java
diff --git a/src/mcsClient/DatagramReader.java b/src/mcsClient/DatagramReader.java
new file mode 100644 (file)
index 0000000..7a0c33c
--- /dev/null
@@ -0,0 +1,385 @@
+// 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.IOException;
+import java.net.*;
+import java.util.LinkedList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+
+// Referenced classes of package mcsClient:
+//            BitMap, SecureDatagramSocket, McsTcpConnection, LiveVideoPanel, 
+//            McsToolBar
+
+public final class DatagramReader
+    implements Runnable {
+
+    public boolean videoLostSync;
+    private DatagramSocket dgSocket;
+    private McsTcpConnection mcsTcpConnection;
+    private LiveVideoPanel liveVideoPanel;
+    private LinkedList datagramList;
+    private static final boolean USE_MULTICAST = false;
+    public static final int DEFAULT_DIALIN_BITRATE;
+    public static final int DEFAULT_NET_BITRATE;
+    private long serverTime;
+    private long serverBaseTime;
+    private long clientTime;
+    private long clientBaseTime;
+    private boolean gotBaseTime;
+    private long skew;
+    private long upperSkew;
+    private long lowerSkew;
+    private long initialBitRate;
+    private long skewTime;
+    private boolean gotBeginningOfFrame;
+    private boolean gotInitialBitRate;
+    private boolean detectedPPP;
+    private int frameNumber;
+    private int maxSequenceNumber;
+    private int lastFrameNumber;
+    private long totalFrameSize;
+    private BitMap bitmap;
+    private boolean initialized;
+    private static int nakMessage[] = new int[4];
+    private McsToolBar sliderListener;
+    private int nakCount;
+    private static Logger logger = Logger.getAnonymousLogger();
+
+    public DatagramReader(McsTcpConnection mcstcpconnection, LiveVideoPanel livevideopanel, LinkedList linkedlist, String s, int i, boolean flag) {
+        videoLostSync = false;
+        serverBaseTime = 0L;
+        clientTime = 0L;
+        clientBaseTime = 0L;
+        gotBaseTime = false;
+        skew = 0L;
+        upperSkew = 150L;
+        lowerSkew = -10L;
+        initialBitRate = 0L;
+        skewTime = 225L;
+        gotBeginningOfFrame = false;
+        gotInitialBitRate = false;
+        detectedPPP = false;
+        maxSequenceNumber = 0;
+        lastFrameNumber = 0;
+        totalFrameSize = 0L;
+        bitmap = new BitMap();
+        initialized = true;
+        sliderListener = null;
+        nakCount = 0;
+        mcsTcpConnection = mcstcpconnection;
+        liveVideoPanel = livevideopanel;
+        datagramList = linkedlist;
+        logger.setLevel(Level.WARNING);
+        String s1 = System.getProperty("mcs.debug");
+        if (s1 != null && s1.equalsIgnoreCase("true"))
+            logger.setLevel(Level.ALL);
+        nakMessage[0] = nakMessage.length * 4;
+        nakMessage[1] = 5;
+        if (mcstcpconnection.getDetectedPPP() || flag) {
+            detectedPPP = true;
+            upperSkew = 150L;
+            lowerSkew = -30L;
+            skewTime = 2000L;
+        }
+        if (mcstcpconnection.videoEncrypted())
+            dgSocket = new SecureDatagramSocket(mcstcpconnection.cipher1, mcstcpconnection.cipher2, mcstcpconnection.getLocalPort());
+        else
+            dgSocket = new DatagramSocket(mcstcpconnection.getLocalPort());
+        dgSocket.setReceiveBufferSize(0x1f400);
+        dgSocket.setSoTimeout(500);
+        if (flag)
+            return;
+        try {
+            byte abyte0[] = new byte[10];
+            DatagramPacket datagrampacket = new DatagramPacket(abyte0, abyte0.length, InetAddress.getByName(s), i);
+            for (int j = 0; j < 6; j++) {
+                dgSocket.send(datagrampacket);
+                try {
+                    Thread.currentThread();
+                    Thread.sleep(60L);
+                }
+                catch (InterruptedException interruptedexception) { }
+            }
+
+            try {
+                Thread.currentThread();
+                Thread.sleep(200L);
+            }
+            catch (InterruptedException interruptedexception1) { }
+        }
+        catch (Exception exception) {
+            logger.severe(exception.toString());
+            initialized = false;
+            JOptionPane.showMessageDialog(new JFrame(), "Failed to connect.  Try again.", "Remote Console Datagram Reader Initialization Error", 0);
+        }
+        return;
+    }
+
+    private void cleanupThread() {
+        if (dgSocket != null) {
+            dgSocket.disconnect();
+            dgSocket.close();
+        }
+        dgSocket = null;
+        mcsTcpConnection = null;
+        liveVideoPanel = null;
+        datagramList = null;
+        initialized = false;
+    }
+
+    private void process() {
+        int l;
+        Thread thread;
+        l = 0;
+        boolean flag = false;
+        boolean flag1 = false;
+        boolean flag2 = false;
+        if (!initialized)
+            return;
+        thread = Thread.currentThread();
+          goto _L1
+_L22:
+        if (nakCount >= 25) {
+            logger.info("25 NAK messages sent");
+            nakCount = 0;
+        }
+        DatagramPacket datagrampacket;
+        byte abyte1[] = new byte[1500];
+        datagrampacket = new DatagramPacket(abyte1, abyte1.length);
+        dgSocket.receive(datagrampacket);
+          goto _L2
+        SocketTimeoutException sockettimeoutexception;
+        sockettimeoutexception;
+          goto _L1
+        IOException ioexception3;
+        ioexception3;
+        logger.warning("Datagram Reader - error reading datagram " + ioexception3);
+        return;
+_L2:
+        byte abyte0[];
+        int j;
+        abyte0 = datagrampacket.getData();
+        j = datagrampacket.getOffset();
+        if (datagrampacket.getLength() >= 24) goto _L3; else goto _L1
+_L3:
+        if (abyte0[j + 7] != 6) goto _L5; else goto _L4
+_L4:
+        videoLostSync = true;
+        gotBaseTime = false;
+        logger.info("DatagramReader: video lost sync");
+          goto _L1
+_L5:
+        videoLostSync = false;
+        frameNumber = (abyte0[j + 8] & 0xff) << 8 | abyte0[j + 9] & 0xff;
+        if (gotBeginningOfFrame) goto _L7; else goto _L6
+_L6:
+        if ((abyte0[j + 7] & 0xbf) != 0) goto _L8; else goto _L1
+_L8:
+        gotBeginningOfFrame = true;
+        lastFrameNumber = frameNumber - 1;
+        l = 128;
+        bitmap.clear();
+        bitmap.setBit(0);
+_L7:
+        int i;
+        i = (abyte0[j + 10] & 0xff) << 8 | abyte0[j + 11] & 0xff;
+        int i1 = (abyte0[j + 2] & 0xff) << 8 | abyte0[j + 3] & 0xff;
+        totalFrameSize += i1;
+        serverTime = ((long)abyte0[j + 20] & 255L) << 24 | ((long)abyte0[j + 21] & 255L) << 16 | ((long)abyte0[j + 22] & 255L) << 8 | (long)abyte0[j + 23] & 255L;
+        clientTime = System.currentTimeMillis();
+        if (gotBaseTime) goto _L10; else goto _L9
+_L9:
+        gotBaseTime = true;
+        serverBaseTime = serverTime;
+        clientBaseTime = clientTime;
+        totalFrameSize = 0L;
+          goto _L11
+_L10:
+        long l1;
+        skew = clientTime - clientBaseTime - (serverTime - serverBaseTime);
+        l1 = (totalFrameSize * 8L * 1000L) / ((clientTime - clientBaseTime) + 50L);
+        if (l1 > 0x13880L)
+            liveVideoPanel.doPartialScreenUpdates = false;
+        else
+            liveVideoPanel.doPartialScreenUpdates = true;
+        if (skew >= lowerSkew) goto _L13; else goto _L12
+_L12:
+        gotBaseTime = false;
+          goto _L11
+_L13:
+        if (skew <= upperSkew || clientTime - clientBaseTime <= skewTime) goto _L11; else goto _L14
+_L14:
+        int ai[];
+        if (!gotInitialBitRate) {
+            initialBitRate = l1;
+            gotInitialBitRate = true;
+            if (detectedPPP) {
+                if (initialBitRate < (long)DEFAULT_DIALIN_BITRATE)
+                    initialBitRate = DEFAULT_DIALIN_BITRATE;
+            } else
+            if (initialBitRate < (long)DEFAULT_NET_BITRATE)
+                initialBitRate = DEFAULT_NET_BITRATE;
+            if (sliderListener != null)
+                sliderListener.setSliderInitialBitRate(initialBitRate);
+        } else {
+            if (l1 < (initialBitRate * 60L) / 100L)
+                l1 = (initialBitRate * 60L) / 100L;
+            if (detectedPPP && l1 > initialBitRate)
+                l1 = initialBitRate;
+        }
+        gotBaseTime = false;
+        l1 *= 75L;
+        l1 /= 100L;
+        ai = new int[3];
+        ai[0] = ai.length * 4;
+        ai[1] = 10;
+        ai[2] = (int)l1;
+        thread;
+        if (Thread.interrupted())
+            return;
+        try {
+            mcsTcpConnection.sendMessage(ai, false);
+        }
+        catch (IOException ioexception4) {
+            logger.severe("Socket exception - DatagramReader exiting");
+            return;
+        }
+_L11:
+        if (frameNumber == lastFrameNumber)
+            break MISSING_BLOCK_LABEL_1033;
+        if (frameNumber == lastFrameNumber + 1) goto _L16; else goto _L15
+_L15:
+        nakMessage[2] = 0;
+        nakMessage[3] = frameNumber;
+        try {
+            mcsTcpConnection.sendMessage(nakMessage, false);
+        }
+        catch (IOException ioexception) {
+            logger.severe("Socket exception - DatagramReader exiting");
+            return;
+        }
+        nakCount++;
+          goto _L17
+_L16:
+        if ((l & 0x80) != 0) goto _L19; else goto _L18
+_L18:
+        nakMessage[2] = 0;
+        nakMessage[3] = 0;
+        thread;
+        if (Thread.interrupted())
+            return;
+        try {
+            mcsTcpConnection.sendMessage(nakMessage, false);
+        }
+        catch (IOException ioexception1) {
+            logger.severe("Socket exception - DatagramReader exiting");
+            return;
+        }
+        nakCount++;
+          goto _L17
+_L20:
+        int k;
+        nakMessage[2] = k;
+        nakMessage[3] = frameNumber;
+        thread;
+        if (Thread.interrupted())
+            return;
+        try {
+            mcsTcpConnection.sendMessage(nakMessage, false);
+        }
+        catch (IOException ioexception2) {
+            logger.severe("Socket exception - DatagramReader exiting");
+            return;
+        }
+        nakCount++;
+        break; /* Loop/switch isn't completed */
+_L19:
+        if ((k = bitmap.findZeroBit()) <= maxSequenceNumber) goto _L20; else goto _L17
+_L17:
+        lastFrameNumber = frameNumber;
+        bitmap.clear();
+        l = 0;
+        maxSequenceNumber = 0;
+        bitmap.setBit(i);
+        maxSequenceNumber = i <= maxSequenceNumber ? maxSequenceNumber : i;
+        l |= abyte0[j + 7];
+        abyte0[j + 7] &= 0x3f;
+        int j1;
+        if ((j1 = datagramList.size()) < 10 || liveVideoPanel.imagesAutomaticallyPaused)
+            break MISSING_BLOCK_LABEL_1147;
+        thread;
+        if (Thread.interrupted())
+            return;
+        if (liveVideoPanel.pauseVideo() != 1) {
+            logger.severe("Socket exception - DatagramReader exiting");
+            return;
+        }
+        liveVideoPanel.imagesAutomaticallyPaused = true;
+        long l2 = ((long)abyte0[j] & 255L) << 24 | ((long)abyte0[j + 1] & 255L) << 16 | ((long)abyte0[j + 2] & 255L) << 8 | (long)abyte0[j + 3] & 255L;
+        long l3 = ((long)abyte0[j + 12] & 255L) << 24 | ((long)abyte0[j + 13] & 255L) << 16 | ((long)abyte0[j + 14] & 255L) << 8 | (long)abyte0[j + 15] & 255L;
+        long l4 = ((long)abyte0[j + 16] & 255L) << 24 | ((long)abyte0[j + 17] & 255L) << 16 | ((long)abyte0[j + 18] & 255L) << 8 | (long)abyte0[j + 19] & 255L;
+        if (i >= 0 && i <= 896 && l3 >= 0L && l3 <= 0xc0000L && l4 >= 0L && l3 <= 0xc0000L) {
+            if (l2 != 31L)
+                synchronized (datagramList) {
+                    datagramList.addFirst(datagrampacket);
+                    datagramList.notify();
+                }
+        } else {
+            logger.warning("Bad packet discarded.  seq num: " + i + " vid ram offset: " + l3 + " vid ram count: " + l4);
+        }
+          goto _L1
+        ArrayIndexOutOfBoundsException arrayindexoutofboundsexception;
+        arrayindexoutofboundsexception;
+        logger.warning(arrayindexoutofboundsexception.toString());
+_L1:
+        thread;
+        if (Thread.interrupted())
+            return;
+        if (true) goto _L22; else goto _L21
+_L21:
+    }
+
+    public void run() {
+        process();
+        cleanupThread();
+    }
+
+    protected void finalize() throws Throwable {
+        cleanupThread();
+    }
+
+    public boolean initialized() {
+        return initialized;
+    }
+
+    public void addSliderListener(McsToolBar mcstoolbar) {
+        sliderListener = mcstoolbar;
+    }
+
+    public void setInitialBitRate(long l) {
+        initialBitRate = l;
+        gotInitialBitRate = true;
+        int ai[] = new int[3];
+        ai[0] = ai.length * 4;
+        ai[1] = 10;
+        ai[2] = (int)l;
+        try {
+            mcsTcpConnection.sendMessage(ai, true);
+        }
+        catch (IOException ioexception) {
+            logger.severe("Socket exception - setInitialBitRate");
+            return;
+        }
+    }
+
+    static  {
+        DEFAULT_DIALIN_BITRATE = McsToolBar.BITRATES[2];
+        DEFAULT_NET_BITRATE = McsToolBar.BITRATES[7];
+    }
+}