view src/MyRfbProto.java @ 9:2237c4a06427

update MyRfbProto
author e085711
date Sat, 16 Apr 2011 00:22:17 +0900
parents efb8090ce9c3
children 9c7eab50c708
line wrap: on
line source

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);
	}

	void mark(int len) throws IOException {
		is.mark(len);
	}

	void reset() throws IOException {
		is.reset();
	}

	boolean markSupported() {
		return is.markSupported();
	}
	
	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();
		depth = readU8();
		bigEndian = (readU8() != 0);
		trueColour = (readU8() != 0);
		redMax = readU16();
		greenMax = readU16();
		blueMax = readU16();
		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);
	}
	
	
}