Index: net/websockets/websocket_frame.h |
diff --git a/net/websockets/websocket_frame.h b/net/websockets/websocket_frame.h |
index 593d439481282b023397b241e08d9fa2975d9942..8903c9cdc3c8541613048d18035367b8da435842 100644 |
--- a/net/websockets/websocket_frame.h |
+++ b/net/websockets/websocket_frame.h |
@@ -60,6 +60,9 @@ struct NET_EXPORT_PRIVATE WebSocketFrameHeader { |
// 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. |
// Users should not let the data stuck somewhere in the pipeline. |
+// |
+// This struct is used for reading WebSocket frame data (created by |
+// WebSocketFrameParser). To construct WebSocket frames, use functions below. |
struct NET_EXPORT_PRIVATE WebSocketFrameChunk { |
WebSocketFrameChunk(); |
~WebSocketFrameChunk(); |
@@ -75,6 +78,54 @@ struct NET_EXPORT_PRIVATE WebSocketFrameChunk { |
std::vector<char> data; |
}; |
+// Contains four-byte data representing "masking key" of WebSocket frames. |
+struct WebSocketMaskingKey { |
+ char key[WebSocketFrameHeader::kMaskingKeyLength]; |
+}; |
+ |
+// Writes wire format of a WebSocket frame header into |output|, and returns |
+// the number of bytes written. |
+// |
+// WebSocket frame format is defined at: |
+// <http://tools.ietf.org/html/rfc6455#section-5.2>. This function writes |
+// everything but payload data in a WebSocket frame to |buffer|. |
+// |
+// If |header->masked| is true, |masking_key| must point to a valid |
+// WebSocketMaskingKey object containing the masking key for that frame |
+// (possibly generated by GenerateWebSocketMaskingKey() function below). |
+// Otherwise, |masking_key| must be NULL. |
+// |
+// |buffer| should have enough size to contain the frame header. Size of a |
+// frame header varies from 2 bytes to 14 bytes depending on the payload length |
+// and maskedness. If the size of |buffer| is insufficient, this function |
+// returns ERR_INVALID_ARGUMENT and does not write any data to |buffer|. |
+NET_EXPORT_PRIVATE int WriteWebSocketFrameHeader( |
+ const WebSocketFrameHeader& header, |
+ const WebSocketMaskingKey* masking_key, |
+ char* buffer, |
+ int buffer_size); |
+ |
+// Generates a masking key suitable for use in a new WebSocket frame. |
+NET_EXPORT_PRIVATE WebSocketMaskingKey GenerateWebSocketMaskingKey(); |
+ |
+// Masks WebSocket frame payload. |
+// |
+// A client must mask every WebSocket frame by XOR'ing the frame payload |
+// with four-byte random data (masking key). This function applies the masking |
+// to the given payload data. |
+// |
+// This function masks |data| with |masking_key|, assuming |data| is partial |
+// data starting from |frame_offset| bytes from the beginning of the payload |
+// data. |
+// |
+// Since frame masking is a reversible operation, this function can also be |
+// used for unmasking a WebSocket frame. |
+NET_EXPORT_PRIVATE void MaskWebSocketFramePayload( |
+ const WebSocketMaskingKey& masking_key, |
+ uint64 frame_offset, |
+ char* data, |
+ int data_size); |
+ |
} // namespace net |
#endif // NET_WEBSOCKETS_WEBSOCKET_FRAME_H_ |