summaryrefslogtreecommitdiffstats
path: root/net/websockets/websocket_frame.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/websockets/websocket_frame.h')
-rw-r--r--net/websockets/websocket_frame.h34
1 files changed, 27 insertions, 7 deletions
diff --git a/net/websockets/websocket_frame.h b/net/websockets/websocket_frame.h
index 8c04f7d..c9d8b97 100644
--- a/net/websockets/websocket_frame.h
+++ b/net/websockets/websocket_frame.h
@@ -14,6 +14,7 @@
namespace net {
+class IOBuffer;
class IOBufferWithSize;
// Represents a WebSocket frame header.
@@ -69,7 +70,10 @@ struct NET_EXPORT WebSocketFrameHeader {
payload_length(0) {}
// Create a clone of this object on the heap.
- scoped_ptr<WebSocketFrameHeader> Clone();
+ scoped_ptr<WebSocketFrameHeader> Clone() const;
+
+ // Overwrite this object with the fields from |source|.
+ void CopyFrom(const WebSocketFrameHeader& source);
// Members below correspond to each item in WebSocket frame header.
// See <http://tools.ietf.org/html/rfc6455#section-5.2> for details.
@@ -85,16 +89,32 @@ struct NET_EXPORT WebSocketFrameHeader {
DISALLOW_COPY_AND_ASSIGN(WebSocketFrameHeader);
};
-// Contains payload data of part of a WebSocket frame.
+// Contains an entire WebSocket frame including payload. This is used by APIs
+// that are not concerned about retaining the original frame boundaries (because
+// frames may need to be split in order for the data to fit in memory).
+struct NET_EXPORT_PRIVATE WebSocketFrame {
+ // A frame must always have an opcode, so this parameter is compulsory.
+ explicit WebSocketFrame(WebSocketFrameHeader::OpCode opcode);
+ ~WebSocketFrame();
+
+ // |header| is always present.
+ WebSocketFrameHeader header;
+
+ // |data| is always unmasked even if the frame is masked. The size of |data|
+ // is given by |header.payload_length|.
+ scoped_refptr<IOBuffer> data;
+};
+
+// Structure describing one chunk of a WebSocket frame.
//
-// Payload of a WebSocket frame may be divided into multiple chunks.
+// The payload of a WebSocket frame may be divided into multiple chunks.
// You need to look at |final_chunk| member variable to detect the end of a
// series of chunk objects of a WebSocket frame.
//
-// Frame dissection is necessary to handle WebSocket frame stream containing
-// abritrarily large frames in the browser process. Because the server may send
-// a huge frame that doesn't fit in the memory, we cannot store the entire
-// payload data in the memory.
+// Frame dissection is necessary to handle frames that are too large to store in
+// the browser memory without losing information about the frame boundaries. In
+// practice, most code does not need to worry about the original frame
+// boundaries and can use the WebSocketFrame type declared above.
//
// Users of this struct should treat WebSocket frames as a data stream; it's
// important to keep the frame data flowing, especially in the browser process.