<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <context-param>
        <param-name>globalScope</param-name>
        <param-value>default</param-value>
    </context-param>
    
    <!-- Custom logging like described in Paul Gregoire Patch: 
    http://gregoire.org/2008/09/18/logging-work-around/
    THIS WILL NOT WORK for us as we can hardly rewrite all logging statements of hibernate
    
    -->
    <listener>
        <listener-class>org.apache.openmeetings.util.OMContextListener</listener-class>
    </listener>
    
    <filter>
        <filter-name>LoggerContextFilter</filter-name>
        <filter-class>org.red5.logging.LoggerContextFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>LoggerContextFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>   
    
	<filter>
		<filter-name>OpenmeetingsApplication</filter-name>
		<filter-class>org.apache.wicket.protocol.ws.tomcat7.Tomcat7WebSocketFilter</filter-class>
		<init-param>
			<param-name>applicationClassName</param-name>
			<param-value>org.apache.openmeetings.web.app.Application</param-value>
		</init-param>
		<init-param>
			<param-name>configuration</param-name>
			<param-value>@wicket.mode@</param-value>
		</init-param>
		<init-param>
			<param-name>ignorePaths</param-name>
			<param-value>conf,css,default,docs,images,js,persistence,public,screensharing,streams,upload,uploadtemp,services,networktest.,file.,remotelog.,screen.,DownloadHandler</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>OpenmeetingsApplication</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	 
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/red5-*.xml</param-value>
    </context-param>
    <context-param>
        <param-name>locatorFactorySelector</param-name>
        <param-value>red5.xml</param-value>
    </context-param>
    <context-param>
        <param-name>parentContextKey</param-name>
        <param-value>default.context</param-value>
    </context-param>
    
    <!-- remove the following servlet tags if you want to disable remoting for this application -->
	<servlet>
		<servlet-name>spring-mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
    <servlet>
        <servlet-name>gateway</servlet-name>
        <servlet-class>org.red5.server.net.servlet.AMFGatewayServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>DownloadHandler</servlet-name>
        <servlet-class>org.apache.openmeetings.servlet.outputhandler.DownloadHandler</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>ExportToImage</servlet-name>
        <servlet-class>org.apache.openmeetings.servlet.outputhandler.ExportToImage</servlet-class>
    </servlet>
    <!-- Axis2 Settings -->
    <servlet>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
	
	<servlet-mapping>
		<servlet-name>spring-mvc</servlet-name>
		<url-pattern>*.upload</url-pattern>
	</servlet-mapping>
    <servlet-mapping>
        <servlet-name>DownloadHandler</servlet-name>
        <url-pattern>/DownloadHandler</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ExportToImage</servlet-name>
        <url-pattern>/ExportToImage</url-pattern>
    </servlet-mapping>
    <!-- Axis2 -->
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <mime-mapping>
        <extension>inc</extension>
        <mime-type>text/plain</mime-type>
    </mime-mapping>
     
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Forbidden</web-resource-name>
            <url-pattern>/streams/*</url-pattern>
        </web-resource-collection>
        <web-resource-collection>
            <web-resource-name>Forbidden</web-resource-name>
            <url-pattern>/conf/*</url-pattern>
        </web-resource-collection>
        <web-resource-collection>
            <web-resource-name>Forbidden</web-resource-name>
            <url-pattern>/upload/*</url-pattern>
        </web-resource-collection>
        <web-resource-collection>
            <web-resource-name>Forbidden</web-resource-name>
            <url-pattern>/uploadtemp/*</url-pattern>
        </web-resource-collection>
        <auth-constraint/>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>
</web-app>
