]> git.ipfire.org Git - thirdparty/squid.git/blame - src/HttpRequestMethod.h
3.1 Cleanups pt 1: Add testheaders.sh script
[thirdparty/squid.git] / src / HttpRequestMethod.h
CommitLineData
985c86bc 1/*
af256e2e 2 * $Id: HttpRequestMethod.h,v 1.12 2008/02/26 00:16:47 rousskov Exp $
985c86bc 3 *
4 *
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
7 *
8 * Squid is the result of efforts by numerous individuals from
9 * the Internet community; see the CONTRIBUTORS file for full
10 * details. Many organizations have provided support for Squid's
11 * development; see the SPONSORS file for full details. Squid is
12 * Copyrighted (C) 2001 by the Regents of the University of
13 * California; see the COPYRIGHT file for full details. Squid
14 * incorporates software developed and/or copyrighted by other
15 * sources; see the CREDITS file for full details.
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
30 *
31 */
32
33#ifndef SQUID_HTTPREQUESTMETHOD_H
34#define SQUID_HTTPREQUESTMETHOD_H
35
af256e2e 36#include "squid.h"
985c86bc 37#include <iosfwd>
a8e2f334 38#include "SquidString.h"
985c86bc 39
40enum _method_t {
41 METHOD_NONE, /* 000 */
42 METHOD_GET, /* 001 */
43 METHOD_POST, /* 010 */
44 METHOD_PUT, /* 011 */
45 METHOD_HEAD, /* 100 */
46 METHOD_CONNECT, /* 101 */
47 METHOD_TRACE, /* 110 */
48 METHOD_PURGE, /* 111 */
49 METHOD_OPTIONS,
50 METHOD_DELETE, /* RFC2616 section 9.7 */
51 METHOD_PROPFIND,
52 METHOD_PROPPATCH,
53 METHOD_MKCOL,
54 METHOD_COPY,
55 METHOD_MOVE,
56 METHOD_LOCK,
57 METHOD_UNLOCK,
58 METHOD_BMOVE,
59 METHOD_BDELETE,
60 METHOD_BPROPFIND,
61 METHOD_BPROPPATCH,
62 METHOD_BCOPY,
63 METHOD_SEARCH,
64 METHOD_SUBSCRIBE,
65 METHOD_UNSUBSCRIBE,
66 METHOD_POLL,
67 METHOD_REPORT,
dd13ffdb 68 METHOD_MKACTIVITY,
69 METHOD_CHECKOUT,
70 METHOD_MERGE,
60745f24 71 METHOD_OTHER,
72 METHOD_ENUM_END // MUST be last, (yuck) this is used as an array-initialization index constant!
985c86bc 73};
74
985c86bc 75
914b89a2 76/**
77 * This class represents an HTTP Request METHOD
78 * - i.e. PUT, POST, GET etc.
79 * It has a runtime extension facility to allow it to
985c86bc 80 * efficiently support new methods
914b89a2 81 \ingroup POD
985c86bc 82 */
985c86bc 83class HttpRequestMethod
84{
85
86public:
87 static void AddExtension(const char *methodString);
88 static void Configure(SquidConfig &Config);
89
914b89a2 90 HttpRequestMethod() : theMethod(METHOD_NONE), theImage() {}
985c86bc 91
914b89a2 92 HttpRequestMethod(_method_t const aMethod) : theMethod(aMethod), theImage() {}
985c86bc 93
914b89a2 94 /**
95 \param begin string to convert to request method.
96 \param end end of the method string (relative to begin). Use NULL if this is unknown.
97 *
98 \note DO NOT give end a default (ie NULL). That will cause silent char* conversion clashes.
99 */
100 HttpRequestMethod(char const * begin, char const * end);
985c86bc 101
60745f24 102 HttpRequestMethod & operator = (const HttpRequestMethod& aMethod)
103 {
104 theMethod = aMethod.theMethod;
105 theImage = aMethod.theImage;
106 return *this;
107 }
985c86bc 108
60745f24 109 HttpRequestMethod & operator = (_method_t const aMethod)
985c86bc 110 {
111 theMethod = aMethod;
60745f24 112 theImage.clean();
985c86bc 113 return *this;
114 }
115
914b89a2 116 bool operator == (_method_t const & aMethod) const { return theMethod == aMethod; }
117 bool operator == (HttpRequestMethod const & aMethod) const
118 {
25c48de2 119 return theMethod == aMethod.theMethod &&
120 (theMethod != METHOD_OTHER || theImage == aMethod.theImage);
914b89a2 121 }
122
123 bool operator != (_method_t const & aMethod) const { return theMethod != aMethod; }
124 bool operator != (HttpRequestMethod const & aMethod) const
125 {
25c48de2 126 return !operator==(aMethod);
60745f24 127 }
914b89a2 128
d3dee261 129 /** Iterate through all HTTP method IDs. */
60745f24 130 HttpRequestMethod& operator++()
131 {
d3dee261 132 // TODO: when this operator is used in more than one place,
133 // replace it with HttpRequestMethods::Iterator API
134 // XXX: this interface can create METHOD_OTHER without an image
135 assert(theMethod < METHOD_ENUM_END);
136 theMethod = (_method_t)(1 + (int)theMethod);
137 return *this;
60745f24 138 }
139
914b89a2 140 /** Get an ID representation of the method.
d3dee261 141 \retval METHOD_NONE the method is unset
142 \retval METHOD_OTHER the method is not recognized and has no unique ID
143 \retval * the method is on of the recognized HTTP methods.
914b89a2 144 */
145 _method_t const id() const { return theMethod; }
985c86bc 146
914b89a2 147 /** Get a char string representation of the method. */
60745f24 148 char const* image() const;
914b89a2 149
60745f24 150 bool isCacheble() const;
985c86bc 151
152private:
914b89a2 153 static const char *RequestMethodStr[];
985c86bc 154
914b89a2 155 _method_t theMethod; ///< Method type
156 String theImage; ///< Used for store METHOD_OTHER only
157};
60745f24 158
985c86bc 159inline std::ostream &
160operator << (std::ostream &os, HttpRequestMethod const &method)
161{
60745f24 162 os << method.image();
985c86bc 163 return os;
164}
165
60745f24 166inline const char*
167RequestMethodStr(const _method_t m)
168{
169 return HttpRequestMethod(m).image();
170}
171
172inline const char*
173RequestMethodStr(const HttpRequestMethod& m)
174{
175 return m.image();
176}
177
985c86bc 178#endif /* SQUID_HTTPREQUESTMETHOD_H */