Chromium Code Reviews| Index: net/websockets/websocket_frame.cc |
| diff --git a/net/websockets/websocket_frame.cc b/net/websockets/websocket_frame.cc |
| index da65cbac577f19ecb86c59d7dd5b4bdee412ffc5..8038475465f1265063da2ee6f7fcc9eb6299194d 100644 |
| --- a/net/websockets/websocket_frame.cc |
| +++ b/net/websockets/websocket_frame.cc |
| @@ -42,6 +42,22 @@ 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; |
| + } |
| + |
| + int header_size = |
|
mmenke
2012/08/20 16:33:46
optional: May want to just return this, rather th
Yuta Kitamura
2012/08/21 04:22:21
Done.
|
| + WebSocketFrameHeader::kBaseHeaderSize + |
| + extended_length_size + |
| + (header.masked ? WebSocketFrameHeader::kMaskingKeyLength : 0); |
| + return header_size; |
| +} |
| + |
| int WriteWebSocketFrameHeader(const WebSocketFrameHeader& header, |
| const WebSocketMaskingKey* masking_key, |
| char* buffer, |
| @@ -63,17 +79,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 +93,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 +101,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); |
| } |