001 package org.granite.gravity.websocket;
002
003 import javax.servlet.ServletContextEvent;
004 import javax.servlet.ServletContextListener;
005
006 public class PolicyFileServerListener implements ServletContextListener {
007
008 private PolicyFileServer server = null;
009
010 public void contextInitialized(ServletContextEvent sce) {
011 server = new PolicyFileServer();
012
013 String serverPort = sce.getServletContext().getInitParameter("flashPolicyFileServer-port");
014 if (serverPort != null) {
015 try {
016 server.setServerPort(Integer.parseInt(serverPort));
017 }
018 catch (NumberFormatException e) {
019 throw new RuntimeException("Incorrect port " + serverPort + " defined for flash-policy-file-server-port", e);
020 }
021 }
022
023 String allow = sce.getServletContext().getInitParameter("flashPolicyFileServer-allowDomains");
024 if (allow != null) {
025 String[] a = allow.split(",");
026 String[] domains = new String[a.length];
027 String[] ports = new String[a.length];
028 for (int i = 0; i < a.length; i++) {
029 int idx = a[i].indexOf(":");
030 if (idx < 0) {
031 domains[i] = a[i];
032 ports[i] = "80,443";
033 }
034 else {
035 domains[i] = a[i].substring(0, idx);
036 ports[i] = a[i].substring(idx+1);
037 }
038 }
039 server.setAllowDomains(domains);
040 server.setAllowPorts(ports);
041 }
042
043 server.start();
044 }
045
046 public void contextDestroyed(ServletContextEvent sce) {
047 server.stop();
048 }
049
050 }