diff --git a/guacamole/client/Makefile b/guacamole/client/Makefile
deleted file mode 100644
index 760266a47..000000000
--- a/guacamole/client/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-
-.PHONY: client clean
-
-all: client
-
-client:
- ant war
-
-clean:
- ant clean
-
diff --git a/guacamole/client/web/agpl-3.0-standalone.html b/guacamole/client/agpl-3.0-standalone.html
similarity index 100%
rename from guacamole/client/web/agpl-3.0-standalone.html
rename to guacamole/client/agpl-3.0-standalone.html
diff --git a/guacamole/client/ant/build.properties b/guacamole/client/ant/build.properties
deleted file mode 100644
index 5fa6766cc..000000000
--- a/guacamole/client/ant/build.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-servlet.api.jar=/usr/share/tomcat6/lib/servlet-api.jar
-
-src.dir=src
-web.dir=web
-
-build.dir=build
-dist.dir=dist
-doc.dir=doc
-
-guac.version=0.3.0rc1
-tar.dir=guacamole-${guac.version}
-tar.src.dir=guacamole-src
-
diff --git a/guacamole/client/build.xml b/guacamole/client/build.xml
deleted file mode 100644
index 88685640e..000000000
--- a/guacamole/client/build.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/guacamole/client/doc/example/guacamole-users.xml b/guacamole/client/doc/example/guacamole-users.xml
deleted file mode 100644
index 50bb77a12..000000000
--- a/guacamole/client/doc/example/guacamole-users.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/guacamole/client/doc/example/guacamole.xml b/guacamole/client/doc/example/guacamole.xml
deleted file mode 100644
index 1c005f4da..000000000
--- a/guacamole/client/doc/example/guacamole.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/guacamole/client/web/guacamole.css b/guacamole/client/guacamole.css
similarity index 100%
rename from guacamole/client/web/guacamole.css
rename to guacamole/client/guacamole.css
diff --git a/guacamole/client/web/images/agpl-logo.png b/guacamole/client/images/agpl-logo.png
similarity index 100%
rename from guacamole/client/web/images/agpl-logo.png
rename to guacamole/client/images/agpl-logo.png
diff --git a/guacamole/client/web/images/checker.png b/guacamole/client/images/checker.png
similarity index 100%
rename from guacamole/client/web/images/checker.png
rename to guacamole/client/images/checker.png
diff --git a/guacamole/client/web/images/guacamole-64-icon.png b/guacamole/client/images/guacamole-64-icon.png
similarity index 100%
rename from guacamole/client/web/images/guacamole-64-icon.png
rename to guacamole/client/images/guacamole-64-icon.png
diff --git a/guacamole/client/web/images/guacamole-icon-64.png b/guacamole/client/images/guacamole-icon-64.png
similarity index 100%
rename from guacamole/client/web/images/guacamole-icon-64.png
rename to guacamole/client/images/guacamole-icon-64.png
diff --git a/guacamole/client/web/images/guacamole-logo.png b/guacamole/client/images/guacamole-logo.png
similarity index 100%
rename from guacamole/client/web/images/guacamole-logo.png
rename to guacamole/client/images/guacamole-logo.png
diff --git a/guacamole/client/web/images/mouse/blank.cur b/guacamole/client/images/mouse/blank.cur
similarity index 100%
rename from guacamole/client/web/images/mouse/blank.cur
rename to guacamole/client/images/mouse/blank.cur
diff --git a/guacamole/client/web/images/mouse/blank.gif b/guacamole/client/images/mouse/blank.gif
similarity index 100%
rename from guacamole/client/web/images/mouse/blank.gif
rename to guacamole/client/images/mouse/blank.gif
diff --git a/guacamole/client/web/images/mouse/dot.gif b/guacamole/client/images/mouse/dot.gif
similarity index 100%
rename from guacamole/client/web/images/mouse/dot.gif
rename to guacamole/client/images/mouse/dot.gif
diff --git a/guacamole/client/web/images/noguacamole-logo.png b/guacamole/client/images/noguacamole-logo.png
similarity index 100%
rename from guacamole/client/web/images/noguacamole-logo.png
rename to guacamole/client/images/noguacamole-logo.png
diff --git a/guacamole/client/web/images/noimage92.png b/guacamole/client/images/noimage92.png
similarity index 100%
rename from guacamole/client/web/images/noimage92.png
rename to guacamole/client/images/noimage92.png
diff --git a/guacamole/client/web/images/spinner92.gif b/guacamole/client/images/spinner92.gif
similarity index 100%
rename from guacamole/client/web/images/spinner92.gif
rename to guacamole/client/images/spinner92.gif
diff --git a/guacamole/client/web/index.html b/guacamole/client/index.html
similarity index 100%
rename from guacamole/client/web/index.html
rename to guacamole/client/index.html
diff --git a/guacamole/client/web/javascript/guacamole.js b/guacamole/client/javascript/guacamole.js
similarity index 87%
rename from guacamole/client/web/javascript/guacamole.js
rename to guacamole/client/javascript/guacamole.js
index f82fa58e6..460c99270 100644
--- a/guacamole/client/web/javascript/guacamole.js
+++ b/guacamole/client/javascript/guacamole.js
@@ -186,38 +186,9 @@ function VNCClient(display) {
// Add event to queue, restart send loop if finished.
outputMessageBuffer += message;
- if (sendingMessages == 0)
- sendPendingMessages();
}
- function sendPendingMessages() {
-
- if (outputMessageBuffer.length > 0) {
-
- sendingMessages = 1;
-
- var message_xmlhttprequest = new XMLHttpRequest();
- message_xmlhttprequest.open("POST", "inbound");
- message_xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- message_xmlhttprequest.setRequestHeader("Content-length", outputMessageBuffer.length);
-
- // Once response received, send next queued event.
- message_xmlhttprequest.onreadystatechange = function() {
- if (message_xmlhttprequest.readyState == 4)
- sendPendingMessages();
- }
-
- message_xmlhttprequest.send(outputMessageBuffer);
- outputMessageBuffer = ""; // Clear buffer
-
- }
- else
- sendingMessages = 0;
-
- }
-
-
/*****************************************/
/*** Clipboard ***/
/*****************************************/
@@ -301,7 +272,7 @@ function VNCClient(display) {
function parseResponse() {
// Start next request as soon as possible
- if (xmlhttprequest.readyState >= 2 && nextRequest == null)
+ if (xmlhttprequest.readyState >= 2 && nextRequest == null && uuid)
nextRequest = makeRequest();
// Parse stream when data is received and when complete.
@@ -378,10 +349,19 @@ function VNCClient(display) {
function makeRequest() {
+ if (uuid)
+ outputMessageBuffer = "resume:" + uuid + ";" + outputMessageBuffer;
+
+ outputMessageBuffer += "pause;";
+
// Download self
var xmlhttprequest = new XMLHttpRequest();
- xmlhttprequest.open("POST", "instructions");
- xmlhttprequest.send(null);
+ xmlhttprequest.open("POST", "tunnel.php");
+ xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ xmlhttprequest.setRequestHeader("Content-length", outputMessageBuffer.length);
+
+ xmlhttprequest.send(outputMessageBuffer);
+ outputMessageBuffer = "";
return xmlhttprequest;
@@ -438,8 +418,14 @@ function VNCClient(display) {
}
+ var uuid = null;
+
var instructionHandlers = {
+ "uuid": function(parameters) {
+ uuid = parameters[0];
+ },
+
"error": function(parameters) {
showError(unescapeGuacamoleString(parameters[0]));
},
@@ -559,16 +545,8 @@ function VNCClient(display) {
this.connect = function() {
- var message = "connect;";
-
setState(STATE_CONNECTING);
-
- // Send connect message (synchronously... as necessary until handoff is implemented)
- var connect_xmlhttprequest = new XMLHttpRequest();
- connect_xmlhttprequest.open("POST", "inbound", false);
- connect_xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- connect_xmlhttprequest.setRequestHeader("Content-length", message.length);
- connect_xmlhttprequest.send(message);
+ sendMessage("connect;");
// Start reading data
setState(STATE_WAITING);
@@ -583,15 +561,9 @@ function VNCClient(display) {
if (currentState != STATE_DISCONNECTED
&& currentState != STATE_DISCONNECTING) {
- var message = "disconnect;";
setState(STATE_DISCONNECTING);
- // Send disconnect message (synchronously... as necessary until handoff is implemented)
- var disconnect_xmlhttprequest = new XMLHttpRequest();
- disconnect_xmlhttprequest.open("POST", "inbound", false);
- disconnect_xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- disconnect_xmlhttprequest.setRequestHeader("Content-length", message.length);
- disconnect_xmlhttprequest.send(message);
+ sendMessage("disconnect;");
setState(STATE_DISCONNECTED);
}
diff --git a/guacamole/client/web/javascript/keyboard.js b/guacamole/client/javascript/keyboard.js
similarity index 100%
rename from guacamole/client/web/javascript/keyboard.js
rename to guacamole/client/javascript/keyboard.js
diff --git a/guacamole/client/web/javascript/keymap.js b/guacamole/client/javascript/keymap.js
similarity index 100%
rename from guacamole/client/web/javascript/keymap.js
rename to guacamole/client/javascript/keymap.js
diff --git a/guacamole/client/web/javascript/layer.js b/guacamole/client/javascript/layer.js
similarity index 100%
rename from guacamole/client/web/javascript/layer.js
rename to guacamole/client/javascript/layer.js
diff --git a/guacamole/client/web/javascript/message.js b/guacamole/client/javascript/message.js
similarity index 100%
rename from guacamole/client/web/javascript/message.js
rename to guacamole/client/javascript/message.js
diff --git a/guacamole/client/web/javascript/mouse.js b/guacamole/client/javascript/mouse.js
similarity index 100%
rename from guacamole/client/web/javascript/mouse.js
rename to guacamole/client/javascript/mouse.js
diff --git a/guacamole/client/web/javascript/oskeyboard.js b/guacamole/client/javascript/oskeyboard.js
similarity index 100%
rename from guacamole/client/web/javascript/oskeyboard.js
rename to guacamole/client/javascript/oskeyboard.js
diff --git a/guacamole/client/web/keyboard.css b/guacamole/client/keyboard.css
similarity index 100%
rename from guacamole/client/web/keyboard.css
rename to guacamole/client/keyboard.css
diff --git a/guacamole/client/web/layouts/en-us-qwerty.xml b/guacamole/client/layouts/en-us-qwerty.xml
similarity index 100%
rename from guacamole/client/web/layouts/en-us-qwerty.xml
rename to guacamole/client/layouts/en-us-qwerty.xml
diff --git a/guacamole/client/src/net/sourceforge/guacamole/Client.java b/guacamole/client/src/net/sourceforge/guacamole/Client.java
deleted file mode 100644
index 93000aaf4..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/Client.java
+++ /dev/null
@@ -1,32 +0,0 @@
-
-package net.sourceforge.guacamole;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import net.sourceforge.guacamole.GuacamoleException;
-import net.sourceforge.guacamole.event.KeyEvent;
-import net.sourceforge.guacamole.event.PointerEvent;
-
-public abstract class Client {
-
- public abstract void write(char[] chunk, int off, int len) throws GuacamoleException;
- public abstract char[] read() throws GuacamoleException;
- public abstract void disconnect() throws GuacamoleException;
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/GuacamoleClient.java b/guacamole/client/src/net/sourceforge/guacamole/GuacamoleClient.java
deleted file mode 100644
index f79e8a1b4..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/GuacamoleClient.java
+++ /dev/null
@@ -1,133 +0,0 @@
-
-package net.sourceforge.guacamole;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.Socket;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.InputStreamReader;
-
-import java.io.OutputStream;
-import java.io.Writer;
-import java.io.OutputStreamWriter;
-
-import net.sourceforge.guacamole.GuacamoleException;
-import net.sourceforge.guacamole.event.EventQueue;
-import net.sourceforge.guacamole.event.EventHandler;
-import net.sourceforge.guacamole.event.KeyEvent;
-import net.sourceforge.guacamole.event.PointerEvent;
-
-public class GuacamoleClient extends Client {
-
- private Socket sock;
- private Reader input;
- private Writer output;
-
- public GuacamoleClient(String hostname, int port) throws GuacamoleException {
-
- try {
- sock = new Socket(InetAddress.getByName(hostname), port);
- input = new InputStreamReader(sock.getInputStream());
- output = new OutputStreamWriter(sock.getOutputStream());
- }
- catch (IOException e) {
- throw new GuacamoleException(e);
- }
-
- }
-
- public void write(char[] chunk, int off, int len) throws GuacamoleException {
- try {
- output.write(chunk, off, len);
- output.flush();
- }
- catch (IOException e) {
- throw new GuacamoleException(e);
- }
- }
-
- public void disconnect() throws GuacamoleException {
- try {
- sock.close();
- }
- catch (IOException e) {
- throw new GuacamoleException(e);
- }
- }
-
- private int usedLength = 0;
- private char[] buffer = new char[20000];
-
- public char[] read() throws GuacamoleException {
-
- try {
-
- // While we're blocking, or input is available
- for (;;) {
-
- // If past threshold, resize buffer before reading
- if (usedLength > buffer.length/2) {
- char[] biggerBuffer = new char[buffer.length*2];
- System.arraycopy(buffer, 0, biggerBuffer, 0, usedLength);
- buffer = biggerBuffer;
- }
-
- // Attempt to fill buffer
- int numRead = input.read(buffer, usedLength, buffer.length - usedLength);
- if (numRead == -1)
- return null;
-
- int prevLength = usedLength;
- usedLength += numRead;
-
- for (int i=usedLength-1; i>=prevLength; i--) {
-
- char readChar = buffer[i];
-
- // If end of instruction, return it.
- if (readChar == ';') {
-
- // Get instruction
- char[] chunk = new char[i+1];
- System.arraycopy(buffer, 0, chunk, 0, i+1);
-
- // Reset buffer
- usedLength -= i+1;
- System.arraycopy(buffer, i+1, buffer, 0, usedLength);
-
- // Return instruction string
- return chunk;
- }
-
- }
-
- } // End read loop
-
- }
- catch (IOException e) {
- throw new GuacamoleException(e);
- }
-
- }
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/GuacamoleException.java b/guacamole/client/src/net/sourceforge/guacamole/GuacamoleException.java
deleted file mode 100644
index 3a09c5ac7..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/GuacamoleException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-
-package net.sourceforge.guacamole;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-public class GuacamoleException extends Exception {
-
- public GuacamoleException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public GuacamoleException(String message) {
- super(message);
- }
-
- public GuacamoleException(Throwable cause) {
- super(cause);
- }
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/event/Event.java b/guacamole/client/src/net/sourceforge/guacamole/event/Event.java
deleted file mode 100644
index 8fa047f1b..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/event/Event.java
+++ /dev/null
@@ -1,55 +0,0 @@
-
-package net.sourceforge.guacamole.event;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-public abstract class Event implements Comparable {
-
- private long time;
- private int index;
-
- public Event(int index) {
- this.time = System.currentTimeMillis();
- this.index = index;
- }
-
- public int getIndex() {
- return index;
- }
-
- public long getTime() {
- return time;
- }
-
- public int hashCode() {
- return index;
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == null) return false;
- if (getClass() != o.getClass()) return false;
- return getIndex() == ((Event) o).getIndex();
- }
-
- public int compareTo(Event e) {
- return getIndex() - e.getIndex();
- }
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/event/EventHandler.java b/guacamole/client/src/net/sourceforge/guacamole/event/EventHandler.java
deleted file mode 100644
index bae027a2e..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/event/EventHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-
-package net.sourceforge.guacamole.event;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import java.io.IOException;
-
-public interface EventHandler {
-
- public void handle(E e) throws IOException;
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/event/EventQueue.java b/guacamole/client/src/net/sourceforge/guacamole/event/EventQueue.java
deleted file mode 100644
index a1d7a5246..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/event/EventQueue.java
+++ /dev/null
@@ -1,191 +0,0 @@
-
-package net.sourceforge.guacamole.event;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import java.io.IOException;
-import java.util.PriorityQueue;
-
-public class EventQueue {
-
- private int nextIndex = 0;
- private final PriorityQueue queue = new PriorityQueue();
- private EventHandler handler;
-
- private final int deadline;
-
- private AutoflushThread autoflush = new AutoflushThread();
-
- private class AutoflushThread extends Thread {
-
- private IOException error;
- private long deadline;
- private static final long ONE_YEAR = 31536000;
-
- private boolean killed = false;
-
- public AutoflushThread() {
- this.deadline = ONE_YEAR;
- start();
- }
-
- public void run() {
- while (!killed) {
- try {
- if (deadline > 0) sleep(deadline);
- dropPendingEvents();
- flush();
- }
- catch (InterruptedException e) {
- // Interrupt indicates event handled, or thread killed
- if (killed) return;
- }
- catch (IOException e) {
- error = e;
- break;
- }
- }
- }
-
- public void setDeadline(long deadline) {
- this.deadline = deadline;
- interrupt();
- }
-
- public void checkError() throws IOException {
- if (error != null) throw error;
- }
-
- public void kill() {
- killed = true;
- interrupt();
- }
-
- }
-
- public void close() {
- autoflush.kill();
- }
-
- // Starts autoflush wait thread for any waiting events on the queue
- private void startDeadlineAutoflush() {
- synchronized (queue) {
-
- // No need to autoflush if nothing waiting
- if (queue.size() == 0) return;
-
- // Get waiting event
- E waiting = queue.peek();
-
- if (waiting != null) {
- long untilDeadline = deadline + waiting.getTime() - System.currentTimeMillis();
-
- // Start autoflush thread which waits for time remaining until next
- // event's deadline.
- autoflush.setDeadline(untilDeadline);
- }
- else
- autoflush.setDeadline(AutoflushThread.ONE_YEAR);
-
- }
- }
-
- public EventQueue(EventHandler handler, int deadline) {
- this.handler = handler;
- this.deadline = deadline;
- }
-
- public void add(E event) throws IOException {
- synchronized (queue) {
-
- autoflush.checkError();
-
- if (event.getIndex() < nextIndex) {
- //System.err.println("Past event dropped.");
- return;
- }
-
- if (event == null)
- throw new Error("Cannot add null event.");
-
- queue.add(event);
- }
-
- flush();
- }
-
- private E next() {
- synchronized (queue) {
- // If no events, return nothing.
- if (queue.size() == 0) return null;
-
- // If still waiting for true next event, return nothing.
- E event = queue.peek();
- if (event.getIndex() != nextIndex)
- return null;
-
- // If event found, expect next event, remove and return current.
- queue.remove();
- nextIndex++;
- return event;
- }
- }
-
- // Return number of waiting events
- public int getWaiting() {
- synchronized (queue) {
- // If no events, then none waiting.
- if (queue.size() == 0) return 0;
-
- // If we have the next event, then none waiting.
- E event = queue.peek();
- if (event.getIndex() == nextIndex)
- return 0;
-
- // Otherwise, all events are waiting.
- return queue.size();
- }
- }
-
- // Stop waiting for any unreceived events
- private void dropPendingEvents() {
- synchronized (queue) {
- // If no events, nothing needs to be changed;
- if (queue.size() == 0) return;
-
- // Otherwise, update nextIndex to index of next event
- E event = queue.peek();
- nextIndex = event.getIndex();
- }
- }
-
- // Attempts to flush queue
- // If any events remain, an autoflush thread is started.
- private void flush() throws IOException {
- synchronized (queue) {
- E nextEvent;
- while ((nextEvent = next()) != null)
- handler.handle(nextEvent);
- }
-
- // Start autoflush thread for any remaining events.
- startDeadlineAutoflush();
- }
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/event/KeyEvent.java b/guacamole/client/src/net/sourceforge/guacamole/event/KeyEvent.java
deleted file mode 100644
index a287dd448..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/event/KeyEvent.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.sourceforge.guacamole.event;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-public class KeyEvent extends Event {
-
- private int keysym;
- private boolean pressed;
-
- public KeyEvent(int index, int keysym, boolean pressed) {
- super(index);
- this.keysym = keysym;
- this.pressed = pressed;
- }
-
- public int getKeySym() {
- return keysym;
- }
-
- public boolean getPressed() {
- return pressed;
- }
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/event/PointerEvent.java b/guacamole/client/src/net/sourceforge/guacamole/event/PointerEvent.java
deleted file mode 100644
index 05692ada1..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/event/PointerEvent.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package net.sourceforge.guacamole.event;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-public class PointerEvent extends Event {
-
- private boolean leftButtonPressed;
- private boolean middleButtonPressed;
- private boolean rightButtonPressed;
- private boolean upButtonPressed;
- private boolean downButtonPressed;
- private int x;
- private int y;
-
- public PointerEvent(int index, boolean leftButtonPressed, boolean middleButtonPressed, boolean rightButtonPressed, boolean upButtonPressed, boolean downButtonPressed, int x, int y) {
- super(index);
- this.leftButtonPressed = leftButtonPressed;
- this.middleButtonPressed = middleButtonPressed;
- this.rightButtonPressed = rightButtonPressed;
- this.upButtonPressed = upButtonPressed;
- this.downButtonPressed = downButtonPressed;
- this.x = x;
- this.y = y;
- }
-
- public boolean isLeftButtonPressed() {
- return leftButtonPressed;
- }
-
- public boolean isMiddleButtonPressed() {
- return middleButtonPressed;
- }
-
- public boolean isRightButtonPressed() {
- return rightButtonPressed;
- }
-
- public boolean isUpButtonPressed() {
- return upButtonPressed;
- }
-
- public boolean isDownButtonPressed() {
- return downButtonPressed;
- }
-
- public int getX() {
- return x;
- }
-
- public int getY() {
- return y;
- }
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/Base64.java b/guacamole/client/src/net/sourceforge/guacamole/net/Base64.java
deleted file mode 100644
index 1fa0676e0..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/net/Base64.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package net.sourceforge.guacamole.net;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-public class Base64 {
-
- private static String characters =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-
- public static String toString(byte[] data) {
-
- StringBuffer buff = new StringBuffer();
- for (int i=0; i> 2
- ));
-
- buff.append(characters.charAt(
- ((a & 0x03) << 4) |
- ((b & 0xF0) >> 4)
- ));
-
- if (i+1 < data.length)
- buff.append(characters.charAt(
- ((b & 0x0F) << 2) |
- ((c & 0xC0) >> 6)
- ));
- else
- buff.append('=');
-
- if (i+2 < data.length)
- buff.append(characters.charAt(
- (c & 0x3F)
- ));
- else
- buff.append('=');
-
- }
-
- return buff.toString();
-
- }
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/Configuration.java b/guacamole/client/src/net/sourceforge/guacamole/net/Configuration.java
deleted file mode 100644
index b8bc8d057..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/net/Configuration.java
+++ /dev/null
@@ -1,130 +0,0 @@
-
-package net.sourceforge.guacamole.net;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import javax.servlet.ServletContext;
-import net.sourceforge.guacamole.GuacamoleException;
-
-public abstract class Configuration {
-
- private ServletContext context;
-
- protected String humanReadableList(Object... values) {
-
- String list = "";
- for (int i=0; i= 1)
- list += ", ";
-
- if (i == values.length -1)
- list += " or ";
-
- list += "\"" + values[i] + "\"";
- }
-
- return list;
-
- }
-
- protected String readParameter(String name, String defaultValue, String... allowedValues) throws GuacamoleException {
-
- String value = context.getInitParameter(name);
-
- // Use default if not specified
- if (value == null) {
- if (defaultValue == null)
- throw new GuacamoleException("Parameter \"" + name + "\" is required.");
-
- return defaultValue;
- }
-
- // If not restricted to certain values, just return whatever is given.
- if (allowedValues.length == 0)
- return value;
-
- // If restricted, only return value within given list
- for (String allowedValue : allowedValues)
- if (value.equals(allowedValue))
- return value;
-
- throw new GuacamoleException("Parameter \"" + name + "\" must be " + humanReadableList((Object) allowedValues));
- }
-
- protected boolean readBooleanParameter(String name, Boolean defaultValue) throws GuacamoleException {
-
- String value = context.getInitParameter(name);
-
- // Use default if not specified
- if (value == null) {
- if (defaultValue == null)
- throw new GuacamoleException("Parameter \"" + name + "\" is required.");
-
- return defaultValue;
- }
-
- value = value.trim();
- if (value.equals("true"))
- return true;
-
- if (value.equals("false"))
- return false;
-
- throw new GuacamoleException("Parameter \"" + name + "\" must be \"true\" or \"false\".");
-
- }
-
- protected int readIntParameter(String name, Integer defaultValue, Integer... allowedValues) throws GuacamoleException {
-
- String parmString = context.getInitParameter(name);
-
- // Use default if not specified
- if (parmString== null) {
- if (defaultValue == null)
- throw new GuacamoleException("Parameter \"" + name + "\" is required.");
-
- return defaultValue;
- }
-
- try {
- int value = Integer.parseInt(parmString);
-
- // If not restricted to certain values, just return whatever is given.
- if (allowedValues.length == 0)
- return value;
-
- // If restricted, only return value within given list
- for (int allowedValue : allowedValues)
- if (value == allowedValue)
- return value;
-
- throw new GuacamoleException("Parameter \"" + name + "\" must be " + humanReadableList((Object) allowedValues));
- }
- catch (NumberFormatException e) {
- throw new GuacamoleException("Parameter \"" + name + "\" must be an integer.", e);
- }
-
- }
-
- public Configuration(ServletContext context) {
- this.context = context;
- }
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleConfiguration.java b/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleConfiguration.java
deleted file mode 100644
index b357bb57c..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleConfiguration.java
+++ /dev/null
@@ -1,46 +0,0 @@
-
-package net.sourceforge.guacamole.net;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import javax.servlet.ServletContext;
-import net.sourceforge.guacamole.GuacamoleException;
-
-public class GuacamoleConfiguration extends Configuration {
-
- private String hostname;
- private int port;
-
- public GuacamoleConfiguration(ServletContext context) throws GuacamoleException {
-
- super(context);
-
- hostname = context.getInitParameter("hostname");
- port = readIntParameter("port", null);
-
- }
-
- public int getPort() {
- return port;
- }
-
- public String getHostname() {
- return hostname;
- }
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleServlet.java b/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleServlet.java
deleted file mode 100644
index 5c0a55dd9..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleServlet.java
+++ /dev/null
@@ -1,62 +0,0 @@
-
-package net.sourceforge.guacamole.net;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import net.sourceforge.guacamole.GuacamoleException;
-
-public abstract class GuacamoleServlet extends HttpServlet {
-
- @Override
- protected final void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- try {
- handleRequest(req, resp);
- }
- catch (GuacamoleException e) {
- throw new ServletException(e);
- }
- }
-
- @Override
- protected final void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- try {
- handleRequest(req, resp);
- }
- catch (GuacamoleException e) {
- throw new ServletException(e);
- }
- }
-
- private final void handleRequest(HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {
- GuacamoleSession session = new GuacamoleSession(request.getSession(shouldCreateSession()));
- handleRequest(session, request, response);
- }
-
- protected abstract void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException;
-
- protected boolean shouldCreateSession() {
- return false;
- }
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleSession.java b/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleSession.java
deleted file mode 100644
index d00f4037a..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/net/GuacamoleSession.java
+++ /dev/null
@@ -1,147 +0,0 @@
-
-package net.sourceforge.guacamole.net;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import java.util.concurrent.locks.ReentrantLock;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-import net.sourceforge.guacamole.Client;
-import net.sourceforge.guacamole.GuacamoleClient;
-import net.sourceforge.guacamole.GuacamoleException;
-import net.sourceforge.guacamole.event.KeyEvent;
-import net.sourceforge.guacamole.event.PointerEvent;
-
-public class GuacamoleSession {
-
- private GuacamoleConfiguration config;
- private final HttpSession session;
- private Client client;
- private ReentrantLock instructionStreamLock;
-
- private class SessionClient extends Client implements HttpSessionBindingListener {
-
- private Client client;
-
- public SessionClient(Client client) {
- this.client = client;
- }
-
- public void valueBound(HttpSessionBindingEvent event) {
- // Do nothing
- }
-
- public void valueUnbound(HttpSessionBindingEvent event) {
- try {
- disconnect();
- }
- catch (GuacamoleException e) {
- // Ignore
- }
- }
-
- public void write(char[] data, int off, int len) throws GuacamoleException {
- client.write(data, off, len);
- }
-
- public char[] read() throws GuacamoleException {
- return client.read();
- }
-
- public void disconnect() throws GuacamoleException {
- client.disconnect();
- }
-
- }
-
- public GuacamoleSession(HttpSession session) throws GuacamoleException {
-
- if (session == null)
- throw new GuacamoleException("User has no session.");
-
- this.session = session;
- synchronized (session) {
-
- // Read configuration parameters
- ServletContext context = session.getServletContext();
- config = new GuacamoleConfiguration(context);
-
- client = (Client) session.getAttribute("CLIENT");
- instructionStreamLock = (ReentrantLock) session.getAttribute("INSTRUCTION_STREAM_LOCK");
- }
- }
-
- public void connect() throws GuacamoleException {
- synchronized (session) {
-
- if (client != null)
- client.disconnect();
-
-
- client = new SessionClient(
- new GuacamoleClient (
- config.getHostname(),
- config.getPort()
- )
- );
-
- session.setAttribute("CLIENT", client);
-
- instructionStreamLock = new ReentrantLock();
- session.setAttribute("INSTRUCTION_STREAM_LOCK", instructionStreamLock);
-
- }
- }
-
- public boolean isConnected() {
- synchronized (session) {
- return client != null;
- }
- }
-
- public GuacamoleConfiguration getConfiguration() {
- return config;
- }
-
- public Client getClient() {
- synchronized (session) {
- return client;
- }
- }
-
- public void invalidate() {
- session.invalidate();
- }
-
- public void disconnect() throws GuacamoleException {
- if (client != null) {
- client.disconnect();
-
- session.removeAttribute("CLIENT");
- client = null;
- }
- }
-
- public ReentrantLock getInstructionStreamLock() {
- return instructionStreamLock;
- }
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/XMLGuacamoleServlet.java b/guacamole/client/src/net/sourceforge/guacamole/net/XMLGuacamoleServlet.java
deleted file mode 100644
index 2fef0c647..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/net/XMLGuacamoleServlet.java
+++ /dev/null
@@ -1,132 +0,0 @@
-
-package net.sourceforge.guacamole.net;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import net.sourceforge.guacamole.Client;
-import net.sourceforge.guacamole.GuacamoleException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-public abstract class XMLGuacamoleServlet extends GuacamoleServlet {
-
- @Override
- protected final void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {
-
- response.setContentType("text/xml");
- response.setHeader("Cache-Control", "no-store");
- response.setHeader("Pragma", "no-cache");
- response.setDateHeader("Expires", 0);
-
- try {
-
- // Create document
- DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
- Document document = documentBuilder.newDocument();
-
- // Root element
- Element root = document.createElement("guacamole");
- document.appendChild(root);
-
- try {
- handleRequest(session, request, root);
- }
- catch (Throwable t) {
- addFatalError(root, t.getMessage());
-
- // FATAL error ... try to disconnect
- if (session != null) {
- Client client = session.getClient();
- try {
- if (client != null)
- client.disconnect();
- }
- catch (GuacamoleException e) {
- addFatalError(root, e.getMessage());
- }
- }
- }
-
- // Set up transformer
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- //transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
- transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
-
- // Write XML using transformer
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- StreamResult result = new StreamResult(bos);
- DOMSource source = new DOMSource(document);
- transformer.transform(source, result);
-
-
- bos.flush();
-
- byte[] xmlData = bos.toByteArray();
- response.setContentLength(xmlData.length);
- OutputStream outputStream = response.getOutputStream();
- outputStream.write(xmlData);
-
- // Close stream
- outputStream.close();
- }
- catch (ParserConfigurationException e) {
- throw new GuacamoleException(e);
- }
- catch (TransformerConfigurationException e) {
- throw new GuacamoleException(e);
- }
- catch (TransformerException e) {
- throw new GuacamoleException(e);
- }
- catch (IOException e) {
- throw new GuacamoleException(e);
- }
-
-
- }
-
- private void addFatalError(Element root, String message) {
- Element error = root.getOwnerDocument().createElement("error");
- error.setAttribute("type", "fatal");
- error.setTextContent(message);
- root.appendChild(error);
- }
-
- protected abstract void handleRequest(GuacamoleSession session, ServletRequest request, Element root) throws GuacamoleException;
-
-}
diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/input/Inbound.java b/guacamole/client/src/net/sourceforge/guacamole/net/input/Inbound.java
deleted file mode 100644
index 7be7bc6cb..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/net/input/Inbound.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package net.sourceforge.guacamole.net.input;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import javax.servlet.ServletRequest;
-import net.sourceforge.guacamole.GuacamoleException;
-import org.w3c.dom.Element;
-
-import java.io.Reader;
-import java.io.IOException;
-
-import net.sourceforge.guacamole.net.GuacamoleSession;
-import net.sourceforge.guacamole.net.XMLGuacamoleServlet;
-
-public class Inbound extends XMLGuacamoleServlet {
-
- protected boolean shouldCreateSession() {
- return true;
- }
-
- @Override
- protected void handleRequest(GuacamoleSession session, ServletRequest request, Element root) throws GuacamoleException {
-
- if (!session.isConnected())
- session.connect();
-
- // Send data
- try {
-
- Reader input = request.getReader();
- char[] buffer = new char[8192];
-
- int length;
- while ((length = input.read(buffer, 0, buffer.length)) != -1)
- session.getClient().write(buffer, 0, length);
-
- }
- catch (IOException e) {
- throw new GuacamoleException("I/O Error sending data to server: " + e.getMessage(), e);
- }
- catch (GuacamoleException e) {
- throw new GuacamoleException("Error sending data to server: " + e.getMessage(), e);
- }
-
- }
-
-}
-
diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/output/InstructionStream.java b/guacamole/client/src/net/sourceforge/guacamole/net/output/InstructionStream.java
deleted file mode 100644
index 27e5e65de..000000000
--- a/guacamole/client/src/net/sourceforge/guacamole/net/output/InstructionStream.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package net.sourceforge.guacamole.net.output;
-
-/*
- * Guacamole - Clientless Remote Desktop
- * Copyright (C) 2010 Michael Jumper
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-import java.io.Writer;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.concurrent.locks.ReentrantLock;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import net.sourceforge.guacamole.Client;
-import net.sourceforge.guacamole.net.GuacamoleServlet;
-import net.sourceforge.guacamole.GuacamoleException;
-import net.sourceforge.guacamole.net.GuacamoleSession;
-
-
-public class InstructionStream extends GuacamoleServlet {
-
- @Override
- protected void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {
-
- ReentrantLock instructionStreamLock = session.getInstructionStreamLock();
- instructionStreamLock.lock();
-
- try {
-
- response.setContentType("text/plain");
- Writer out = response.getWriter();
-
- try {
-
- // Query new update from server
- Client client = session.getClient();
-
- // For all messages, until another stream is ready (we send at least one message)
- char[] message;
- while ((message = client.read()) != null) {
-
- // Get message output bytes
- out.write(message, 0, message.length);
- out.flush();
- response.flushBuffer();
-
- // No more messages another stream can take over
- if (instructionStreamLock.hasQueuedThreads())
- break;
-
- }
-
- if (message == null) {
- session.disconnect();
- throw new GuacamoleException("Disconnected.");
- }
-
- }
- catch (GuacamoleException e) {
- out.write("error:" + e.getMessage() + ";");
- out.flush();
- response.flushBuffer();
- }
-
- // End-of-instructions marker
- out.write(';');
- out.flush();
- response.flushBuffer();
-
- }
- catch (UnsupportedEncodingException e) {
- throw new GuacamoleException("UTF-8 not supported by Java.", e);
- }
- catch (IOException e) {
- throw new GuacamoleException("I/O error writing to servlet output stream.", e);
- }
- finally {
- instructionStreamLock.unlock();
- }
-
- }
-
-}
-
diff --git a/guacamole/client/tunnel.php b/guacamole/client/tunnel.php
new file mode 100644
index 000000000..eb9b41ce7
--- /dev/null
+++ b/guacamole/client/tunnel.php
@@ -0,0 +1,35 @@
+
diff --git a/guacamole/client/web/WEB-INF/web.xml b/guacamole/client/web/WEB-INF/web.xml
deleted file mode 100644
index c61e6b842..000000000
--- a/guacamole/client/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
- index.html
-
-
-
- 30
-
-
-
-
- Instruction stream servlet.
- InstructionStream
- net.sourceforge.guacamole.net.output.InstructionStream
-
-
- InstructionStream
- /instructions
-
-
- Input servlet.
- Inbound
- net.sourceforge.guacamole.net.input.Inbound
-
-
- Inbound
- /inbound
-
-
- Guacamole Access Restrictions
-
- Guacamole
- All servlets/pages within Guacamole.
- /*
-
-
- Only allow Guacamole users access.
- guacamole
-
-
-
- BASIC
- Guacamole
-
-
- Guacamole
- guacamole
-
-