home *** CD-ROM | disk | FTP | other *** search
Wrap
import java.awt.Event; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; class rfbProto { final String versionMsg = "RFB 003.003\n"; final int ConnFailed; final int NoAuth = 1; final int VncAuth = 2; final int VncAuthOK; final int VncAuthFailed = 1; final int VncAuthTooMany = 2; final int FramebufferUpdate; final int SetColourMapEntries = 1; final int Bell = 2; final int ServerCutText = 3; final int SetPixelFormat; final int FixColourMapEntries = 1; final int SetEncodings = 2; final int FramebufferUpdateRequest = 3; final int KeyEvent = 4; final int PointerEvent = 5; final int ClientCutText = 6; static final int EncodingRaw = 0; static final int EncodingCopyRect = 1; static final int EncodingRRE = 2; static final int EncodingCoRRE = 4; static final int EncodingHextile = 5; final int HextileRaw = 1; final int HextileBackgroundSpecified = 2; final int HextileForegroundSpecified = 4; final int HextileAnySubrects = 8; final int HextileSubrectsColoured = 16; String host; int port; Socket sock; // $FF: renamed from: is java.io.DataInputStream DataInputStream field_0; // $FF: renamed from: os java.io.OutputStream OutputStream field_1; boolean inNormalProtocol = false; // $FF: renamed from: v vncviewer vncviewer field_2; int serverMajor; int serverMinor; String desktopName; int framebufferWidth; int framebufferHeight; int bitsPerPixel; int depth; boolean bigEndian; boolean trueColour; int redMax; int greenMax; int blueMax; int redShift; int greenShift; int blueShift; int updateNRects; int updateRectX; int updateRectY; int updateRectW; int updateRectH; int updateRectEncoding; int copyRectSrcX; int copyRectSrcY; byte[] eventBuf = new byte[72]; int eventBufLen; int pointerMask; int oldModifiers; rfbProto(String var1, int var2, vncviewer var3) throws IOException { this.field_2 = var3; this.host = var1; this.port = var2; this.sock = new Socket(this.host, this.port); this.field_0 = new DataInputStream(new BufferedInputStream(this.sock.getInputStream(), 16384)); this.field_1 = this.sock.getOutputStream(); } void close() { try { this.sock.close(); } catch (Exception var2) { ((Throwable)var2).printStackTrace(); } } void readVersionMsg() throws IOException { byte[] var1 = new byte[12]; this.field_0.readFully(var1); if (var1[0] == 82 && var1[1] == 70 && var1[2] == 66 && var1[3] == 32 && var1[4] >= 48 && var1[4] <= 57 && var1[5] >= 48 && var1[5] <= 57 && var1[6] >= 48 && var1[6] <= 57 && var1[7] == 46 && var1[8] >= 48 && var1[8] <= 57 && var1[9] >= 48 && var1[9] <= 57 && var1[10] >= 48 && var1[10] <= 57 && var1[11] == 10) { this.serverMajor = (var1[4] - 48) * 100 + (var1[5] - 48) * 10 + (var1[6] - 48); this.serverMinor = (var1[8] - 48) * 100 + (var1[9] - 48) * 10 + (var1[10] - 48); } else { throw new IOException("Host " + this.host + " port " + this.port + " is not an RFB server"); } } void writeVersionMsg() throws IOException { byte[] var1 = new byte[12]; "RFB 003.003\n".getBytes(0, 12, var1, 0); this.field_1.write(var1); } int readAuthScheme() throws IOException { int var1 = this.field_0.readInt(); switch (var1) { case 0: int var2 = this.field_0.readInt(); byte[] var3 = new byte[var2]; this.field_0.readFully(var3); throw new IOException(new String(var3, 0)); case 1: case 2: return var1; default: throw new IOException("Unknown authentication scheme from RFB server " + var1); } } void writeClientInit() throws IOException { if (this.field_2.options.shareDesktop) { this.field_1.write(1); } else { this.field_1.write(0); } this.field_2.options.disableShareDesktop(); } void readServerInit() throws IOException { this.framebufferWidth = this.field_0.readUnsignedShort(); this.framebufferHeight = this.field_0.readUnsignedShort(); this.bitsPerPixel = this.field_0.readUnsignedByte(); this.depth = this.field_0.readUnsignedByte(); this.bigEndian = this.field_0.readUnsignedByte() != 0; this.trueColour = this.field_0.readUnsignedByte() != 0; this.redMax = this.field_0.readUnsignedShort(); this.greenMax = this.field_0.readUnsignedShort(); this.blueMax = this.field_0.readUnsignedShort(); this.redShift = this.field_0.readUnsignedByte(); this.greenShift = this.field_0.readUnsignedByte(); this.blueShift = this.field_0.readUnsignedByte(); byte[] var1 = new byte[3]; this.field_0.read(var1); int var2 = this.field_0.readInt(); byte[] var3 = new byte[var2]; this.field_0.readFully(var3); this.desktopName = new String(var3, 0); this.inNormalProtocol = true; } int readServerMessageType() throws IOException { return this.field_0.read(); } void readFramebufferUpdate() throws IOException { this.field_0.readByte(); this.updateNRects = this.field_0.readUnsignedShort(); } void readFramebufferUpdateRectHdr() throws IOException { this.updateRectX = this.field_0.readUnsignedShort(); this.updateRectY = this.field_0.readUnsignedShort(); this.updateRectW = this.field_0.readUnsignedShort(); this.updateRectH = this.field_0.readUnsignedShort(); this.updateRectEncoding = this.field_0.readInt(); if (this.updateRectX + this.updateRectW > this.framebufferWidth || this.updateRectY + this.updateRectH > this.framebufferHeight) { throw new IOException("Framebuffer update rectangle too large: " + this.updateRectW + "x" + this.updateRectH + " at (" + this.updateRectX + "," + this.updateRectY + ")"); } } void readCopyRect() throws IOException { this.copyRectSrcX = this.field_0.readUnsignedShort(); this.copyRectSrcY = this.field_0.readUnsignedShort(); } String readServerCutText() throws IOException { byte[] var1 = new byte[3]; this.field_0.read(var1); int var2 = this.field_0.readInt(); byte[] var3 = new byte[var2]; this.field_0.readFully(var3); return new String(var3, 0); } void writeFramebufferUpdateRequest(int var1, int var2, int var3, int var4, boolean var5) throws IOException { byte[] var6 = new byte[]{3, (byte)(var5 ? 1 : 0), (byte)(var1 >> 8 & 255), (byte)(var1 & 255), (byte)(var2 >> 8 & 255), (byte)(var2 & 255), (byte)(var3 >> 8 & 255), (byte)(var3 & 255), (byte)(var4 >> 8 & 255), (byte)(var4 & 255)}; this.field_1.write(var6); } void writeSetPixelFormat(int var1, int var2, boolean var3, boolean var4, int var5, int var6, int var7, int var8, int var9, int var10) throws IOException { byte[] var11 = new byte[]{0, 0, 0, 0, (byte)var1, (byte)var2, (byte)(var3 ? 1 : 0), (byte)(var4 ? 1 : 0), (byte)(var5 >> 8 & 255), (byte)(var5 & 255), (byte)(var6 >> 8 & 255), (byte)(var6 & 255), (byte)(var7 >> 8 & 255), (byte)(var7 & 255), (byte)var8, (byte)var9, (byte)var10, 0, 0, 0}; this.field_1.write(var11); } void writeFixColourMapEntries(int var1, int var2, int[] var3, int[] var4, int[] var5) throws IOException { byte[] var6 = new byte[6 + var2 * 6]; var6[0] = 1; var6[2] = (byte)(var1 >> 8 & 255); var6[3] = (byte)(var1 & 255); var6[4] = (byte)(var2 >> 8 & 255); var6[5] = (byte)(var2 & 255); for(int var7 = 0; var7 < var2; ++var7) { var6[6 + var7 * 6] = (byte)(var3[var7] >> 8 & 255); var6[6 + var7 * 6 + 1] = (byte)(var3[var7] & 255); var6[6 + var7 * 6 + 2] = (byte)(var4[var7] >> 8 & 255); var6[6 + var7 * 6 + 3] = (byte)(var4[var7] & 255); var6[6 + var7 * 6 + 4] = (byte)(var5[var7] >> 8 & 255); var6[6 + var7 * 6 + 5] = (byte)(var5[var7] & 255); } this.field_1.write(var6); } void writeSetEncodings(int[] var1, int var2) throws IOException { byte[] var3 = new byte[4 + 4 * var2]; var3[0] = 2; var3[2] = (byte)(var2 >> 8 & 255); var3[3] = (byte)(var2 & 255); for(int var4 = 0; var4 < var2; ++var4) { var3[4 + 4 * var4] = (byte)(var1[var4] >> 24 & 255); var3[5 + 4 * var4] = (byte)(var1[var4] >> 16 & 255); var3[6 + 4 * var4] = (byte)(var1[var4] >> 9 & 255); var3[7 + 4 * var4] = (byte)(var1[var4] & 255); } this.field_1.write(var3); } void writeClientCutText(String var1) throws IOException { byte[] var2 = new byte[8 + var1.length()]; var2[0] = 6; var2[4] = (byte)(var1.length() >> 24 & 255); var2[5] = (byte)(var1.length() >> 16 & 255); var2[6] = (byte)(var1.length() >> 8 & 255); var2[7] = (byte)(var1.length() & 255); var1.getBytes(0, var1.length(), var2, 8); this.field_1.write(var2); } void writePointerEvent(Event var1) throws IOException { if (var1.id == 501) { this.pointerMask = 1; if ((var1.modifiers & 8) != 0) { if (this.field_2.options.reverseMouseButtons2And3) { this.pointerMask = 4; } else { this.pointerMask = 2; } } if ((var1.modifiers & 4) != 0) { if (this.field_2.options.reverseMouseButtons2And3) { this.pointerMask = 2; } else { this.pointerMask = 4; } } } else if (var1.id == 502) { this.pointerMask = 0; } var1.modifiers &= -13; this.eventBufLen = 0; this.writeModifierKeyEvents(var1.modifiers); if (var1.x < 0) { var1.x = 0; } if (var1.y < 0) { var1.y = 0; } this.eventBuf[this.eventBufLen++] = 5; this.eventBuf[this.eventBufLen++] = (byte)this.pointerMask; this.eventBuf[this.eventBufLen++] = (byte)(var1.x >> 8 & 255); this.eventBuf[this.eventBufLen++] = (byte)(var1.x & 255); this.eventBuf[this.eventBufLen++] = (byte)(var1.y >> 8 & 255); this.eventBuf[this.eventBufLen++] = (byte)(var1.y & 255); if (this.pointerMask == 0) { this.writeModifierKeyEvents(0); } this.field_1.write(this.eventBuf, 0, this.eventBufLen); } void writeKeyEvent(Event var1) throws IOException { int var2 = var1.key; boolean var3 = false; if (var1.id == 401 || var1.id == 403) { var3 = true; } if (var1.id != 403 && var1.id != 404) { if (var2 < 32) { if ((var1.modifiers & 2) != 0) { var2 += 96; } else { switch (var2) { case 8: var2 = 65288; break; case 9: var2 = 65289; break; case 10: var2 = 65293; break; case 27: var2 = 65307; } } } else if (var2 >= 127) { if (var2 == 127) { var2 = 65535; } else if (var2 < 65280 || var2 > 65535) { return; } } } else { switch (var2) { case 1000: var2 = 65360; break; case 1001: var2 = 65367; break; case 1002: var2 = 65365; break; case 1003: var2 = 65366; break; case 1004: var2 = 65362; break; case 1005: var2 = 65364; break; case 1006: var2 = 65361; break; case 1007: var2 = 65363; break; case 1008: var2 = 65470; break; case 1009: var2 = 65471; break; case 1010: var2 = 65472; break; case 1011: var2 = 65473; break; case 1012: var2 = 65474; break; case 1013: var2 = 65475; break; case 1014: var2 = 65476; break; case 1015: var2 = 65477; break; case 1016: var2 = 65478; break; case 1017: var2 = 65479; break; case 1018: var2 = 65480; break; case 1019: var2 = 65481; break; default: return; } } this.eventBufLen = 0; this.writeModifierKeyEvents(var1.modifiers); this.writeKeyEvent(var2, var3); if (!var3) { this.writeModifierKeyEvents(0); } this.field_1.write(this.eventBuf, 0, this.eventBufLen); } void writeKeyEvent(int var1, boolean var2) throws IOException { this.eventBuf[this.eventBufLen++] = 4; this.eventBuf[this.eventBufLen++] = (byte)(var2 ? 1 : 0); this.eventBuf[this.eventBufLen++] = 0; this.eventBuf[this.eventBufLen++] = 0; this.eventBuf[this.eventBufLen++] = (byte)(var1 >> 24 & 255); this.eventBuf[this.eventBufLen++] = (byte)(var1 >> 16 & 255); this.eventBuf[this.eventBufLen++] = (byte)(var1 >> 8 & 255); this.eventBuf[this.eventBufLen++] = (byte)(var1 & 255); } void writeModifierKeyEvents(int var1) throws IOException { if ((var1 & 2) != (this.oldModifiers & 2)) { this.writeKeyEvent(65507, (var1 & 2) != 0); } if ((var1 & 1) != (this.oldModifiers & 1)) { this.writeKeyEvent(65505, (var1 & 1) != 0); } if ((var1 & 4) != (this.oldModifiers & 4)) { this.writeKeyEvent(65511, (var1 & 4) != 0); } if ((var1 & 8) != (this.oldModifiers & 8)) { this.writeKeyEvent(65513, (var1 & 8) != 0); } this.oldModifiers = var1; } }