Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(193)

Unified Diff: net/websockets/websocket_frame_parser.h

Issue 9956013: Add WebSocketFrameParser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/websockets/websocket_frame_parser.h
diff --git a/net/websockets/websocket_frame_parser.h b/net/websockets/websocket_frame_parser.h
new file mode 100644
index 0000000000000000000000000000000000000000..496b879177a2670f8857adb27959ce9eb4cb69d0
--- /dev/null
+++ b/net/websockets/websocket_frame_parser.h
@@ -0,0 +1,65 @@
+// Copyright (c) 2012 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.
+
+#ifndef NET_WEBSOCKETS_WEBSOCKET_FRAME_PARSER_H_
+#define NET_WEBSOCKETS_WEBSOCKET_FRAME_PARSER_H_
+#pragma once
+
+#include <vector>
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_vector.h"
+#include "net/base/net_export.h"
+#include "net/websockets/websocket_frame.h"
+
+namespace net {
+
+// Parses WebSocket frame data stream.
+//
+// Specification of WebSocket frame format is available at
+// <http://tools.ietf.org/html/rfc6455#section-5>.
Takashi Toyoshima 2012/04/04 05:46:21 ditto.
Takashi Toyoshima 2012/04/09 23:12:16 How about this? You fixed the first one. So I gues
Yuta Kitamura 2012/04/10 05:34:00 I actually didn't fixed the other one either (I ju
+
+class NET_EXPORT_PRIVATE WebSocketFrameParser {
+ public:
+ WebSocketFrameParser();
+ ~WebSocketFrameParser();
+
+ // Decodes the given byte stream and stores parsed WebSocket frames in
+ // |frames|.
+ //
+ // If the parser encounters invalid payload length format, Decode() fails
+ // and returns false. Once Decode() has failed, the parser refuses to decode
+ // any more data and future invocations of Decode() will simply return false.
+ //
+ // Payload data of parsed WebSocket frames may be incomplete; see comments in
+ // websocket_frame.h for more details.
+ bool Decode(const char* data,
+ size_t length,
+ ScopedVector<WebSocketPartialFrame>* frames);
+
+ // Returns true if the parser has ever failed to decode a WebSocket frame.
+ bool failed() const;
Takashi Toyoshima 2012/04/04 05:46:21 This kind of getter will be implemented here.
Yuta Kitamura 2012/04/09 08:17:57 Will fix.
+
+ private:
+ void DecodeFrameHeader();
+
+ // Internal buffer to store the data to parse.
+ std::vector<char> buffer_;
Takashi Toyoshima 2012/04/04 05:46:21 blank line is needed between line 48 and 49.
Yuta Kitamura 2012/04/09 08:17:57 Will fix.
+ // Position in |buffer_| where the next round of parsing will happen.
+ size_t buffer_pos_;
+
+ // Frame header and masking key of the current frame.
+ // |masking_key_| is filled with zeros if the current frame is not masked.
+ scoped_refptr<WebSocketFrameHeader> current_frame_header_;
+ char masking_key_[WebSocketFrameHeader::kMaskingKeyLength];
+
+ // Amount of payload data read so far for the current frame.
+ uint64 frame_offset_;
+
+ bool failed_;
+};
+
+} // namespace net
+
+#endif // NET_WEBSOCKETS_WEBSOCKET_FRAME_PARSER_H_

Powered by Google App Engine
This is Rietveld 408576698