001package org.granite.gravity.websocket; 002 003import javax.servlet.ServletContextEvent; 004import javax.servlet.ServletContextListener; 005 006public 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}