changeset 19:ea83f4be0cc9

remove is and os fix numberOfRectangle fill().
author Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
date Wed, 29 Aug 2012 21:28:18 +0900
parents 075fb190d5d4
children 98519d16a8c3
files src/main/java/com/glavsoft/rfb/protocol/Protocol.java src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java src/main/java/com/glavsoft/rfb/protocol/TreeTask.java src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java
diffstat 5 files changed, 90 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Tue Aug 28 20:03:44 2012 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Wed Aug 29 21:28:18 2012 +0900
@@ -297,11 +297,29 @@
 	{
 		this.rfbSessionListener = vncProxyService;
 		this.repaintController = surface;
+//		if (settings.getBitsPerPixel() == 0) {
+//			settings.setBitsPerPixel(pixelFormat.bitsPerPixel); // the same the server sent when not initialized yet
+//		}
+		serverPixelFormat = pixelFormat;
+		serverPixelFormat.trueColourFlag = 1; // correct flag - we don't support color maps
+		setPixelFormat(createPixelFormat(settings));
+		sendMessage(new SetPixelFormatMessage(pixelFormat));
+		logger.fine("sent: "+pixelFormat);
+
+		sendSupportedEncodingsMessage(settings);
+		settings.addListener(this); // to support pixel format (color depth), and encodings changes
+		settings.addListener(surface);
+
+		sendRefreshMessage();
+		senderTask = new SenderTask(messageQueue, writer, this);
+		senderThread = new Thread(senderTask);
+		senderThread.start();
 		decoders.resetDecoders();
 		receiverTask = new TreeTask(
 				reader, repaintController,
 				clipboardController,
-				decoders, this,true);
+				decoders, this, true);
+		receiverTask.setRfb(rfb);
 		receiverThread = new Thread(receiverTask);
 		receiverThread.start();
 	}
--- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Tue Aug 28 20:03:44 2012 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Wed Aug 29 21:28:18 2012 +0900
@@ -44,6 +44,8 @@
 import java.io.StringWriter;
 import java.util.logging.Logger;
 
+import jp.ac.u_ryukyu.treevnc.server.MyRfbProtoProxy;
+
 public class ReceiverTask implements Runnable {
 	private static final byte FRAMEBUFFER_UPDATE = 0;
 	private static final byte SET_COLOR_MAP_ENTRIES = 1;
@@ -71,6 +73,8 @@
 		this.clipboardController = clipboardController;
 		this.context = context;
 		this.decoders = decoders;
+		//renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(),
+				//context.getPixelFormat());
 		fullscreenFbUpdateIncrementalRequest =
 				new FramebufferUpdateRequestMessage(0, 0, context.getFbWidth(), context.getFbHeight(), true);
 	}
