Package rabbit.filter

Source Code of rabbit.filter.DontCacheFilter

package rabbit.filter;

import java.nio.channels.SocketChannel;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import rabbit.http.HttpHeader;
import rabbit.proxy.Connection;
import rabbit.util.Logger;
import rabbit.util.SProperties;
import rabbit.util.PatternHelper;

/** This is a class that makes sure the proxy doesnt caches certain pages.
*  It features two types of filtering: either on the URL or the mime type.
<p><font size=+1><b>URL based matching.</b></font><br>
*  It uses the config option <tt>dontCacheURLmatching</tt> with a default
*  value of the empty string. This value is a regex.<br>
*  This method should be used on requests, that is append this class to
<tt>httpinfilters</tt> in <tt>rabbit.conf</tt> to use URL matching.
</p>
<p><font size=+1><b>Mime type based matching.</b></font><br>
*  It uses the config option <tt>dontCacheMimematching</tt> with a
*  default value of the empty string. This value is a regexp.<br>
*  This method should be used on responses, that is append this class to
<tt>httpoutfilters</tt> in <tt>rabbit.conf</tt> to use mime type matching.
</p>
*
* @author <a href="mailto:robo@khelekore.org">Robert Olofsson</a>
*/
public class DontCacheFilter implements HttpFilter {
    private Pattern dontCacheUrls;
    private Pattern onlyCacheUrls;
    private Pattern dontCacheMime;
    private Pattern onlyCacheMime;
   
    /** Create a new DontCacheFilter.
     */
    public DontCacheFilter () {
    }

    /** Test if a socket/header combination is valid or return a new HttpHeader.
     *  If the request matches a certain criteria dont cache it. This filter is
     *  good for pages that done send cache-control headers correctly.
     *  This method uses the URL of the request to determine if the resource
     *  may be cached.
     * @param socket the SocketChannel that made the request.
     * @param header the actual request made.
     * @param con the Connection handling the request.
     * @return This method always returns null.
     */
    public HttpHeader doHttpInFiltering (SocketChannel socket,
           HttpHeader header, Connection con) {
  String uri = header.getRequestURI ();
  dontCache (con, dontCacheUrls, uri);
  onlyCache (con, onlyCacheUrls, uri);
  return null;
    }

    /** Test if a socket/header combination is valid or return a new HttpHeader.
     *  If the request matches a certain criteria dont cache it. This filter is
     *  good for pages that done send cache-control headers correctly.
     *  This method uses the mime type of the response to determine if the
     *  resource may be cached.
     * @param socket the SocketChannel that made the request.
     * @param header the actual request made.
     * @param con the Connection handling the request.
     * @return null
     */
    public HttpHeader doHttpOutFiltering (SocketChannel socket,
            HttpHeader header, Connection con) {
  String mimetype = header.getHeader ("content-type");
  if (mimetype == null)
      return null;
  dontCache (con, dontCacheMime, mimetype)
  onlyCache (con, onlyCacheMime, mimetype);
  return null;
    }

    /** If the string toCheck match the given pattern,
     *  then do not cache this resource.
     * @param con the Connection handling the request.
     * @param pat the pattern to use for finding.
     * @param toCheck the String to check.
     */
    private void dontCache (Connection con, Pattern pat, String toCheck) {
  if (pat == null)
      return;
  Matcher m = pat.matcher (toCheck);
  if (m.find ())
      con.setMayCache (false);
    }
   
    /** if the string toCheck match the given pattern
     *  then cacheing of this resource is allowed.
     * @param con the Connection handling the request.
     * @param pat the pattern we are looking for.
     * @param toCheck the String to check.
     */
    private void onlyCache (Connection con, Pattern pat, String toCheck) {
  if (pat == null)
      return;
  Matcher m = pat.matcher (toCheck);
  if (m.find ())
      return;
  con.setMayCache (false);
    }

    /** Setup this class with the given properties.
     * @param logger the Logger for errors/warnings
     * @param properties the new configuration of this class.
     */
    public void setup (Logger logger, SProperties properties) {
  PatternHelper ph = new PatternHelper ();
  dontCacheUrls =
      ph.getPattern (properties, "dontCacheURLmatching",
         "DontCacheFilter bad url match: ", logger);
  onlyCacheUrls =
      ph.getPattern (properties, "onlyCacheURLmatching",
         "DontCacheFilter bad url match: ", logger);
  dontCacheMime =
      ph.getPattern (properties, "dontCacheMimematching",
         "DontCacheFilter bad mime match: ", logger);
  onlyCacheMime =
      ph.getPattern (properties, "onlyCacheMimematching",
         "DontCacheFilter bad mime match: ", logger);
    }
}
TOP

Related Classes of rabbit.filter.DontCacheFilter

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.