// Decompiled by DJ v3.7.7.81 Copyright 2004 Atanas Neshkov  Date: 01/10/2006 11:15:01
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   signlink.java

package sign;

import java.applet.Applet;
import java.io.*;
import java.net.*;

public class signlink
    implements Runnable
{

    public static void startpriv(InetAddress inetaddress)
    {
        threadliveid = (int)(Math.random() * 99999999D);
        if(active)
        {
            try
            {
                Thread.sleep(500L);
            }
            catch(Exception _ex) { }
            active = false;
        }
        socketreq = 0;
        threadreq = null;
        dnsreq = null;
        savereq = null;
        urlreq = null;
        socketip = inetaddress;
        Thread thread = new Thread(new signlink());
        thread.setDaemon(true);
        thread.start();
        while(!active) 
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }
    }

    public void run()
    {
        active = true;
        String s = findcachedir();
        uid = getuid(s);
        try
        {
            File file = new File((new StringBuilder()).append(s).append("main_file_cache.dat").toString());
            if(file.exists() && file.length() > 0x3200000L)
                file.delete();
            cache_dat = new RandomAccessFile((new StringBuilder()).append(s).append("main_file_cache.dat").toString(), "rw");
            for(int j = 0; j < 5; j++)
                cache_idx[j] = new RandomAccessFile((new StringBuilder()).append(s).append("main_file_cache.idx").append(j).toString(), "rw");

        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
        for(int i = threadliveid; threadliveid == i;)
        {
            if(socketreq != 0)
            {
                try
                {
                    socket = new Socket(socketip, socketreq);
                }
                catch(Exception _ex)
                {
                    socket = null;
                }
                socketreq = 0;
            } else
            if(threadreq != null)
            {
                Thread thread = new Thread(threadreq);
                thread.setDaemon(true);
                thread.start();
                thread.setPriority(threadreqpri);
                threadreq = null;
            } else
            if(dnsreq != null)
            {
                try
                {
                    dns = InetAddress.getByName(dnsreq).getHostName();
                }
                catch(Exception _ex)
                {
                    dns = "unknown";
                }
                dnsreq = null;
            } else
            if(savereq != null)
            {
                if(savebuf != null)
                    try
                    {
                        FileOutputStream fileoutputstream = new FileOutputStream((new StringBuilder()).append(s).append(savereq).toString());
                        fileoutputstream.write(savebuf, 0, savelen);
                        fileoutputstream.close();
                    }
                    catch(Exception _ex) { }
                if(waveplay)
                {
                    wave = (new StringBuilder()).append(s).append(savereq).toString();
                    waveplay = false;
                }
                if(midiplay)
                {
                    midi = (new StringBuilder()).append(s).append(savereq).toString();
                    midiplay = false;
                }
                savereq = null;
            } else
            if(urlreq != null)
            {
                try
                {
                    System.out.println("urlstream");
                    urlstream = new DataInputStream((new URL(mainapp.getCodeBase(), urlreq)).openStream());
                }
                catch(Exception _ex)
                {
                    urlstream = null;
                }
                urlreq = null;
            }
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }
        }

    }

    public static String findcachedir()
    {
        String as[];
        String s;
        int i;
        as = (new String[] {
            "c:/windows/", "c:/winnt/", "d:/windows/", "d:/winnt/", "e:/windows/", "e:/winnt/", "f:/windows/", "f:/winnt/", "c:/", "~/", 
            "/tmp/", "", "c:/rscache", "/rscache"
        });
        if(storeid < 32 || storeid > 34)
            storeid = 32;
        s = (new StringBuilder()).append(".mpr_file_store_").append(storeid).toString();
        i = 0;
_L3:
        if(i >= as.length) goto _L2; else goto _L1
_L1:
        String s1;
        s1 = as[i];
        if(s1.length() > 0)
        {
            File file = new File(s1);
            if(!file.exists())
                continue; /* Loop/switch isn't completed */
        }
        File file1 = new File((new StringBuilder()).append(s1).append(s).toString());
        if(file1.exists() || file1.mkdir())
            return (new StringBuilder()).append(s1).append(s).append("/").toString();
        continue; /* Loop/switch isn't completed */
        Exception _ex;
        _ex;
        i++;
          goto _L3
_L2:
        return null;
    }

    public static int getuid(String s)
    {
        Exception _ex;
        try
        {
            File file = new File((new StringBuilder()).append(s).append("uid.dat").toString());
            if(!file.exists() || file.length() < 4L)
            {
                DataOutputStream dataoutputstream = new DataOutputStream(new FileOutputStream((new StringBuilder()).append(s).append("uid.dat").toString()));
                dataoutputstream.writeInt((int)(Math.random() * 99999999D));
                dataoutputstream.close();
            }
        }
        // Misplaced declaration of an exception variable
        catch(Exception _ex) { }
        int i;
        DataInputStream datainputstream = new DataInputStream(new FileInputStream((new StringBuilder()).append(s).append("uid.dat").toString()));
        i = datainputstream.readInt();
        datainputstream.close();
        return i + 1;
        datainputstream;
        return 0;
    }

    public static synchronized Socket opensocket(int i)
        throws IOException
    {
        for(socketreq = i; socketreq != 0;)
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }

        if(socket == null)
            throw new IOException("could not open socket");
        else
            return socket;
    }

    public static synchronized DataInputStream openurl(String s)
        throws IOException
    {
        for(urlreq = s; urlreq != null;)
            try
            {
                Thread.sleep(50L);
            }
            catch(Exception _ex) { }

        if(urlstream == null)
            throw new IOException((new StringBuilder()).append("could not open: ").append(s).toString());
        else
            return urlstream;
    }

    public static synchronized void dnslookup(String s)
    {
        dns = s;
        dnsreq = s;
    }

    public static synchronized void startthread(Runnable runnable, int i)
    {
        threadreqpri = i;
        threadreq = runnable;
    }

    public static synchronized boolean wavesave(byte abyte0[], int i)
    {
        if(i > 0x1e8480)
            return false;
        if(savereq != null)
        {
            return false;
        } else
        {
            wavepos = (wavepos + 1) % 5;
            savelen = i;
            savebuf = abyte0;
            waveplay = true;
            savereq = (new StringBuilder()).append("sound").append(wavepos).append(".wav").toString();
            return true;
        }
    }

    public static synchronized boolean wavereplay()
    {
        if(savereq != null)
        {
            return false;
        } else
        {
            savebuf = null;
            waveplay = true;
            savereq = (new StringBuilder()).append("sound").append(wavepos).append(".wav").toString();
            return true;
        }
    }

    public static synchronized void midisave(byte abyte0[], int i)
    {
        if(i > 0x1e8480)
            return;
        if(savereq != null)
        {
            return;
        } else
        {
            midipos = (midipos + 1) % 5;
            savelen = i;
            savebuf = abyte0;
            midiplay = true;
            savereq = (new StringBuilder()).append("jingle").append(midipos).append(".mid").toString();
            return;
        }
    }

    public static void reporterror(String s)
    {
        System.out.println((new StringBuilder()).append("Error: ").append(s).toString());
    }

    public signlink()
    {
    }

    public static int clientversion = 317;
    public static int uid;
    public static int storeid = 32;
    public static RandomAccessFile cache_dat = null;
    public static RandomAccessFile cache_idx[] = new RandomAccessFile[5];
    public static boolean sunjava;
    public static Applet mainapp = null;
    public static boolean active;
    public static int threadliveid;
    public static InetAddress socketip;
    public static int socketreq;
    public static Socket socket = null;
    public static int threadreqpri = 1;
    public static Runnable threadreq = null;
    public static String dnsreq = null;
    public static String dns = null;
    public static String urlreq = null;
    public static DataInputStream urlstream = null;
    public static int savelen;
    public static String savereq = null;
    public static byte savebuf[] = null;
    public static boolean midiplay;
    public static int midipos;
    public static String midi = null;
    public static int midivol;
    public static int midifade;
    public static boolean waveplay;
    public static int wavepos;
    public static String wave = null;
    public static int wavevol;
    public static boolean reporterror = true;
    public static String errorname = "";

}