Package rabbit.proxy

Source Code of rabbit.proxy.HttpHeaderFilterer

package rabbit.proxy;

import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.List;
import rabbit.filter.HttpFilter;
import rabbit.http.HttpHeader;
import rabbit.util.Config;
import rabbit.util.Logger;

/** A class to load and run the HttpFilters.
*
* @author <a href="mailto:robo@khelekore.org">Robert Olofsson</a>
*/
class HttpHeaderFilterer {
    private List<HttpFilter> httpInFilters;
    private List<HttpFilter> httpOutFilters;
   
    public HttpHeaderFilterer (String in, String out,
             Config config, HttpProxy proxy) {
  httpInFilters = new ArrayList<HttpFilter> ();
  loadHttpFilters (in, httpInFilters, config, proxy);
 
  httpOutFilters = new ArrayList<HttpFilter> ();
  loadHttpFilters (out, httpOutFilters, config, proxy);
    }

    /** Runs all input filters on the given header.
     * @param con the Connection handling the request
     * @param channel the SocketChannel for the client
     * @param in the request.
     * @return null if all is ok, a HttpHeader if this request is blocked.
     */
    public HttpHeader filterHttpIn (Connection con,
            SocketChannel channel, HttpHeader in) {
  for (HttpFilter hf : httpInFilters) {
      HttpHeader badresponse =
    hf.doHttpInFiltering (channel, in, con);
      if (badresponse != null)
    return badresponse;     
  }
  return null;
    }

    /** Runs all output filters on the given header.
     * @param con the Connection handling the request
     * @param channel the SocketChannel for the client
     * @param in the response.
     * @return null if all is ok, a HttpHeader if this request is blocked.
     */
    public HttpHeader filterHttpOut (Connection con,
            SocketChannel channel, HttpHeader in) {
  for (HttpFilter hf : httpOutFilters) {
      HttpHeader badresponse =
    hf.doHttpOutFiltering (channel, in, con);
      if (badresponse != null)
    return badresponse;     
  }
  return null;
    }

    private void loadHttpFilters (String filters, List<HttpFilter> ls,
          Config config, HttpProxy proxy) {
  String[] filterArray = filters.split (",");
  for (String className : filterArray) {
      Logger log = proxy.getLogger ();
      try {
    className = className.trim ();
    Class<? extends HttpFilter> cls =
        Class.forName (className).asSubclass (HttpFilter.class);
    HttpFilter hf = cls.newInstance ();
    hf.setup (log, config.getProperties (className));
    ls.add (hf);
      } catch (ClassNotFoundException ex) {
    log.logError ("Could not load class: '" +
            className + "' " + ex);
      } catch (InstantiationException ex) {
    log.logError ("Could not instansiate: '" +
            className + "' " + ex);
      } catch (IllegalAccessException ex) {
    log.logError ("Could not access: '" +
            className + "' " + ex);
      }
  }
    }

    public List<HttpFilter> getHttpInFilters () {
  return httpInFilters;
    }

    public List<HttpFilter> getHttpOutFilters () {
  return httpOutFilters;
    }
}
TOP

Related Classes of rabbit.proxy.HttpHeaderFilterer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.