]>
Commit | Line | Data |
---|---|---|
00a382fa | 1 | |
2 | /* | |
0353e724 | 3 | * $Id: HttpHdrExtField.cc,v 1.12 2003/03/06 11:51:55 robertc Exp $ |
00a382fa | 4 | * |
d76fcfa7 | 5 | * DEBUG: section 69 HTTP Header: Extension Field |
00a382fa | 6 | * AUTHOR: Alex Rousskov |
7 | * | |
2b6662ba | 8 | * SQUID Web Proxy Cache http://www.squid-cache.org/ |
e25c139f | 9 | * ---------------------------------------------------------- |
00a382fa | 10 | * |
2b6662ba | 11 | * Squid is the result of efforts by numerous individuals from |
12 | * the Internet community; see the CONTRIBUTORS file for full | |
13 | * details. Many organizations have provided support for Squid's | |
14 | * development; see the SPONSORS file for full details. Squid is | |
15 | * Copyrighted (C) 2001 by the Regents of the University of | |
16 | * California; see the COPYRIGHT file for full details. Squid | |
17 | * incorporates software developed and/or copyrighted by other | |
18 | * sources; see the CREDITS file for full details. | |
00a382fa | 19 | * |
20 | * This program is free software; you can redistribute it and/or modify | |
21 | * it under the terms of the GNU General Public License as published by | |
22 | * the Free Software Foundation; either version 2 of the License, or | |
23 | * (at your option) any later version. | |
e25c139f | 24 | * |
00a382fa | 25 | * This program is distributed in the hope that it will be useful, |
26 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
27 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
28 | * GNU General Public License for more details. | |
e25c139f | 29 | * |
00a382fa | 30 | * You should have received a copy of the GNU General Public License |
31 | * along with this program; if not, write to the Free Software | |
cbdec147 | 32 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. |
00a382fa | 33 | * |
34 | */ | |
35 | ||
36 | #include "squid.h" | |
37 | ||
38 | /* local prototypes */ | |
39 | static HttpHdrExtField *httpHdrExtFieldDoCreate(const char *name, int name_len, const char *value, int val_len); | |
40 | ||
41 | ||
42 | /* implementation */ | |
43 | ||
44 | static HttpHdrExtField * | |
b644367b | 45 | httpHdrExtFieldDoCreate(const char *name, int name_len, |
62e76326 | 46 | const char *value, int value_len) |
00a382fa | 47 | { |
0353e724 | 48 | HttpHdrExtField *f = new HttpHdrExtField; |
00a382fa | 49 | stringLimitInit(&f->name, name, name_len); |
50 | stringLimitInit(&f->value, value, value_len); | |
51 | return f; | |
52 | } | |
53 | ||
54 | HttpHdrExtField * | |
55 | httpHdrExtFieldCreate(const char *name, const char *value) | |
56 | { | |
57 | return httpHdrExtFieldDoCreate( | |
62e76326 | 58 | name, strlen(name), |
59 | value, strlen(value)); | |
00a382fa | 60 | } |
61 | ||
62 | /* parses ext field; returns fresh ext field on success and NULL on failure */ | |
63 | HttpHdrExtField * | |
64 | httpHdrExtFieldParseCreate(const char *field_start, const char *field_end) | |
65 | { | |
66 | /* note: name_start == field_start */ | |
67 | const char *name_end = strchr(field_start, ':'); | |
68 | const char *value_start; | |
69 | /* note: value_end == field_end */ | |
70 | ||
71 | if (!name_end || name_end <= field_start || name_end > field_end) | |
62e76326 | 72 | return NULL; |
00a382fa | 73 | |
74 | value_start = name_end + 1; /* skip ':' */ | |
62e76326 | 75 | |
00a382fa | 76 | /* skip white space */ |
b6a2f15e | 77 | while (value_start < field_end && xisspace(*value_start)) |
62e76326 | 78 | value_start++; |
00a382fa | 79 | |
00a382fa | 80 | return httpHdrExtFieldDoCreate( |
62e76326 | 81 | field_start, name_end - field_start, |
82 | value_start, field_end - value_start); | |
00a382fa | 83 | } |
84 | ||
85 | void | |
86 | httpHdrExtFieldDestroy(HttpHdrExtField * f) | |
87 | { | |
88 | assert(f); | |
528b2c61 | 89 | f->name.clean(); |
90 | f->value.clean(); | |
0353e724 | 91 | delete f; |
00a382fa | 92 | } |
93 | ||
94 | HttpHdrExtField * | |
95 | httpHdrExtFieldDup(HttpHdrExtField * f) | |
96 | { | |
97 | assert(f); | |
98 | return httpHdrExtFieldDoCreate( | |
62e76326 | 99 | f->name.buf(), f->name.size(), |
100 | f->value.buf(), f->value.size()); | |
00a382fa | 101 | } |