Renamed InstructionStream -> Outbound, using single unified tunnel package, removed XMLGuacamoleServlet

This commit is contained in:
Michael Jumper
2010-11-26 16:55:58 -08:00
parent fc2c888300
commit de219b6773
6 changed files with 24 additions and 167 deletions

View File

@@ -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 <http://www.gnu.org/licenses/>.
*/
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;
}

View File

@@ -1,4 +1,4 @@
package net.sourceforge.guacamole.net.input;
package net.sourceforge.guacamole.net.tunnel;
/*
* Guacamole - Clientless Remote Desktop
@@ -18,24 +18,24 @@ package net.sourceforge.guacamole.net.input;
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import javax.servlet.ServletRequest;
import net.sourceforge.guacamole.GuacamoleException;
import org.w3c.dom.Element;
import java.io.Reader;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sourceforge.guacamole.net.GuacamoleServlet;
import net.sourceforge.guacamole.net.GuacamoleSession;
import net.sourceforge.guacamole.net.XMLGuacamoleServlet;
public class Inbound extends XMLGuacamoleServlet {
public class Inbound extends GuacamoleServlet {
protected boolean shouldCreateSession() {
return true;
}
@Override
protected void handleRequest(GuacamoleSession session, ServletRequest request, Element root) throws GuacamoleException {
protected void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {
if (!session.isConnected())
session.connect();

View File

@@ -1,4 +1,4 @@
package net.sourceforge.guacamole.net.output;
package net.sourceforge.guacamole.net.tunnel;
/*
* Guacamole - Clientless Remote Desktop
@@ -30,7 +30,7 @@ import net.sourceforge.guacamole.GuacamoleException;
import net.sourceforge.guacamole.net.GuacamoleSession;
public class InstructionStream extends GuacamoleServlet {
public class Outbound extends GuacamoleServlet {
@Override
protected void handleRequest(GuacamoleSession session, HttpServletRequest request, HttpServletResponse response) throws GuacamoleException {

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path=""/>

View File

@@ -17,52 +17,39 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Basic config -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<!-- Servlets -->
<servlet>
<description>Instruction stream servlet.</description>
<servlet-name>InstructionStream</servlet-name>
<servlet-class>net.sourceforge.guacamole.net.output.InstructionStream</servlet-class>
<description>Outbound servlet.</description>
<servlet-name>Outbound</servlet-name>
<servlet-class>net.sourceforge.guacamole.net.tunnel.Outbound</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InstructionStream</servlet-name>
<url-pattern>/instructions</url-pattern>
<servlet-name>Outbound</servlet-name>
<url-pattern>/outbound</url-pattern>
</servlet-mapping>
<servlet>
<description>Input servlet.</description>
<servlet-name>Inbound</servlet-name>
<servlet-class>net.sourceforge.guacamole.net.input.Inbound</servlet-class>
<servlet-class>net.sourceforge.guacamole.net.tunnel.Inbound</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Inbound</servlet-name>
<url-pattern>/inbound</url-pattern>
</servlet-mapping>
<security-constraint>
<display-name>Guacamole Access Restrictions</display-name>
<web-resource-collection>
<web-resource-name>Guacamole</web-resource-name>
<description>All servlets/pages within Guacamole.</description>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Only allow Guacamole users access.</description>
<role-name>guacamole</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Guacamole</realm-name>
</login-config>
<security-role>
<description>Guacamole</description>
<role-name>guacamole</role-name>
</security-role>
</web-app>

View File

@@ -380,7 +380,7 @@ function GuacamoleClient(display) {
// Download self
var xmlhttprequest = new XMLHttpRequest();
xmlhttprequest.open("POST", "instructions");
xmlhttprequest.open("POST", "outbound");
xmlhttprequest.send(null);
return xmlhttprequest;