| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Utility class that performs basic operations on header value tokens: parsing |
| // them out, checking for presense of certain tokens, and removing them. |
| |
| #ifndef NET_TOOLS_BALSA_BALSA_HEADERS_TOKEN_UTILS_H_ |
| #define NET_TOOLS_BALSA_BALSA_HEADERS_TOKEN_UTILS_H_ |
| |
| #include "base/strings/string_piece.h" |
| #include "net/tools/balsa/balsa_headers.h" |
| |
| namespace net { |
| |
| class BalsaHeadersTokenUtils { |
| public: |
| // All the functions below respect multiple header lines with the same key. |
| |
| // Checks whether the last header token matches a given value. Useful to |
| // check the outer-most content or transfer-encoding, for example. In the |
| // presence of multiple header lines with given key, the last token of the |
| // last line is compared. |
| static bool CheckHeaderForLastToken(const BalsaHeaders& headers, |
| const base::StringPiece& key, |
| const base::StringPiece& token); |
| |
| // Tokenizes header value for a given key. In the presence of multiple lines |
| // with that key, all of them will be tokenized and tokens will be added to |
| // the list in the order in which they are encountered. |
| static void TokenizeHeaderValue(const BalsaHeaders& headers, |
| const base::StringPiece& key, |
| BalsaHeaders::HeaderTokenList* tokens); |
| |
| // Removes the last token from the header value. In the presence of multiple |
| // header lines with given key, will remove the last token of the last line. |
| // Can be useful if the last encoding has to be removed. |
| static void RemoveLastTokenFromHeaderValue(const base::StringPiece& key, |
| BalsaHeaders* headers); |
| |
| // Given a pointer to the beginning and the end of the header value |
| // in some buffer, populates tokens list with beginning and end indices |
| // of all tokens present in the value string. |
| static void ParseTokenList(const char* start, |
| const char* end, |
| BalsaHeaders::HeaderTokenList* tokens); |
| |
| private: |
| // Helper function to tokenize a header line once we have its description. |
| static void TokenizeHeaderLine( |
| const BalsaHeaders& headers, |
| const BalsaHeaders::HeaderLineDescription& line, |
| BalsaHeaders::HeaderTokenList* tokens); |
| |
| BalsaHeadersTokenUtils(); // Prohibit instantiation |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_TOOLS_BALSA_BALSA_HEADERS_TOKEN_UTILS_H_ |
| |