| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/spdy/spdy_framer.h" | 5 #include "net/spdy/spdy_framer.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <iterator> | 10 #include <iterator> |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 previous_state_ = state_; \ | 132 previous_state_ = state_; \ |
| 133 state_ = newstate; \ | 133 state_ = newstate; \ |
| 134 } while (false) | 134 } while (false) |
| 135 #endif | 135 #endif |
| 136 | 136 |
| 137 SettingsFlagsAndId SettingsFlagsAndId::FromWireFormat( | 137 SettingsFlagsAndId SettingsFlagsAndId::FromWireFormat( |
| 138 SpdyMajorVersion version, uint32 wire) { | 138 SpdyMajorVersion version, uint32 wire) { |
| 139 if (version < SPDY3) { | 139 if (version < SPDY3) { |
| 140 ConvertFlagsAndIdForSpdy2(&wire); | 140 ConvertFlagsAndIdForSpdy2(&wire); |
| 141 } | 141 } |
| 142 return SettingsFlagsAndId(ntohl(wire) >> 24, ntohl(wire) & 0x00ffffff); | 142 return SettingsFlagsAndId(base::NetToHost32(wire) >> 24, |
| 143 base::NetToHost32(wire) & 0x00ffffff); |
| 143 } | 144 } |
| 144 | 145 |
| 145 SettingsFlagsAndId::SettingsFlagsAndId(uint8 flags, uint32 id) | 146 SettingsFlagsAndId::SettingsFlagsAndId(uint8 flags, uint32 id) |
| 146 : flags_(flags), id_(id & 0x00ffffff) { | 147 : flags_(flags), id_(id & 0x00ffffff) { |
| 147 LOG_IF(DFATAL, id > (1u << 24)) << "SPDY setting ID too large: " << id; | 148 LOG_IF(DFATAL, id > (1u << 24)) << "SPDY setting ID too large: " << id; |
| 148 } | 149 } |
| 149 | 150 |
| 150 uint32 SettingsFlagsAndId::GetWireFormat(SpdyMajorVersion version) | 151 uint32 SettingsFlagsAndId::GetWireFormat(SpdyMajorVersion version) |
| 151 const { | 152 const { |
| 152 uint32 wire = htonl(id_ & 0x00ffffff) | htonl(flags_ << 24); | 153 uint32 wire = |
| 154 base::HostToNet32(id_ & 0x00ffffff) | base::HostToNet32(flags_ << 24); |
| 153 if (version < SPDY3) { | 155 if (version < SPDY3) { |
| 154 ConvertFlagsAndIdForSpdy2(&wire); | 156 ConvertFlagsAndIdForSpdy2(&wire); |
| 155 } | 157 } |
| 156 return wire; | 158 return wire; |
| 157 } | 159 } |
| 158 | 160 |
| 159 // SPDY 2 had a bug in it with respect to byte ordering of id/flags field. | 161 // SPDY 2 had a bug in it with respect to byte ordering of id/flags field. |
| 160 // This method is used to preserve buggy behavior and works on both | 162 // This method is used to preserve buggy behavior and works on both |
| 161 // little-endian and big-endian hosts. | 163 // little-endian and big-endian hosts. |
| 162 // This method is also bidirectional (can be used to translate SPDY 2 to SPDY 3 | 164 // This method is also bidirectional (can be used to translate SPDY 2 to SPDY 3 |
| (...skipping 1631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1794 uint32 value; | 1796 uint32 value; |
| 1795 | 1797 |
| 1796 // Extract fields. | 1798 // Extract fields. |
| 1797 // Maintain behavior of old SPDY 2 bug with byte ordering of flags/id. | 1799 // Maintain behavior of old SPDY 2 bug with byte ordering of flags/id. |
| 1798 if (protocol_version() <= SPDY3) { | 1800 if (protocol_version() <= SPDY3) { |
| 1799 const uint32 id_and_flags_wire = *(reinterpret_cast<const uint32*>(data)); | 1801 const uint32 id_and_flags_wire = *(reinterpret_cast<const uint32*>(data)); |
| 1800 SettingsFlagsAndId id_and_flags = | 1802 SettingsFlagsAndId id_and_flags = |
| 1801 SettingsFlagsAndId::FromWireFormat(protocol_version(), id_and_flags_wire); | 1803 SettingsFlagsAndId::FromWireFormat(protocol_version(), id_and_flags_wire); |
| 1802 id_field = id_and_flags.id(); | 1804 id_field = id_and_flags.id(); |
| 1803 flags = id_and_flags.flags(); | 1805 flags = id_and_flags.flags(); |
| 1804 value = ntohl(*(reinterpret_cast<const uint32*>(data + 4))); | 1806 value = base::NetToHost32(*(reinterpret_cast<const uint32*>(data + 4))); |
| 1805 } else { | 1807 } else { |
| 1806 id_field = ntohs(*(reinterpret_cast<const uint16*>(data))); | 1808 id_field = base::NetToHost16(*(reinterpret_cast<const uint16*>(data))); |
| 1807 value = ntohl(*(reinterpret_cast<const uint32*>(data + 2))); | 1809 value = base::NetToHost32(*(reinterpret_cast<const uint32*>(data + 2))); |
| 1808 } | 1810 } |
| 1809 | 1811 |
| 1810 // Validate id. | 1812 // Validate id. |
| 1811 if (!SpdyConstants::IsValidSettingId(protocol_version(), id_field)) { | 1813 if (!SpdyConstants::IsValidSettingId(protocol_version(), id_field)) { |
| 1812 DLOG(WARNING) << "Unknown SETTINGS ID: " << id_field; | 1814 DLOG(WARNING) << "Unknown SETTINGS ID: " << id_field; |
| 1813 if (protocol_version() <= SPDY3) { | 1815 if (protocol_version() <= SPDY3) { |
| 1814 return false; | 1816 return false; |
| 1815 } else { | 1817 } else { |
| 1816 // In HTTP2 we ignore unknown settings for extensibility. | 1818 // In HTTP2 we ignore unknown settings for extensibility. |
| 1817 return true; | 1819 return true; |
| (...skipping 1405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3223 #else | 3225 #else |
| 3224 WriteHeaderBlockToZ(&frame.header_block(), compressor); | 3226 WriteHeaderBlockToZ(&frame.header_block(), compressor); |
| 3225 #endif // defined(USE_SYSTEM_ZLIB) | 3227 #endif // defined(USE_SYSTEM_ZLIB) |
| 3226 | 3228 |
| 3227 int compressed_size = compressed_max_size - compressor->avail_out; | 3229 int compressed_size = compressed_max_size - compressor->avail_out; |
| 3228 builder->Seek(compressed_size); | 3230 builder->Seek(compressed_size); |
| 3229 builder->RewriteLength(*this); | 3231 builder->RewriteLength(*this); |
| 3230 } | 3232 } |
| 3231 | 3233 |
| 3232 } // namespace net | 3234 } // namespace net |
| OLD | NEW |