changeset 43:08317224ce21

create RFB 003.998
author e085711
date Thu, 23 Jun 2011 07:03:21 +0900
parents 03d2e5db2135
children ff1d1f236c8a
files src/myVncProxy/MyRfbProto.java src/myVncProxy/RfbProto.java src/myVncProxy/acceptThread.java
diffstat 3 files changed, 59 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/myVncProxy/MyRfbProto.java	Thu Jun 23 04:47:53 2011 +0900
+++ b/src/myVncProxy/MyRfbProto.java	Thu Jun 23 07:03:21 2011 +0900
@@ -7,6 +7,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.BindException;
 import java.net.ServerSocket;
@@ -21,6 +22,9 @@
 
 class MyRfbProto extends RfbProto {
 
+	final static String versionMsg_3_998 = "RFB 003.998\n";
+	
+	
 	private int messageType;
 	private int rectangles;
 	private int rectX;
@@ -64,6 +68,31 @@
 		executor = Executors.newSingleThreadExecutor();
 	}
 
+	// override
+	void writeVersionMsg() throws IOException {
+		clientMajor = 3;
+		if (serverMinor >= 9) {
+		clientMinor = 9;
+		os.write(versionMsg_3_998.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());
+		} else {
+			clientMinor = 3;
+			os.write(versionMsg_3_3.getBytes());
+		}
+		protocolTightVNC = false;
+		initCapabilities();
+	}
+
+
+	
 	void initServSock(int port) throws IOException{
 		servSock = new ServerSocket(port);
 		acceptPort = port;
@@ -160,8 +189,23 @@
 		inNormalProtocol = true;
 	}
 
-	void sendInitData(Socket sock) throws IOException{
-			sock.getOutputStream().write(initData);
+	void sendRfbVersion(OutputStream os) throws IOException{
+		os.write(versionMsg_3_998.getBytes());	
+	}
+	void sendSecurityType(OutputStream os) throws IOException {
+		// number-of-security-types
+		os.write(1);
+		// security-types 
+		// 1:None
+		os.write(1);
+	}
+	void readClientInit(InputStream in) throws IOException {
+		byte[] b = new byte[0];
+		in.read(b);
+	}
+	
+	void sendInitData(OutputStream os) throws IOException{
+			os.write(initData);
 	}
 
 	void sendData(byte b[]){
@@ -326,3 +370,5 @@
 		}
 	}
 }
+
+
--- a/src/myVncProxy/RfbProto.java	Thu Jun 23 04:47:53 2011 +0900
+++ b/src/myVncProxy/RfbProto.java	Thu Jun 23 07:03:21 2011 +0900
@@ -38,6 +38,7 @@
 	final static String versionMsg_3_3 = "RFB 003.003\n",
 			versionMsg_3_7 = "RFB 003.007\n", versionMsg_3_8 = "RFB 003.008\n";
 
+
 	// Vendor signatures: standard VNC/RealVNC, TridiaVNC, and TightVNC
 	final static String StandardVendor = "STDV", TridiaVncVendor = "TRDV",
 			TightVncVendor = "TGHT";
@@ -559,9 +560,9 @@
 	void writeClientInit() throws IOException {
 /*
 		if (viewer.options.shareDesktop) {
+*/
 			os.write(1);
-*/
-			os.write(0);
+//			os.write(0);
 
 //		viewer.options.disableShareDesktop();
 	}
--- a/src/myVncProxy/acceptThread.java	Thu Jun 23 04:47:53 2011 +0900
+++ b/src/myVncProxy/acceptThread.java	Thu Jun 23 07:03:21 2011 +0900
@@ -1,6 +1,8 @@
 package myVncProxy;
 import java.net.Socket;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 
 public class acceptThread implements Runnable {
 	MyRfbProto rfb;
@@ -14,7 +16,12 @@
 		while (true) {
 			try {
 				Socket newCli = rfb.accept();
-				rfb.sendInitData(newCli);
+				OutputStream os = newCli.getOutputStream();
+				InputStream is = newCli.getInputStream();
+				rfb.sendRfbVersion(os);
+				rfb.sendSecurityType(os);
+				rfb.readClientInit(is);
+				rfb.sendInitData(os);
 				rfb.createBimgFlag = true;
 //				rfb.addSockTmp(newCli);
 				rfb.addSock(newCli);