home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Button;
- import java.awt.Container;
- import java.awt.Event;
- import java.awt.FlowLayout;
- import java.awt.Frame;
- import java.awt.Graphics;
- import java.awt.GridBagConstraints;
- import java.awt.GridBagLayout;
- import java.awt.Label;
- import java.awt.Panel;
- import java.io.IOException;
-
- public class vncviewer extends Applet implements Runnable {
- boolean inAnApplet = true;
- // $FF: renamed from: f java.awt.Frame
- Frame field_0;
- String[] mainArgs;
- String host;
- int port;
- rfbProto rfb;
- Thread rfbThread;
- GridBagLayout gridbag;
- Panel buttonPanel;
- Button disconnectButton;
- Button optionsButton;
- Button clipboardButton;
- Button ctrlAltDelButton;
- optionsFrame options;
- clipboardFrame clipboard;
- authenticationPanel authenticator;
- boolean gotFocus = false;
-
- public static void main(String[] var0) {
- vncviewer var1 = new vncviewer();
- var1.mainArgs = var0;
- var1.inAnApplet = false;
- var1.field_0 = new Frame("VNC");
- var1.field_0.add("Center", var1);
- var1.init();
- ((Applet)var1).start();
- }
-
- public void init() {
- this.readParameters();
- this.options = new optionsFrame(this);
- this.clipboard = new clipboardFrame(this);
- this.authenticator = new authenticationPanel();
- this.rfbThread = new Thread(this);
- this.rfbThread.start();
- }
-
- public void update(Graphics var1) {
- }
-
- public void run() {
- this.gridbag = new GridBagLayout();
- ((Container)this).setLayout(this.gridbag);
- this.buttonPanel = new Panel();
- this.buttonPanel.setLayout(new FlowLayout(0, 0, 0));
- this.disconnectButton = new Button("Disconnect");
- this.disconnectButton.disable();
- this.buttonPanel.add(this.disconnectButton);
- this.optionsButton = new Button("Options");
- this.buttonPanel.add(this.optionsButton);
- this.clipboardButton = new Button("Clipboard");
- this.clipboardButton.disable();
- this.buttonPanel.add(this.clipboardButton);
- this.ctrlAltDelButton = new Button("Send Ctrl-Alt-Del");
- this.ctrlAltDelButton.disable();
- this.buttonPanel.add(this.ctrlAltDelButton);
- GridBagConstraints var1 = new GridBagConstraints();
- var1.gridwidth = 0;
- var1.anchor = 18;
- this.gridbag.setConstraints(this.buttonPanel, var1);
- ((Container)this).add(this.buttonPanel);
-
- try {
- this.connectAndAuthenticate();
- this.doProtocolInitialisation();
- vncCanvas var2 = new vncCanvas(this);
- var1.weightx = (double)1.0F;
- var1.weighty = (double)1.0F;
- this.gridbag.setConstraints(var2, var1);
- ((Container)this).add(var2);
- if (!this.inAnApplet) {
- this.field_0.setTitle(this.rfb.desktopName);
- this.field_0.pack();
- } else {
- ((Container)this).validate();
- }
-
- this.disconnectButton.enable();
- this.clipboardButton.enable();
- this.ctrlAltDelButton.enable();
- var2.processNormalProtocol();
- } catch (Exception var3) {
- ((Throwable)var3).printStackTrace();
- this.fatalError(((Throwable)var3).toString());
- }
- }
-
- void connectAndAuthenticate() throws IOException {
- GridBagConstraints var1 = new GridBagConstraints();
- var1.gridwidth = 0;
- var1.anchor = 18;
- var1.weightx = (double)1.0F;
- var1.weighty = (double)1.0F;
- var1.ipadx = 100;
- var1.ipady = 50;
- this.gridbag.setConstraints(this.authenticator, var1);
- ((Container)this).add(this.authenticator);
- ((Container)this).validate();
- if (!this.inAnApplet) {
- this.field_0.pack();
- this.field_0.show();
- }
-
- boolean var2 = false;
-
- while(!var2) {
- authenticationPanel var3 = this.authenticator;
- synchronized(var3){}
-
- try {
- try {
- this.authenticator.wait();
- } catch (InterruptedException var10) {
- }
- } catch (Throwable var11) {
- throw var11;
- }
-
- this.rfb = new rfbProto(this.host, this.port, this);
- this.rfb.readVersionMsg();
- System.out.println("RFB server supports protocol version " + this.rfb.serverMajor + "." + this.rfb.serverMinor);
- this.rfb.writeVersionMsg();
- switch (this.rfb.readAuthScheme()) {
- case 1:
- System.out.println("No authentication needed");
- var2 = true;
- break;
- case 2:
- byte[] var12 = new byte[16];
- this.rfb.is.readFully(var12);
- String var4 = this.authenticator.password.getText();
- if (var4.length() > 8) {
- var4 = var4.substring(0, 8);
- }
-
- if (var4.length() != 0) {
- byte[] var5 = new byte[8];
- var4.getBytes(0, var4.length(), var5, 0);
-
- for(int var6 = var4.length(); var6 < 8; ++var6) {
- var5[var6] = 0;
- }
-
- DesCipher var13 = new DesCipher(var5);
- var13.encrypt(var12, 0, var12, 0);
- var13.encrypt(var12, 8, var12, 8);
- this.rfb.os.write(var12);
- int var7 = this.rfb.is.readInt();
- switch (var7) {
- case 0:
- System.out.println("VNC authentication succeeded");
- var2 = true;
- break;
- case 1:
- System.out.println("VNC authentication failed");
- this.authenticator.retry();
- break;
- case 2:
- throw new IOException("VNC authentication failed - too many tries");
- default:
- throw new IOException("Unknown VNC authentication result " + var7);
- }
- } else {
- this.authenticator.retry();
- }
- }
- }
-
- ((Container)this).remove(this.authenticator);
- }
-
- void doProtocolInitialisation() throws IOException {
- System.out.println("sending client init");
- this.rfb.writeClientInit();
- this.rfb.readServerInit();
- System.out.println("Desktop name is " + this.rfb.desktopName);
- System.out.println("Desktop size is " + this.rfb.framebufferWidth + " x " + this.rfb.framebufferHeight);
- this.setEncodings();
- }
-
- void setEncodings() {
- try {
- if (this.rfb != null && this.rfb.inNormalProtocol) {
- this.rfb.writeSetEncodings(this.options.encodings, this.options.nEncodings);
- return;
- }
- } catch (Exception var2) {
- ((Throwable)var2).printStackTrace();
- }
-
- }
-
- void setCutText(String var1) {
- try {
- if (this.rfb != null && this.rfb.inNormalProtocol) {
- this.rfb.writeClientCutText(var1);
- return;
- }
- } catch (Exception var3) {
- ((Throwable)var3).printStackTrace();
- }
-
- }
-
- public synchronized boolean action(Event var1, Object var2) {
- if (var1.target == this.optionsButton) {
- if (this.options.isVisible()) {
- this.options.hide();
- } else {
- this.options.show();
- }
- } else if (var1.target == this.disconnectButton) {
- System.out.println("disconnect");
- this.options.dispose();
- this.clipboard.dispose();
- if (this.inAnApplet) {
- ((Container)this).removeAll();
- this.rfb.close();
- this.rfb = null;
- Label var3 = new Label("Disconnected");
- ((Container)this).setLayout(new FlowLayout(0, 30, 30));
- ((Container)this).add(var3);
- ((Container)this).validate();
- this.rfbThread.stop();
- } else {
- System.exit(1);
- }
- } else if (var1.target == this.clipboardButton) {
- if (this.clipboard.isVisible()) {
- this.clipboard.hide();
- } else {
- this.clipboard.show();
- }
- } else if (var1.target == this.ctrlAltDelButton) {
- try {
- Event var5 = new Event((Object)null, 0, (Object)null);
- var5.key = 127;
- var5.modifiers = 10;
- var5.id = 401;
- this.rfb.writeKeyEvent(var5);
- var5.id = 402;
- this.rfb.writeKeyEvent(var5);
- } catch (Exception var4) {
- ((Throwable)var4).printStackTrace();
- }
- }
-
- return false;
- }
-
- public boolean gotFocus(Event var1, Object var2) {
- this.gotFocus = true;
- return true;
- }
-
- public boolean lostFocus(Event var1, Object var2) {
- this.gotFocus = false;
- return true;
- }
-
- void encryptBytes(byte[] var1, String var2) {
- byte[] var3 = new byte[8];
- var2.getBytes(0, var2.length(), var3, 0);
-
- for(int var4 = var2.length(); var4 < 8; ++var4) {
- var3[var4] = 0;
- }
-
- DesCipher var5 = new DesCipher(var3);
- var5.encrypt(var1, 0, var1, 0);
- var5.encrypt(var1, 8, var1, 8);
- }
-
- public void readParameters() {
- this.host = this.readParameter("HOST", !this.inAnApplet);
- if (this.host == null) {
- this.host = ((Applet)this).getCodeBase().getHost();
- if (this.host.equals("")) {
- this.fatalError("HOST parameter not specified");
- }
- }
-
- String var1 = this.readParameter("PORT", true);
- this.port = Integer.parseInt(var1);
- }
-
- public String readParameter(String var1, boolean var2) {
- if (this.inAnApplet) {
- String var5 = ((Applet)this).getParameter(var1);
- if (var5 == null && var2) {
- this.fatalError(var1 + " parameter not specified");
- }
-
- return var5;
- } else {
- for(int var3 = 0; var3 < this.mainArgs.length; var3 += 2) {
- if (this.mainArgs[var3].equalsIgnoreCase(var1)) {
- try {
- return this.mainArgs[var3 + 1];
- } catch (Exception var4) {
- if (var2) {
- this.fatalError(var1 + " parameter not specified");
- }
-
- return null;
- }
- }
- }
-
- if (var2) {
- this.fatalError(var1 + " parameter not specified");
- }
-
- return null;
- }
- }
-
- public void fatalError(String var1) {
- System.out.println(var1);
- if (this.inAnApplet) {
- ((Container)this).removeAll();
- Label var2 = new Label(var1);
- ((Container)this).setLayout(new FlowLayout(0, 30, 30));
- ((Container)this).add(var2);
- ((Container)this).validate();
- Thread.currentThread().stop();
- } else {
- System.exit(1);
- }
- }
- }
-