| 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 | 
|---|