cache_storage.c revision f8dd393b2c60c61282a46c51f82fdb9b89cd9afe
2058N/A/* ==================================================================== 2058N/A * The Apache Software License, Version 1.1 2058N/A * Copyright (c) 2000-2003 The Apache Software Foundation. All rights 2058N/A * Redistribution and use in source and binary forms, with or without 2058N/A * modification, are permitted provided that the following conditions 2058N/A * 1. Redistributions of source code must retain the above copyright 2058N/A * notice, this list of conditions and the following disclaimer. 2058N/A * 2. Redistributions in binary form must reproduce the above copyright 2058N/A * notice, this list of conditions and the following disclaimer in 2058N/A * the documentation and/or other materials provided with the 2058N/A * 3. The end-user documentation included with the redistribution, 2058N/A * if any, must include the following acknowledgment: 3996N/A * "This product includes software developed by the 2058N/A * Alternately, this acknowledgment may appear in the software itself, 2058N/A * if and wherever such third-party acknowledgments normally appear. 2058N/A * 4. The names "Apache" and "Apache Software Foundation" must 2058N/A * not be used to endorse or promote products derived from this 2058N/A * software without prior written permission. For written 2058N/A * permission, please contact apache@apache.org. 2058N/A * 5. Products derived from this software may not be called "Apache", 2058N/A * nor may "Apache" appear in their name, without prior written 2058N/A * permission of the Apache Software Foundation. 3661N/A * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 3661N/A * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 3996N/A * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 3996N/A * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 3996N/A * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2058N/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2058N/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 2058N/A * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 2058N/A * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 2058N/A * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 2058N/A * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2058N/A * ==================================================================== 2058N/A * This software consists of voluntary contributions made by many 2058N/A * individuals on behalf of the Apache Software Foundation. For more 2058N/A * information on the Apache Software Foundation, please see 2058N/A * Portions of this software are based upon public domain software * originally written at the National Center for Supercomputing Applications, * University of Illinois, Urbana-Champaign. /* -------------------------------------------------------------- */ * delete all URL entities from the cache /* for each specified cache type, delete the URL */ * create a new URL entity in the cache * It is possible to store more than once entity per URL. This * function will always create a new entity, regardless of whether * other entities already exist for the same URL. * The size of the entity is provided so that a cache module can * decide whether or not it wants to cache this particular entity. * If the size is unknown, a size of -1 should be set. /* for each specified cache type, delete the URL */ * remove a specific URL entity from the cache * The specific entity referenced by the cache_handle is removed * from the cache, and the cache_handle is closed. /* XXX Don't think we need to pass in request_rec or types ... */ * select a specific URL entity in the cache * It is possible to store more than one entity per URL. Content * negotiation is used to select an entity. Once an entity is * selected, details of it are stored in the per request * config to save time when serving the request later. * This function returns OK if successful, DECLINED if no * cached entity fits the bill. /* go through the cache types till we get a match */ /* TODO: Handle this error */ * Check Content-Negotiation - Vary * At this point we need to make sure that the object we found in the cache * is the same object that would be delivered to the client, when the * effects of content negotiation are taken into effect. * In plain english, we want to make sure that a language-negotiated * document in one language is not given to a client asking for a * language negotiated document in a different language by mistake. * This code makes the assumption that the storage manager will * cache the req_hdrs if the response contains a Vary * RFC2616 13.6 and 14.44 describe the Vary mechanism. /* isolate header name */ * is this header in the request and the header in the cached * request identical? If not, we give up and do a straight get /* both headers NULL, so a match - do nothing */ /* both headers exist and are equal - do nothing */ /* headers do not match, so Vary failed */ "cache_select_url(): Vary header mismatch - Cached document cannot be used. \n");
/* try again with next cache type */ /* Build the header table from info in the info struct */