Mercurial > hg > Members > nobuyasu > tightVNCProxy
changeset 157:881e5b87ee42
merge 152
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 12 Oct 2011 02:19:51 +0900 |
parents | b570efb0d266 (diff) fb1a62154851 (current diff) |
children | 1c0af90f7f59 |
files | src/myVncProxy/MyRfbProto.java |
diffstat | 3 files changed, 56 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/src/myVncProxy/MyRfbProto.java Sat Sep 10 04:16:19 2011 +0900 +++ b/src/myVncProxy/MyRfbProto.java Wed Oct 12 02:19:51 2011 +0900 @@ -34,9 +34,9 @@ public class MyRfbProto extends RfbProto { - final static String versionMsg_3_998 = "RFB 003.998\n"; + final static String versionMsg_3_855 = "RFB 003.855\n"; /** - * CheckMillis is one of new msgType for RFB 3.998. + * CheckMillis is one of new msgType for RFB 3.855. */ final static byte SpeedCheckMillis = 4; private static final int INFLATE_BUFSIZE = 1024*100; @@ -59,6 +59,7 @@ private LinkedList<Socket> cliListTmp; private LinkedList<Socket> cliList; boolean createBimgFlag; + boolean proxyFlag = true; ExecutorService executor; @@ -82,6 +83,7 @@ MyRfbProto(String h, int p, CreateThread geth) throws IOException { super(h, p); this.geth = geth; + proxyFlag = true; } MyRfbProto(String h, int p) throws IOException { @@ -91,15 +93,12 @@ // over write void writeVersionMsg() throws IOException { clientMajor = 3; - if (serverMinor >= 9) { - clientMinor = 9; - os.write(versionMsg_3_998.getBytes()); + if (serverMinor == 855) { + clientMinor = 855; + os.write(versionMsg_3_855.getBytes()); } else if (serverMajor > 3 || serverMinor >= 8) { clientMinor = 8; os.write(versionMsg_3_8.getBytes()); - } else if (serverMinor >= 9) { - clientMinor = 9; - os.write(versionMsg_3_998.getBytes()); } else if (serverMinor >= 7) { clientMinor = 7; os.write(versionMsg_3_7.getBytes()); @@ -116,7 +115,9 @@ acceptPort = port; } - // 5999を開けるが、開いてないなら+1のポートを開ける。 + /* + * default port number is 5999. + */ void selectPort(int p) { if(servSock != null ) return ; int port = p; @@ -206,11 +207,11 @@ } void sendRfbVersion(OutputStream os) throws IOException { - os.write(versionMsg_3_998.getBytes()); // os.write(versionMsg_3_8.getBytes()); + os.write(versionMsg_3_855.getBytes()); } - void readVersionMsg(InputStream is, OutputStream os) throws IOException { + int readVersionMsg(InputStream is, OutputStream os) throws IOException { byte[] b = new byte[12]; @@ -225,18 +226,31 @@ + " is not an RFB server"); } - serverMajor = (b[4] - '0') * 100 + (b[5] - '0') * 10 + (b[6] - '0'); - serverMinor = (b[8] - '0') * 100 + (b[9] - '0') * 10 + (b[10] - '0'); + int rfbMajor = (b[4] - '0') * 100 + (b[5] - '0') * 10 + (b[6] - '0'); + int rfbMinor = (b[8] - '0') * 100 + (b[9] - '0') * 10 + (b[10] - '0'); - if (serverMajor < 3) { + if (rfbMajor < 3) { throw new IOException( "RFB server does not support protocol version 3"); } - if (serverMinor == 998) { - sendPortNumber(os); + if (rfbMinor == 855) { + sendProxyFlag(os); + if(proxyFlag)sendPortNumber(os); } - + return rfbMinor; + } + void sendProxyFlag(OutputStream os) throws IOException { + if(proxyFlag) os.write(1); + else os.write(0); + } + + boolean readProxyFlag() throws IOException{ + int flag = readU8(); + if(flag == 1) + return true; + else + return false; } void sendPortNumber(OutputStream os) throws IOException { @@ -347,7 +361,7 @@ case RfbProto.EncodingZRLE: case RfbProto.EncodingZRLEE: dataLen = zLen + 20; -// is.mark(dataLen); + // is.mark(dataLen); break; case RfbProto.EncodingXCursor: case RfbProto.EncodingRichCursor: @@ -367,7 +381,7 @@ void sendDataToClient() throws Exception { regiFramebufferUpdate(); - printFramebufferUpdate(); +// printFramebufferUpdate(); int dataLen = checkAndMark(); readSendData(dataLen); } @@ -583,7 +597,9 @@ } return len; } + + float maxMag = 1; /** * send data to clients * @param dataLen @@ -630,14 +646,24 @@ bufs.addFirst(header); multicastqueue.put(bufs); +// is.reset(); -// is.reset(); +/* + System.out.println("ZRLE = "+dataLen); + System.out.println("ZRLEE = "+(len2+20)); + float mag = (float)dataLen / (float)(len2 + 20); + System.out.println("ZRLE / ZRLEE = "+ mag); + if(mag > maxMag) maxMag = mag; + System.out.println("maxMag = "+maxMag); +*/ return ; } bufs.add(header); if (dataLen>16) { ByteBuffer b = ByteBuffer.allocate(dataLen-16); + startTiming(); readFully(b.array(),0,dataLen-16); b.limit(dataLen-16); + stopTiming(); bufs.add(b); } multicastqueue.put(bufs); @@ -731,13 +757,14 @@ */ sendRfbVersion(os); // readVersionMsg(is); - readVersionMsg(is,os); + int rfbMinor = readVersionMsg(is,os); sendSecurityType(os); readSecType(is); sendSecResult(os); readClientInit(is); sendInitData(os); new Thread(reader).start(); // discard incoming packet here after. + writeFramebufferUpdateRequest(0,0, framebufferWidth, framebufferHeight, false ); for (;;) { LinkedList<ByteBuffer> bufs = c.poll(); int inputIndex = 0;
--- a/src/myVncProxy/ProxyVncCanvas.java Sat Sep 10 04:16:19 2011 +0900 +++ b/src/myVncProxy/ProxyVncCanvas.java Wed Oct 12 02:19:51 2011 +0900 @@ -360,7 +360,7 @@ long count = 0; long buf = 0; while (true) { - System.out.println("\ncount=" + count); +// System.out.println("\ncount=" + count); count++; @@ -371,12 +371,12 @@ -// rfb.sendDataToClient(); + rfb.sendDataToClient(); -// long kbitsPerSecond = rfb.kbitsPerSecond(); + long kbitsPerSecond = rfb.kbitsPerSecond(); // System.out.println("Throughput " + kbitsPerSecond + " kbit/s"); -/* + if(rfb.returnMsgtype() == RfbProto.FramebufferUpdate ) { boolean fullUpdateNeeded = false; int w = rfb.framebufferWidth; @@ -384,7 +384,7 @@ rfb.writeFramebufferUpdateRequest(0, 0, w, h, !fullUpdateNeeded); continue; } -*/ + long numBytesRead = rfb.getNumBytesRead(); @@ -398,12 +398,12 @@ rfb.readSpeedCheck(); break; case RfbProto.FramebufferUpdate: -/* + if(msgType == RfbProto.FramebufferUpdate){ rfb.is.reset(); break; } -*/ + if (statNumUpdates == viewer.debugStatsExcludeUpdates && !statsRestarted) { resetStats();
--- a/src/myVncProxy/VncProxyService.java Sat Sep 10 04:16:19 2011 +0900 +++ b/src/myVncProxy/VncProxyService.java Wed Oct 12 02:19:51 2011 +0900 @@ -486,7 +486,7 @@ if (encodingsWereChanged) { try { - rfb.writeSetEncodings(encodings, nEncodings); + rfb.writeSetEncodings(encodings, nEncodings); if (vc != null) { vc.softCursorFree(); }