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

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: HttpHdrExtField.c,v 1.6.6.1 1999/02/12 19:38:17 wessels Exp $
  3.  *
  4.  * DEBUG: section 69    HTTP Header: Extension Field
  5.  * AUTHOR: Alex Rousskov
  6.  *
  7.  * SQUID Internet Object Cache  http://squid.nlanr.net/Squid/
  8.  * ----------------------------------------------------------
  9.  *
  10.  *  Squid is the result of efforts by numerous individuals from the
  11.  *  Internet community.  Development is led by Duane Wessels of the
  12.  *  National Laboratory for Applied Network Research and funded by the
  13.  *  National Science Foundation.  Squid is Copyrighted (C) 1998 by
  14.  *  Duane Wessels and the University of California San Diego.  Please
  15.  *  see the COPYRIGHT file for full details.  Squid incorporates
  16.  *  software developed and/or copyrighted by other sources.  Please see
  17.  *  the CREDITS file for full details.
  18.  *
  19.  *  This program is free software; you can redistribute it and/or modify
  20.  *  it under the terms of the GNU General Public License as published by
  21.  *  the Free Software Foundation; either version 2 of the License, or
  22.  *  (at your option) any later version.
  23.  *  
  24.  *  This program is distributed in the hope that it will be useful,
  25.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  26.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27.  *  GNU General Public License for more details.
  28.  *  
  29.  *  You should have received a copy of the GNU General Public License
  30.  *  along with this program; if not, write to the Free Software
  31.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
  32.  *
  33.  */
  34. #include "squid.h"
  35. /* local prototypes */
  36. static HttpHdrExtField *httpHdrExtFieldDoCreate(const char *name, int name_len, const char *value, int val_len);
  37. /* implementation */
  38. static HttpHdrExtField *
  39. httpHdrExtFieldDoCreate(const char *name, int name_len,
  40.     const char *value, int value_len)
  41. {
  42.     HttpHdrExtField *f = xcalloc(1, sizeof(HttpHdrExtField));
  43.     stringLimitInit(&f->name, name, name_len);
  44.     stringLimitInit(&f->value, value, value_len);
  45.     return f;
  46. }
  47. HttpHdrExtField *
  48. httpHdrExtFieldCreate(const char *name, const char *value)
  49. {
  50.     return httpHdrExtFieldDoCreate(
  51. name, strlen(name),
  52. value, strlen(value));
  53. }
  54. /* parses ext field; returns fresh ext field on success and NULL on failure */
  55. HttpHdrExtField *
  56. httpHdrExtFieldParseCreate(const char *field_start, const char *field_end)
  57. {
  58.     /* note: name_start == field_start */
  59.     const char *name_end = strchr(field_start, ':');
  60.     const char *value_start;
  61.     /* note: value_end == field_end */
  62.     if (!name_end || name_end <= field_start || name_end > field_end)
  63. return NULL;
  64.     value_start = name_end + 1; /* skip ':' */
  65.     /* skip white space */
  66.     while (value_start < field_end && xisspace(*value_start))
  67. value_start++;
  68.     return httpHdrExtFieldDoCreate(
  69. field_start, name_end - field_start,
  70. value_start, field_end - value_start);
  71. }
  72. void
  73. httpHdrExtFieldDestroy(HttpHdrExtField * f)
  74. {
  75.     assert(f);
  76.     stringClean(&f->name);
  77.     stringClean(&f->value);
  78.     xfree(f);
  79. }
  80. HttpHdrExtField *
  81. httpHdrExtFieldDup(HttpHdrExtField * f)
  82. {
  83.     assert(f);
  84.     return httpHdrExtFieldDoCreate(
  85. strBuf(f->name), strLen(f->name),
  86. strBuf(f->value), strLen(f->value));
  87. }