ETag.c
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:2k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: ETag.c,v 1.5 1998/08/13 21:14:39 wessels Exp $
  3.  *
  4.  * AUTHOR: Alex Rousskov
  5.  *
  6.  * SQUID Internet Object Cache  http://squid.nlanr.net/Squid/
  7.  * ----------------------------------------------------------
  8.  *
  9.  *  Squid is the result of efforts by numerous individuals from the
  10.  *  Internet community.  Development is led by Duane Wessels of the
  11.  *  National Laboratory for Applied Network Research and funded by the
  12.  *  National Science Foundation.  Squid is Copyrighted (C) 1998 by
  13.  *  Duane Wessels and the University of California San Diego.  Please
  14.  *  see the COPYRIGHT file for full details.  Squid incorporates
  15.  *  software developed and/or copyrighted by other sources.  Please see
  16.  *  the CREDITS file for full details.
  17.  *
  18.  *  This program is free software; you can redistribute it and/or modify
  19.  *  it under the terms of the GNU General Public License as published by
  20.  *  the Free Software Foundation; either version 2 of the License, or
  21.  *  (at your option) any later version.
  22.  *  
  23.  *  This program is distributed in the hope that it will be useful,
  24.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  25.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  26.  *  GNU General Public License for more details.
  27.  *  
  28.  *  You should have received a copy of the GNU General Public License
  29.  *  along with this program; if not, write to the Free Software
  30.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
  31.  *
  32.  */
  33. #include "squid.h"
  34. /*
  35.  * Note: ETag is not an http "field" like, for example HttpHdrRange. ETag is a
  36.  * field-value that maybe used in many http fields.
  37.  */
  38. /* parses a string as weak or strong entity-tag; returns true on success */
  39. /* note: we do not duplicate "str"! */
  40. int
  41. etagParseInit(ETag * etag, const char *str)
  42. {
  43.     int len;
  44.     assert(etag && str);
  45.     etag->str = NULL;
  46.     etag->weak = !strncmp(str, "W/", 2);
  47.     if (etag->weak)
  48. str += 2;
  49.     /* check format (quoted-string) */
  50.     len = strlen(str);
  51.     if (len >= 2 && str[0] == '"' && str[len - 1] == '"')
  52. etag->str = str;
  53.     return etag->str != NULL;
  54. }
  55. /* returns true if etags are equal */
  56. int
  57. etagIsEqual(const ETag * tag1, const ETag * tag2)
  58. {
  59.     assert(tag1 && tag2);
  60.     assert(!tag1->weak && !tag2->weak); /* weak comparison not implemented yet */
  61.     return !strcmp(tag1->str, tag2->str);
  62. }