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