Mercurial > hg > Members > nobuyasu > tightVNCProxy
diff src/MyRfbProto.java @ 10:2840c7a259f1
add acceptThread
author | e085711 |
---|---|
date | Sat, 16 Apr 2011 02:21:09 +0900 |
parents | |
children | a5d73cafc8fe |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/MyRfbProto.java Sat Apr 16 02:21:09 2011 +0900 @@ -0,0 +1,108 @@ +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; +import java.nio.ByteBuffer; +import java.util.LinkedList; + + +class MyRfbProto extends RfbProto { + + private ServerSocket servSock; + private byte initData[]; + private LinkedList <Socket> cliList; + boolean MYVNC = true; + + + MyRfbProto(String h, int p, VncViewer v) throws IOException { + super(h, p, v); + cliList = new LinkedList <Socket>(); + } + + void initServSock(int port) throws IOException{ + servSock = new ServerSocket(port); + } + + void setSoTimeout(int num) throws IOException { + servSock.setSoTimeout(num); + } + + Socket accept() throws IOException { + return servSock.accept(); + } + + void addSock(Socket sock){ + cliList.add(sock); + } + + 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(); + int blen = 20+4+nlen; + initData = new byte[blen]; + reset(); + + mark(blen); + 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); + } + + void sendData(byte b[]) throws IOException{ + for(Socket cli : cliList) + cli.getOutputStream().write(b, 0, b.length); + } + + int cliSize(){ + return cliList.size(); + } + +}