]>
Commit | Line | Data |
---|---|---|
b32b8144 | 1 | // |
92f5a8d4 | 2 | // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) |
b32b8144 FG |
3 | // |
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
5 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
6 | // | |
7 | // Official repository: https://github.com/boostorg/beast | |
8 | // | |
9 | ||
10 | #ifndef BOOST_BEAST_HTTP_IMPL_VERB_IPP | |
11 | #define BOOST_BEAST_HTTP_IMPL_VERB_IPP | |
12 | ||
92f5a8d4 | 13 | #include <boost/beast/http/verb.hpp> |
b32b8144 FG |
14 | #include <boost/throw_exception.hpp> |
15 | #include <stdexcept> | |
16 | ||
17 | namespace boost { | |
18 | namespace beast { | |
19 | namespace http { | |
20 | ||
b32b8144 | 21 | string_view |
92f5a8d4 | 22 | to_string(verb v) |
b32b8144 | 23 | { |
92f5a8d4 | 24 | using namespace beast::detail::string_literals; |
b32b8144 FG |
25 | switch(v) |
26 | { | |
92f5a8d4 TL |
27 | case verb::delete_: return "DELETE"_sv; |
28 | case verb::get: return "GET"_sv; | |
29 | case verb::head: return "HEAD"_sv; | |
30 | case verb::post: return "POST"_sv; | |
31 | case verb::put: return "PUT"_sv; | |
32 | case verb::connect: return "CONNECT"_sv; | |
33 | case verb::options: return "OPTIONS"_sv; | |
34 | case verb::trace: return "TRACE"_sv; | |
35 | ||
36 | case verb::copy: return "COPY"_sv; | |
37 | case verb::lock: return "LOCK"_sv; | |
38 | case verb::mkcol: return "MKCOL"_sv; | |
39 | case verb::move: return "MOVE"_sv; | |
40 | case verb::propfind: return "PROPFIND"_sv; | |
41 | case verb::proppatch: return "PROPPATCH"_sv; | |
42 | case verb::search: return "SEARCH"_sv; | |
43 | case verb::unlock: return "UNLOCK"_sv; | |
44 | case verb::bind: return "BIND"_sv; | |
45 | case verb::rebind: return "REBIND"_sv; | |
46 | case verb::unbind: return "UNBIND"_sv; | |
47 | case verb::acl: return "ACL"_sv; | |
48 | ||
49 | case verb::report: return "REPORT"_sv; | |
50 | case verb::mkactivity: return "MKACTIVITY"_sv; | |
51 | case verb::checkout: return "CHECKOUT"_sv; | |
52 | case verb::merge: return "MERGE"_sv; | |
53 | ||
54 | case verb::msearch: return "M-SEARCH"_sv; | |
55 | case verb::notify: return "NOTIFY"_sv; | |
56 | case verb::subscribe: return "SUBSCRIBE"_sv; | |
57 | case verb::unsubscribe: return "UNSUBSCRIBE"_sv; | |
58 | ||
59 | case verb::patch: return "PATCH"_sv; | |
60 | case verb::purge: return "PURGE"_sv; | |
61 | ||
62 | case verb::mkcalendar: return "MKCALENDAR"_sv; | |
63 | ||
64 | case verb::link: return "LINK"_sv; | |
65 | case verb::unlink: return "UNLINK"_sv; | |
66 | ||
b32b8144 | 67 | case verb::unknown: |
92f5a8d4 | 68 | return "<unknown>"_sv; |
b32b8144 FG |
69 | } |
70 | ||
71 | BOOST_THROW_EXCEPTION(std::invalid_argument{"unknown verb"}); | |
72 | } | |
73 | ||
b32b8144 FG |
74 | verb |
75 | string_to_verb(string_view v) | |
76 | { | |
77 | /* | |
78 | ACL | |
79 | BIND | |
80 | CHECKOUT | |
81 | CONNECT | |
82 | COPY | |
83 | DELETE | |
84 | GET | |
85 | HEAD | |
86 | LINK | |
87 | LOCK | |
88 | M-SEARCH | |
89 | MERGE | |
90 | MKACTIVITY | |
91 | MKCALENDAR | |
92 | MKCOL | |
93 | MOVE | |
94 | NOTIFY | |
95 | OPTIONS | |
96 | PATCH | |
97 | POST | |
98 | PROPFIND | |
99 | PROPPATCH | |
100 | PURGE | |
101 | PUT | |
102 | REBIND | |
103 | REPORT | |
104 | SEARCH | |
105 | SUBSCRIBE | |
106 | TRACE | |
107 | UNBIND | |
108 | UNLINK | |
109 | UNLOCK | |
110 | UNSUBSCRIBE | |
111 | */ | |
92f5a8d4 | 112 | using namespace beast::detail::string_literals; |
b32b8144 FG |
113 | if(v.size() < 3) |
114 | return verb::unknown; | |
b32b8144 FG |
115 | auto c = v[0]; |
116 | v.remove_prefix(1); | |
117 | switch(c) | |
118 | { | |
119 | case 'A': | |
92f5a8d4 | 120 | if(v == "CL"_sv) |
b32b8144 FG |
121 | return verb::acl; |
122 | break; | |
123 | ||
124 | case 'B': | |
92f5a8d4 | 125 | if(v == "IND"_sv) |
b32b8144 FG |
126 | return verb::bind; |
127 | break; | |
128 | ||
129 | case 'C': | |
130 | c = v[0]; | |
131 | v.remove_prefix(1); | |
132 | switch(c) | |
133 | { | |
134 | case 'H': | |
92f5a8d4 | 135 | if(v == "ECKOUT"_sv) |
b32b8144 FG |
136 | return verb::checkout; |
137 | break; | |
138 | ||
139 | case 'O': | |
92f5a8d4 | 140 | if(v == "NNECT"_sv) |
b32b8144 | 141 | return verb::connect; |
92f5a8d4 | 142 | if(v == "PY"_sv) |
b32b8144 | 143 | return verb::copy; |
11fdf7f2 | 144 | BOOST_FALLTHROUGH; |
b32b8144 FG |
145 | |
146 | default: | |
147 | break; | |
148 | } | |
149 | break; | |
150 | ||
151 | case 'D': | |
92f5a8d4 | 152 | if(v == "ELETE"_sv) |
b32b8144 FG |
153 | return verb::delete_; |
154 | break; | |
155 | ||
156 | case 'G': | |
92f5a8d4 | 157 | if(v == "ET"_sv) |
b32b8144 FG |
158 | return verb::get; |
159 | break; | |
160 | ||
161 | case 'H': | |
92f5a8d4 | 162 | if(v == "EAD"_sv) |
b32b8144 FG |
163 | return verb::head; |
164 | break; | |
165 | ||
166 | case 'L': | |
92f5a8d4 | 167 | if(v == "INK"_sv) |
b32b8144 | 168 | return verb::link; |
92f5a8d4 | 169 | if(v == "OCK"_sv) |
b32b8144 FG |
170 | return verb::lock; |
171 | break; | |
172 | ||
173 | case 'M': | |
174 | c = v[0]; | |
175 | v.remove_prefix(1); | |
176 | switch(c) | |
177 | { | |
178 | case '-': | |
92f5a8d4 | 179 | if(v == "SEARCH"_sv) |
b32b8144 FG |
180 | return verb::msearch; |
181 | break; | |
182 | ||
183 | case 'E': | |
92f5a8d4 | 184 | if(v == "RGE"_sv) |
b32b8144 FG |
185 | return verb::merge; |
186 | break; | |
187 | ||
188 | case 'K': | |
92f5a8d4 | 189 | if(v == "ACTIVITY"_sv) |
b32b8144 FG |
190 | return verb::mkactivity; |
191 | if(v[0] == 'C') | |
192 | { | |
193 | v.remove_prefix(1); | |
92f5a8d4 | 194 | if(v == "ALENDAR"_sv) |
b32b8144 | 195 | return verb::mkcalendar; |
92f5a8d4 | 196 | if(v == "OL"_sv) |
b32b8144 FG |
197 | return verb::mkcol; |
198 | break; | |
199 | } | |
200 | break; | |
92f5a8d4 | 201 | |
b32b8144 | 202 | case 'O': |
92f5a8d4 | 203 | if(v == "VE"_sv) |
b32b8144 | 204 | return verb::move; |
11fdf7f2 | 205 | BOOST_FALLTHROUGH; |
b32b8144 FG |
206 | |
207 | default: | |
208 | break; | |
209 | } | |
210 | break; | |
211 | ||
212 | case 'N': | |
92f5a8d4 | 213 | if(v == "OTIFY"_sv) |
b32b8144 FG |
214 | return verb::notify; |
215 | break; | |
216 | ||
217 | case 'O': | |
92f5a8d4 | 218 | if(v == "PTIONS"_sv) |
b32b8144 FG |
219 | return verb::options; |
220 | break; | |
221 | ||
222 | case 'P': | |
223 | c = v[0]; | |
224 | v.remove_prefix(1); | |
225 | switch(c) | |
226 | { | |
227 | case 'A': | |
92f5a8d4 | 228 | if(v == "TCH"_sv) |
b32b8144 FG |
229 | return verb::patch; |
230 | break; | |
231 | ||
232 | case 'O': | |
92f5a8d4 | 233 | if(v == "ST"_sv) |
b32b8144 FG |
234 | return verb::post; |
235 | break; | |
236 | ||
237 | case 'R': | |
92f5a8d4 | 238 | if(v == "OPFIND"_sv) |
b32b8144 | 239 | return verb::propfind; |
92f5a8d4 | 240 | if(v == "OPPATCH"_sv) |
b32b8144 FG |
241 | return verb::proppatch; |
242 | break; | |
243 | ||
244 | case 'U': | |
92f5a8d4 | 245 | if(v == "RGE"_sv) |
b32b8144 | 246 | return verb::purge; |
92f5a8d4 | 247 | if(v == "T"_sv) |
b32b8144 | 248 | return verb::put; |
11fdf7f2 | 249 | BOOST_FALLTHROUGH; |
b32b8144 FG |
250 | |
251 | default: | |
252 | break; | |
253 | } | |
254 | break; | |
255 | ||
256 | case 'R': | |
257 | if(v[0] != 'E') | |
258 | break; | |
259 | v.remove_prefix(1); | |
92f5a8d4 | 260 | if(v == "BIND"_sv) |
b32b8144 | 261 | return verb::rebind; |
92f5a8d4 | 262 | if(v == "PORT"_sv) |
b32b8144 FG |
263 | return verb::report; |
264 | break; | |
265 | ||
266 | case 'S': | |
92f5a8d4 | 267 | if(v == "EARCH"_sv) |
b32b8144 | 268 | return verb::search; |
92f5a8d4 | 269 | if(v == "UBSCRIBE"_sv) |
b32b8144 FG |
270 | return verb::subscribe; |
271 | break; | |
272 | ||
273 | case 'T': | |
92f5a8d4 | 274 | if(v == "RACE"_sv) |
b32b8144 FG |
275 | return verb::trace; |
276 | break; | |
277 | ||
278 | case 'U': | |
279 | if(v[0] != 'N') | |
280 | break; | |
281 | v.remove_prefix(1); | |
92f5a8d4 | 282 | if(v == "BIND"_sv) |
b32b8144 | 283 | return verb::unbind; |
92f5a8d4 | 284 | if(v == "LINK"_sv) |
b32b8144 | 285 | return verb::unlink; |
92f5a8d4 | 286 | if(v == "LOCK"_sv) |
b32b8144 | 287 | return verb::unlock; |
92f5a8d4 | 288 | if(v == "SUBSCRIBE"_sv) |
b32b8144 FG |
289 | return verb::unsubscribe; |
290 | break; | |
291 | ||
292 | default: | |
293 | break; | |
294 | } | |
295 | ||
296 | return verb::unknown; | |
297 | } | |
298 | ||
b32b8144 FG |
299 | } // http |
300 | } // beast | |
301 | } // boost | |
302 | ||
303 | #endif |