From 4f1a29b0603f802f4c8e9b1a83b42142983f7be2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 Jun 2010 23:49:16 -0700 Subject: [PATCH 1/3] Deleted accidentally committed vim swap file. --- .../guacamole/vnc/.VNCClient.java.swp | Bin 16384 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 guacamole/src/net/sourceforge/guacamole/vnc/.VNCClient.java.swp diff --git a/guacamole/src/net/sourceforge/guacamole/vnc/.VNCClient.java.swp b/guacamole/src/net/sourceforge/guacamole/vnc/.VNCClient.java.swp deleted file mode 100644 index e997b5158a2251f7bb8a8201737e308dce43b830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHNTZ|i58J;9&QctL6I1 zG|}WtdQCl7s~FWSbknRAs`b2v+ef zC>7_3cF=I_qF5@5X*73lVp_e)Josje&nIcye z#cg+3zzH6*Qb!)LQU{MluTW#?@_^Pww14Z?w{8idJKM|(oG}-($?Ff$AV~3Sn;LP~Q?Ixk)$ki0 zcK*QdI}tZ|K&|$;W=QQQaCuJ+JJg2yuI0JTIodPv_2waroexZk%#7@o<~12SwA!=O zht8*KURLd(*WpYxJdZXlZ^dKwju^`s>iuq%Eyr>F<_z5x%b8Enq;^0#h{#(uXF+d_ zwLwo~(pGg-5;k2a=XP2&z)F(~XgERz*WaN|!43JCWxSAT{*KSO{yGc!^q68T6BJQi zb=#Ch`{@~2n|)o)aRM5KH#gW9Pju5|YRwO$j#&BB(S4ikO|lAQqqIk7AzQV$Rf_l? z6HzMcIZ+{BiFXC+?CT^^+S8HM<*F-om4Ux`_ZU1xs?uHY0I4os*Dc@i#K6wn7>9Vu;I_a z#9qF{?O}?eczuacuHXhn18fTGAYx+13;9}Lby}_+F0BqaF|f@skBK!)9?AlQSRV76 zq>Fuy@Rl3mSjw8XQ>la)4dOF?f`pWk54AY&JeJLNyIr;EM=G8|&f?}u{g8&)538}K zEf$fm#UjrkEo+yOfZEjEr4F%(4XO!ipan|SiZ!B%yC5TL)TaSX?B)KQy3ltBXR*JT ziUbcslQs(|aVWQ3FYNbYL$Bo4wPICUF$y>V5h&%2Y7wVug7Xv6NLj1kTv97&6;iHM z$|X}rv?iiN_u`hfBThDr>UybGC0cQdY-*JX9BwVgJYhp36ze382J;1vUOS{~1%c&r z5oPS6I>IFZtq%6Wz=dPzx_#3Y>xd>TPFxPho=3JRi9*_lyb}or8AyA0@SCvs$gw~y zzenO5AK9frD9#mebAs4>fDla9;OGm!vB-Cj6*2z=p%`5nBo^d!G8B^V6QC&ef_}gV zn!+7cSUXHKXOD%2sUwClY$3w!-c%AAqKBdE;bS5&Vp~2Y%8(tw1-74TJhG145RPJB zVzmZtv&Bg!w?LK_Pc0I%;o2>WdgN@>?$CY+gJT*wiD?BM&f?f$+JW2Q+4bs1K^z3- z(ND=fghQfb?_kT^=kSMpXIT;X|L2h-e;WC-$p4f7r(Z*!|23cr90Puj9RGFT72sLm zKHw0b052iee@^E8AI1A=;D^ZZuLGY0D!>!KM}SknB5)h%g~xrvV>02b={|;61>dz*~sv%fJ_a&jOzTM4X=j(ko>k zWgulBWgulBWgunXf62g;apAK6DoU8cPvRSI1+0r>T$c=vfP;)ZbG%4-mjye71_4f% z-InW76b4y{90~_gQEE_+4BalS?9*4u_5KpeOq*tD(Ehbwn~^Gv7z< zn_1`+7fxYK8a`1%rV+Rf?Ry=@ZT3P=+bV=A{>$*W=Vy@P$ncYYH{$j@*36(r7n2PQ zQF9g1KRN8@(5n!jKotc(@}xmB9jXCsvt62ZgAkn_4wFy^2PQIN(nk3QXZaBMjOWmh z;*#$D$n(Y>xebyTYcxcW4ir6(g7ShA+sYR-8K=i1ZH{GnDBePQ$8&Kij}ia~vxe-FM!?!}8Wqw2Q-fqsf*UTb zg~^4KbYa$lO7y08wH4Q-HslCrwnYgQ^J!ux2p_{KpLi7S7_fd>3$w~*Z7~&x(=*TA!hD(t@oxbV_mKsa_?+I$eFt!a&`?a*kv{}T)IqK;N+wvqn7Ew%*9o2;kO&v` z4wN?4h8Kmc$)%UjF{0N+&77Jo)KxQag#EhZIu*J5!m=2MR{U8RwH^H|+nerZ({*^O Z@1`q09>B|D-wYLnJ+7M@mL`{#e**>XfY$&3 From 73cead967952e8d5e7a8c8662ed56b444f3bbfd4 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 1 Jul 2010 00:15:08 -0700 Subject: [PATCH 2/3] Switched to little-endian byte order by default. --- .../guacamole/vnc/VNCFullColorImageReader.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/guacamole/src/net/sourceforge/guacamole/vnc/VNCFullColorImageReader.java b/guacamole/src/net/sourceforge/guacamole/vnc/VNCFullColorImageReader.java index 108af77d0..0493f400a 100644 --- a/guacamole/src/net/sourceforge/guacamole/vnc/VNCFullColorImageReader.java +++ b/guacamole/src/net/sourceforge/guacamole/vnc/VNCFullColorImageReader.java @@ -44,7 +44,7 @@ public class VNCFullColorImageReader extends VNCImageReader { private boolean readAsIndexed; public boolean isBigEndian() { - return true; + return false; } public int getBitsPerPixel() { @@ -97,11 +97,11 @@ public class VNCFullColorImageReader extends VNCImageReader { this.greenBits = greenBits; this.blueBits = blueBits; - redMax = (1 << redBits) - 1; - greenMax = (1 << greenBits) - 1; blueMax = (1 << blueBits) - 1; + greenMax = (1 << greenBits) - 1; + redMax = (1 << redBits) - 1; - redShift = greenBits + blueBits; + redShift = greenBits + blueBits; greenShift = blueBits; blueShift = 0; @@ -120,9 +120,9 @@ public class VNCFullColorImageReader extends VNCImageReader { if (redBits != 8 || greenBits != 8 || blueBits != 8) return readPixel(input); - int red = input.read(); - int green = input.read(); int blue = input.read(); + int green = input.read(); + int red = input.read(); int color = (red << 16) | (green << 8) | blue; return color; @@ -136,10 +136,10 @@ public class VNCFullColorImageReader extends VNCImageReader { value = input.read(); break; case 16: - value = input.readShort(); + value = Short.reverseBytes(input.readShort()); break; case 32: - value = input.readInt(); + value = Integer.reverseBytes(input.readInt()); break; default: throw new IOException("Invalid BPP."); From b35d9cda320f19bacd749a68b95797c6f54d53ec Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 1 Jul 2010 01:25:04 -0700 Subject: [PATCH 3/3] Use endianness of server by default. --- .../sourceforge/guacamole/vnc/VNCClient.java | 23 ++++++++++--- .../vnc/VNCFullColorImageReader.java | 34 +++++++++++++++---- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/guacamole/src/net/sourceforge/guacamole/vnc/VNCClient.java b/guacamole/src/net/sourceforge/guacamole/vnc/VNCClient.java index ccce39174..69352b715 100644 --- a/guacamole/src/net/sourceforge/guacamole/vnc/VNCClient.java +++ b/guacamole/src/net/sourceforge/guacamole/vnc/VNCClient.java @@ -293,8 +293,21 @@ public class VNCClient extends Client { log("Reading ServerInit..."); frameBufferWidth = input.readUnsignedShort(); frameBufferHeight = input.readUnsignedShort(); - byte[] pixelFormat = new byte[16]; - input.readFully(pixelFormat); + + // Pixel format + int bpp = input.read(); + int depth = input.read(); + boolean bigEndian = input.readBoolean(); + boolean trueColor = input.readBoolean(); + int redMax = input.readUnsignedShort(); + int greenMax = input.readUnsignedShort(); + int blueMax = input.readUnsignedShort(); + int redShift = input.read(); + int greenShift = input.read(); + int blueShift = input.read(); + byte[] padding = new byte[3]; + input.readFully(padding); + int nameLength = input.readInt(); byte[] nameBytes = new byte[nameLength]; input.readFully(nameBytes); @@ -312,11 +325,11 @@ public class VNCClient extends Client { // Set pixel format VNCFullColorImageReader fullColorReader; if (colorBits == 8) - fullColorReader = new VNCFullColorImageReader(3, 3, 2, 8); + fullColorReader = new VNCFullColorImageReader(bigEndian, 3, 3, 2, 8); else if (colorBits == 16) - fullColorReader = new VNCFullColorImageReader(5, 6, 5, outputBPP); + fullColorReader = new VNCFullColorImageReader(bigEndian, 5, 6, 5, outputBPP); else if (colorBits == 24) - fullColorReader = new VNCFullColorImageReader(8, 8, 8, outputBPP); + fullColorReader = new VNCFullColorImageReader(bigEndian, 8, 8, 8, outputBPP); else throw new VNCException("Color depth " + colorBits + " not supported. Only color depths of 8, 16, or 24 are allowed."); diff --git a/guacamole/src/net/sourceforge/guacamole/vnc/VNCFullColorImageReader.java b/guacamole/src/net/sourceforge/guacamole/vnc/VNCFullColorImageReader.java index 0493f400a..5315e3e9a 100644 --- a/guacamole/src/net/sourceforge/guacamole/vnc/VNCFullColorImageReader.java +++ b/guacamole/src/net/sourceforge/guacamole/vnc/VNCFullColorImageReader.java @@ -42,9 +42,10 @@ public class VNCFullColorImageReader extends VNCImageReader { private int blueShift; private boolean readAsIndexed; + private boolean bigEndian; public boolean isBigEndian() { - return false; + return bigEndian; } public int getBitsPerPixel() { @@ -80,7 +81,7 @@ public class VNCFullColorImageReader extends VNCImageReader { } // Set up BGR reader - public VNCFullColorImageReader(int redBits, int greenBits, int blueBits, int outputBPP) throws VNCException { + public VNCFullColorImageReader(boolean bigEndian, int redBits, int greenBits, int blueBits, int outputBPP) throws VNCException { depth = redBits + greenBits + blueBits; @@ -120,9 +121,20 @@ public class VNCFullColorImageReader extends VNCImageReader { if (redBits != 8 || greenBits != 8 || blueBits != 8) return readPixel(input); - int blue = input.read(); - int green = input.read(); - int red = input.read(); + int red; + int green; + int blue; + + if (bigEndian) { + red = input.read(); + green = input.read(); + blue = input.read(); + } + else { + blue = input.read(); + green = input.read(); + red = input.read(); + } int color = (red << 16) | (green << 8) | blue; return color; @@ -136,10 +148,18 @@ public class VNCFullColorImageReader extends VNCImageReader { value = input.read(); break; case 16: - value = Short.reverseBytes(input.readShort()); + + short inputShort = input.readShort(); + if (!bigEndian) inputShort = Short.reverseBytes(inputShort); + + value = inputShort; break; case 32: - value = Integer.reverseBytes(input.readInt()); + + int inputInt = input.readInt(); + if (!bigEndian) inputInt = Integer.reverseBytes(inputInt); + + value = inputInt; break; default: throw new IOException("Invalid BPP.");