OLD | NEW |
(Empty) | |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef NET_WEBSOCKETS_WEBSOCKET_EXTENSION_PARSER_H_ |
| 6 #define NET_WEBSOCKETS_WEBSOCKET_EXTENSION_PARSER_H_ |
| 7 |
| 8 #include <string> |
| 9 #include <vector> |
| 10 |
| 11 #include "base/strings/string_piece.h" |
| 12 #include "net/base/net_export.h" |
| 13 #include "net/websockets/websocket_extension.h" |
| 14 |
| 15 namespace net { |
| 16 |
| 17 class NET_EXPORT_PRIVATE WebSocketExtensionParser { |
| 18 public: |
| 19 WebSocketExtensionParser(); |
| 20 ~WebSocketExtensionParser(); |
| 21 |
| 22 // Parses the given string as a WebSocket extension header value. |
| 23 void Parse(const char* data, size_t size); |
| 24 void Parse(const std::string& data) { |
| 25 Parse(data.data(), data.size()); |
| 26 } |
| 27 |
| 28 const char* current() const { return current_; } |
| 29 bool has_error() const { return has_error_; } |
| 30 const std::vector<WebSocketExtension>& extensions() const { |
| 31 return extensions_; |
| 32 } |
| 33 |
| 34 private: |
| 35 class CurrentPointerBackup; |
| 36 |
| 37 void Consume(const char* data, size_t size); |
| 38 void ConsumeExtensionList(); |
| 39 void ConsumeExtension(WebSocketExtension* extension); |
| 40 void ConsumeExtensionParameter(WebSocketExtension::Parameter* parameter); |
| 41 void ConsumeToken(base::StringPiece* token); |
| 42 void ConsumeQuotedToken(std::string* token); |
| 43 void ConsumeLWS(); |
| 44 size_t UnconsumedBytes() const { return end_ - current_; } |
| 45 |
| 46 static bool IsControl(char c); |
| 47 static bool IsSeparator(char c); |
| 48 |
| 49 const char* current_; |
| 50 const char* end_; |
| 51 bool has_error_; |
| 52 std::vector<WebSocketExtension> extensions_; |
| 53 }; |
| 54 |
| 55 } // namespace net |
| 56 |
| 57 #endif // NET_WEBSOCKETS_WEBSOCKET_EXTENSION_PARSER_H_ |
OLD | NEW |