source: trunk/autoquest-htmlmonitor/src/main/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorServer.java @ 880

Last change on this file since 880 was 880, checked in by pharms, 12 years ago
  • added support for cross site scripting as some browsers prevented sending data to the monitoring server
File size: 3.9 KB
Line 
1package de.ugoe.cs.autoquest.htmlmonitor;
2
3import org.eclipse.jetty.servlets.CrossOriginFilter;
4import org.mortbay.jetty.Handler;
5import org.mortbay.jetty.Server;
6import org.mortbay.jetty.servlet.Context;
7import org.mortbay.jetty.servlet.FilterHolder;
8import org.mortbay.jetty.servlet.ServletHolder;
9
10import de.ugoe.cs.util.console.Console;
11
12/**
13 * <p>
14 * this is the web server, that receives the client messages. It also provides the java script
15 * that is used by the client via the URL /script/autoquest-htmlmonitor.js. It is initialized
16 * with a port on which it shall listen, as well as a message listener to forward the received
17 * messages to. Internally it starts a jetty web server with a single {@link HtmlMonitorServlet}
18 * to receive the messages as well as a .
19 * </p>
20 *
21 * @author Patrick Harms
22 */
23class HtmlMonitorServer implements HtmlMonitorComponent {
24   
25    /**
26     * the port to listen on
27     */
28    private int port;
29
30    /**
31     * the jetty web server used for receiving messages
32     */
33    private Server server;
34
35    /**
36     * the message listener to forward the messages to
37     */
38    private HtmlMonitorMessageListener messageListener;
39
40    /**
41     * <p>
42     * initializes the server with the port to listen on and the message listener to forward
43     * the messages to.
44     * </p>
45     *
46     * @param port            the port to listen on
47     * @param messageListener the message listener to forward the messages to
48     */
49    HtmlMonitorServer(int port, HtmlMonitorMessageListener messageListener) {
50        this.port = port;
51        this.messageListener = messageListener;
52    }
53
54    /* (non-Javadoc)
55     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#init()
56     */
57    @Override
58    public synchronized void init() {
59        if (server != null) {
60            throw new IllegalStateException("already initialized. First call stop()");
61        }
62
63        server = new Server(port);
64       
65        /*
66        // the following code can be used to support SSL directly
67        server = new Server();
68       
69        SslSocketConnector connector = new SslSocketConnector();
70        connector.setPort(port);
71        connector.setKeystore("data/keystore");
72        connector.setPassword("123456");
73        connector.setKeyPassword("123456");
74        connector.setTruststore("data/keystore");
75        connector.setTrustPassword("123456");
76        server.addConnector(connector);*/
77
78        Context root = new Context(server, "/", Context.SESSIONS);
79
80        HtmlMonitorServlet servlet = new HtmlMonitorServlet(messageListener);
81        ServletHolder servletHolder = new ServletHolder(servlet);
82        root.addServlet(servletHolder, "/*");
83       
84        CrossOriginFilter filter = new CrossOriginFilter();
85        FilterHolder filterHolder = new FilterHolder(filter);
86        filterHolder.setInitParameter("allowedOrigins", "*");
87        filterHolder.setInitParameter("allowedMethods", "GET,POST");
88        root.addFilter(filterHolder, "/*", Handler.ALL);
89    }
90
91    /* (non-Javadoc)
92     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#start()
93     */
94    @Override
95    public synchronized void start() throws HtmlMonitorException {
96        if (server == null) {
97            throw new IllegalStateException("server not initialized yet. First call init()");
98        }
99       
100        try {
101            server.start();
102        }
103        catch (Exception e) {
104            throw new HtmlMonitorException("could not start server", e);
105        }
106    }
107
108
109    /* (non-Javadoc)
110     * @see de.ugoe.cs.autoquest.htmlmonitor.HtmlMonitorComponent#stop()
111     */
112    @Override
113    public synchronized void stop() {
114        try {
115            if (server != null) {
116                server.stop();
117            }
118        }
119        catch (Exception e) {
120            Console.printerrln("could not stop HTML monitor server: " + e.getMessage());
121            Console.logException(e);
122        }
123    }
124
125}
Note: See TracBrowser for help on using the repository browser.