@@ -94,6 +98,7 @@
 		isRunning = true;
 		while (isRunning) {
 			try {
+				reader.mark(20);
 				byte messageId = reader.readByte();
 				switch (messageId) {
 				case FRAMEBUFFER_UPDATE:
@@ -218,4 +223,8 @@
 		isRunning = false;
 	}
 
+	public void setRfb(MyRfbProtoProxy rfb) {
+		/*nop*/
+	}
+
 }
--- a/src/main/java/com/glavsoft/rfb/protocol/TreeTask.java	Tue Aug 28 20:03:44 2012 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/TreeTask.java	Wed Aug 29 21:28:18 2012 +0900
@@ -1,74 +1,63 @@
 package com.glavsoft.rfb.protocol;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.nio.ByteBuffer;
-import java.util.LinkedList;
-import java.util.concurrent.atomic.AtomicInteger;
-
-
-import jp.ac.u_ryukyu.treevnc.MulticastQueue;
 import jp.ac.u_ryukyu.treevnc.server.*;
 
 import com.glavsoft.exceptions.CommonException;
 import com.glavsoft.exceptions.TransportException;
 import com.glavsoft.rfb.ClipboardController;
 import com.glavsoft.rfb.IRepaintController;
-import com.glavsoft.rfb.client.FramebufferUpdateRequestMessage;
-import com.glavsoft.rfb.client.SetPixelFormatMessage;
 import com.glavsoft.rfb.encoding.EncodingType;
-import com.glavsoft.rfb.encoding.decoder.Decoder;
 import com.glavsoft.rfb.encoding.decoder.DecodersContainer;
 import com.glavsoft.rfb.encoding.decoder.FramebufferUpdateRectangle;
-import com.glavsoft.rfb.encoding.decoder.RichCursorDecoder;
 import com.glavsoft.transport.Reader;
 
 public class TreeTask extends ReceiverTask {
-	private MulticastQueue<LinkedList<ByteBuffer>> multicastqueue = new MulticastQueue<LinkedList<ByteBuffer>>();
-	private int clients = 0;
-	private RequestScreenThread rThread;
 	final static String versionMsg_3_855 = "RFB 003.855\n";
 	private Reader reader;
-	
+	private MyRfbProtoProxy rfb;
+	private ProtocolContext context;
+
 	public TreeTask(Reader reader, IRepaintController repaintController,
 			ClipboardController clipboardController,
-			DecodersContainer decoders, ProtocolContext context,boolean flag) {
-		super(reader, repaintController, clipboardController, decoders, context,true);
+			DecodersContainer decoders, ProtocolContext context, boolean flag) {
+		super(reader, repaintController, clipboardController, decoders,
+				context, true);
+		this.context = context;
+		this.reader = reader;
 	}
-	
+
 	@Override
-	public void framebufferUpdateMessage() throws CommonException{
+	public void framebufferUpdateMessage() throws CommonException {
 		reader.readByte(); // padding
-		int numberOfRectangles = reader.readUInt16();
+		int numberOfRectangles = reader.readUInt16(); // number of rectangles
 		while (numberOfRectangles-- > 0) {
 			FramebufferUpdateRectangle rect = new FramebufferUpdateRectangle();
 			rect.fill(reader);
-
-			Decoder decoder = decoders.getDecoderByType(rect.getEncodingType());
-			logger.finest(rect.toString() + (0 == numberOfRectangles ? "\n---" : ""));
-			if (decoder != null) {
-				decoder.decode(reader, renderer, rect);
-				repaintController.repaintBitmap(rect);
-			} else if (rect.getEncodingType() == EncodingType.RICH_CURSOR) {
-				RichCursorDecoder.getInstance().decode(reader, renderer, rect);
-				repaintController.repaintCursor();
-			} else if (rect.getEncodingType() == EncodingType.CURSOR_POS) {
-				renderer.decodeCursorPosition(rect);
-				repaintController.repaintCursor();
-			} else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE) {
-				fullscreenFbUpdateIncrementalRequest =
-					new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, true);
-				synchronized (renderer) {
-					renderer = repaintController.createRenderer(reader, rect.width, rect.height,
-							context.getPixelFormat());
-				}
-				//				repaintController.repaintCursor();
-			} else
-				throw new CommonException("Unprocessed encoding: " + rect.toString());
+			int zrleLength = getZrleLength(rect);
+			reader.reset();
+			rfb.readSendData(zrleLength, reader);
+			boolean fullUpdateNeeded = false;
+			int w = context.getFbWidth();
+			int h = context.getFbHeight();
+			rfb.writeFramebufferUpdateRequest(0, 0, w, h, !fullUpdateNeeded);
+			// rfb.checkDelayData();
 		}
 	}
 
+	private int getZrleLength(FramebufferUpdateRectangle rect)
+			throws TransportException {
+		int zrleLength = 0;
+		if (rect.getEncodingType() == EncodingType.ZRLE
+				|| rect.getEncodingType() == EncodingType.ZRLEE
+				|| rect.getEncodingType() == EncodingType.ZLIB) {
+			zrleLength = reader.readInt32();
+			;
+		}
+		return zrleLength + 20;
+	}
 
+	@Override
+	public void setRfb(MyRfbProtoProxy _rfb) {
+		rfb = _rfb;
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Tue Aug 28 20:03:44 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Wed Aug 29 21:28:18 2012 +0900
@@ -2,16 +2,7 @@
 
 import static org.junit.Assert.*;
 
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.image.BufferedImage;
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-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;
 import java.net.Socket;
@@ -19,10 +10,10 @@
 import java.util.Iterator;
 import java.util.LinkedList;
 
-import javax.imageio.ImageIO;
 
 import org.junit.Test;
 
+import com.glavsoft.exceptions.CommonException;
 import com.glavsoft.exceptions.TransportException;
 import com.glavsoft.rfb.encoding.EncodingType;
 import com.glavsoft.transport.Reader;
@@ -35,7 +26,6 @@
 import java.util.zip.DataFormatException;
 import java.util.zip.Deflater;
 import java.util.zip.Inflater;
-import java.io.OutputStream;
 
 import jp.ac.u_ryukyu.treevnc.MulticastQueue;
 
@@ -58,15 +48,7 @@
 	private static final int INFLATE_BUFSIZE = 1024 * 100;
 	boolean printStatusFlag = false;
 	long startCheckTime;
-	private int messageType;
-	private int rectangles;
-	private int rectX;
-	private int rectY;
-	private int rectW;
-	private int rectH;
-	private int encoding;
-	private int zLen;
-	private boolean clicomp = false;
+
 
 	private ServerSocket servSock;
 	protected int acceptPort;
@@ -76,7 +58,7 @@
 	private LinkedList<Socket> cliList;
 	boolean createBimgFlag;
 	boolean proxyFlag = true;
-	private Reader is;
+//	private Reader is;
 	private Writer os;
 	ExecutorService executor;
 
@@ -88,7 +70,6 @@
 	private int clients = 0;
 	private Inflater inflater = new Inflater();
 	private Deflater deflater = new Deflater();
-	private CreateThread getHost;
 	// private Thread requestThread;
 	private RequestScreenThread rThread;
 	private Thread requestThread;
@@ -98,8 +79,7 @@
 		requestThread = new Thread(rThread);
 	}
 
-	public void setStream(Reader _reader, Writer _writer) {
-		is = _reader;
+	public void setStream(Writer _writer) {
 		os = _writer;
 	}
 
@@ -271,6 +251,7 @@
 	 * send data to clients
 	 * 
 	 * @param dataLen
+	 * @param is 
 	 * @throws IOException
 	 * @throws DataFormatException
 	 * 
@@ -289,8 +270,7 @@
 	 * @throws TransportException
 	 */
 
-	void readSendData(int dataLen) throws IOException, DataFormatException,
-			TransportException {
+	public void readSendData(int dataLen, Reader is) throws CommonException {
 		LinkedList<ByteBuffer> bufs = new LinkedList<ByteBuffer>();
 		ByteBuffer header = ByteBuffer.allocate(16);
 		is.readBytes(header.array(), 0, 16);
@@ -320,9 +300,16 @@
 				// protocol, clients have to be modified.
 				Deflater nDeflater = deflater; // new Deflater();
 				LinkedList<ByteBuffer> out = new LinkedList<ByteBuffer>();
-				unzip(inflater, inputs, 0, out, INFLATE_BUFSIZE);
-				// dump32(inputs);
-				int len2 = zip(nDeflater, out, 0, bufs);
+				int len2 = 0;
+				try {
+					unzip(inflater, inputs, 0, out, INFLATE_BUFSIZE);
+					len2 = zip(nDeflater, out, 0, bufs);
+				} catch (DataFormatException e) {
+					throw new CommonException(e);
+				} catch (IOException e) {
+					throw new CommonException(e);
+				}
+				
 				ByteBuffer blen = ByteBuffer.allocate(4);
 				blen.putInt(len2);
 				blen.flip();
@@ -369,8 +356,7 @@
 		// rfb.addSockTmp(newCli);
 		// addSock(newCli);
 		final int myId = clients;
-		final MulticastQueue.Client<LinkedList<ByteBuffer>> c = multicastqueue
-				.newClient();
+		final MulticastQueue.Client<LinkedList<ByteBuffer>> c = multicastqueue.newClient();
 		final AtomicInteger writerRunning = new AtomicInteger();
 		writerRunning.set(1);
 		/**
@@ -458,7 +444,7 @@
 					 */
 					sendRfbVersion(os);
 					// readVersionMsg(is);
-					int rfbMinor = readVersionMsg(is, os);
+					readVersionMsg(is, os);
 					sendSecurityType(os);
 					readSecType(is);
 					sendSecResult(os);
@@ -468,7 +454,6 @@
 												// after.
 					// writeFramebufferUpdateRequest(0,0, framebufferWidth,
 					// framebufferHeight, false );
-					int i = 0;
 					for (;;) {
 						LinkedList<ByteBuffer> bufs = c.poll();
 						int inputIndex = 0;
@@ -695,14 +680,6 @@
 		writer.write(b);
 	}
 
-	boolean readProxyFlag() throws IOException, TransportException {
-		int flag = is.readUInt8();
-		if (flag == 1)
-			return true;
-		else
-			return false;
-	}
-
 	void sendSecurityType(Writer os) throws TransportException {
 		// number-of-security-types
 		os.writeInt(1);
@@ -781,7 +758,7 @@
 		os.write(initData);
 	}
 
-	void writeFramebufferUpdateRequest(int x, int y, int w, int h,
+	public void writeFramebufferUpdateRequest(int x, int y, int w, int h,
 			boolean incremental) throws TransportException {
 		byte[] b = new byte[10];
 
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Tue Aug 28 20:03:44 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Wed Aug 29 21:28:18 2012 +0900
@@ -129,7 +129,7 @@
 				workingSocket.setTcpNoDelay(true); // disable Nagle algorithm
 				Reader reader = new Reader(workingSocket.getInputStream());
 				Writer writer = new Writer(workingSocket.getOutputStream());
-				rfb.setStream(reader,writer);
+		//		rfb.setStream(reader,writer);
 				workingProtocol = new Protocol(reader, writer,
 						new PasswordChooser(passwordFromParams, connectionParams, containerFrame, this),
 						settings);
@@ -144,7 +144,14 @@
 				clipboardController.setEnabled(settings.isAllowClipboardTransfer());
 				settings.addListener(clipboardController);
 				
-				surface = new Surface(workingProtocol, this, uiSettings.getScaleFactor());
+				surface = new Surface(workingProtocol, this, uiSettings.getScaleFactor()); // this method
+				/*
+				settings.addListener(this);
+				uiSettings.addListener(surface);
+				containerFrame = createContainer();
+				connectionManager.setContainerFrame(containerFrame);
+				updateFrameTitle();
+				*/
 				
 				workingProtocol.startNormalHandling(this, surface, clipboardController,rfb);
 				rfb.setInitData(workingProtocol.getInitData());