diff options
Diffstat (limited to 'net/websockets/websocket_frame.h')
-rw-r--r-- | net/websockets/websocket_frame.h | 34 |
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. |