| 253 | |
| 254 | template <class Functor> |
| 255 | inline void ForEach(TString in, Functor& f) { |
| 256 | in.to_lower(); |
| 257 | |
| 258 | const char* b = in.begin(); |
| 259 | const char* c = b; |
| 260 | const char* e = in.end(); |
| 261 | |
| 262 | while (c != e) { |
| 263 | if (*c == ',') { |
| 264 | f(RmSemiColon(Trim(b, c))); |
| 265 | b = c + 1; |
| 266 | } |
| 267 | |
| 268 | ++c; |
| 269 | } |
| 270 | |
| 271 | if (b != c) { |
| 272 | f(RmSemiColon(Trim(b, c))); |
| 273 | } |
| 274 | } |
| 275 | |
| 276 | inline bool IsRequest() const { |
| 277 | // https://datatracker.ietf.org/doc/html/rfc7231#section-4 |