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

Unified Diff: net/websockets/websocket_frame.cc

Issue 10825444: Add a function that calculates the size of WebSocket frame header. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Matt's comment. Created 8 years, 4 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
« no previous file with comments | « net/websockets/websocket_frame.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/websockets/websocket_frame.cc
diff --git a/net/websockets/websocket_frame.cc b/net/websockets/websocket_frame.cc
index da65cbac577f19ecb86c59d7dd5b4bdee412ffc5..2194f60607f82e04207a1013b4bf455dfb1c25eb 100644
--- a/net/websockets/websocket_frame.cc
+++ b/net/websockets/websocket_frame.cc
@@ -42,6 +42,20 @@ WebSocketFrameChunk::WebSocketFrameChunk() : final_chunk(false) {
WebSocketFrameChunk::~WebSocketFrameChunk() {
}
+int GetWebSocketFrameHeaderSize(const WebSocketFrameHeader& header) {
+ int extended_length_size = 0;
+ if (header.payload_length > kMaxPayloadLengthWithoutExtendedLengthField &&
+ header.payload_length <= kuint16max) {
+ extended_length_size = 2;
+ } else if (header.payload_length > kuint16max) {
+ extended_length_size = 8;
+ }
+
+ return (WebSocketFrameHeader::kBaseHeaderSize +
+ extended_length_size +
+ (header.masked ? WebSocketFrameHeader::kMaskingKeyLength : 0));
+}
+
int WriteWebSocketFrameHeader(const WebSocketFrameHeader& header,
const WebSocketMaskingKey* masking_key,
char* buffer,
@@ -63,17 +77,7 @@ int WriteWebSocketFrameHeader(const WebSocketFrameHeader& header,
// This function constructs frame header (the first three in the list
// above).
- size_t extended_length_size = 0;
- if (header.payload_length > kMaxPayloadLengthWithoutExtendedLengthField &&
- header.payload_length <= kuint16max) {
- extended_length_size = 2;
- } else if (header.payload_length > kuint16max) {
- extended_length_size = 8;
- }
- int header_size =
- WebSocketFrameHeader::kBaseHeaderSize +
- extended_length_size +
- (header.masked ? WebSocketFrameHeader::kMaskingKeyLength : 0);
+ int header_size = GetWebSocketFrameHeaderSize(header);
if (header_size > buffer_size)
return ERR_INVALID_ARGUMENT;
@@ -87,6 +91,7 @@ int WriteWebSocketFrameHeader(const WebSocketFrameHeader& header,
first_byte |= header.opcode & kOpCodeMask;
buffer[buffer_index++] = first_byte;
+ int extended_length_size = 0;
uint8 second_byte = 0u;
second_byte |= header.masked ? kMaskBit : 0u;
if (header.payload_length <=
@@ -94,17 +99,19 @@ int WriteWebSocketFrameHeader(const WebSocketFrameHeader& header,
second_byte |= header.payload_length;
} else if (header.payload_length <= kuint16max) {
second_byte |= kPayloadLengthWithTwoByteExtendedLengthField;
+ extended_length_size = 2;
} else {
second_byte |= kPayloadLengthWithEightByteExtendedLengthField;
+ extended_length_size = 8;
}
buffer[buffer_index++] = second_byte;
// Writes "extended payload length" field.
- if (extended_length_size == 2u) {
+ if (extended_length_size == 2) {
uint16 payload_length_16 = static_cast<uint16>(header.payload_length);
WriteBigEndian(buffer + buffer_index, payload_length_16);
buffer_index += sizeof(uint16);
- } else if (extended_length_size == 8u) {
+ } else if (extended_length_size == 8) {
WriteBigEndian(buffer + buffer_index, header.payload_length);
buffer_index += sizeof(uint64);
}
« no previous file with comments | « net/websockets/websocket_frame.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698