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    }