# HG changeset patch # User e085711 # Date 1302880526 -32400 # Node ID efb8090ce9c3deac6368147e970ce11992af65a6 # Parent 94c9e7825be2ec2cf2abd0e6681844b093941108 update MyRfbProto diff -r 94c9e7825be2 -r efb8090ce9c3 src/MyRfbProto.java --- a/src/MyRfbProto.java Fri Apr 15 23:50:43 2011 +0900 +++ b/src/MyRfbProto.java Sat Apr 16 00:15:26 2011 +0900 @@ -1,7 +1,12 @@ import java.io.IOException; import java.net.Socket; +import java.nio.ByteBuffer; + class MyRfbProto extends RfbProto { + + private byte initData[]; + MyRfbProto(String h, int p, VncViewer v) throws IOException { super(h, p, v); } @@ -14,11 +19,19 @@ is.reset(); } - final boolean markSupported() { + boolean markSupported() { return is.markSupported(); } - - void init(Socket sock) throws IOException { + + void readServerInit() throws IOException { + + mark(255); + skipBytes(20); + int nlen = readU32(); + initData = new byte[20+4+nlen]; + readFully(initData); + reset(); + framebufferWidth = readU16(); framebufferHeight = readU16(); bitsPerPixel = readU8(); @@ -31,10 +44,30 @@ redShift = readU8(); greenShift = readU8(); blueShift = readU8(); + byte[] pad = new byte[3]; + readFully(pad); + int nameLength = readU32(); + byte[] name = new byte[nameLength]; + readFully(name); + desktopName = new String(name); + // Read interaction capabilities (TightVNC protocol extensions) + if (protocolTightVNC) { + int nServerMessageTypes = readU16(); + int nClientMessageTypes = readU16(); + int nEncodingTypes = readU16(); + readU16(); + readCapabilityList(serverMsgCaps, nServerMessageTypes); + readCapabilityList(clientMsgCaps, nClientMessageTypes); + readCapabilityList(encodingCaps, nEncodingTypes); + } + + inNormalProtocol = true; } + void sendinitData(Socket sock) throws IOException{ + sock.getOutputStream().write(initData); + } - }