Chromium Code Reviews| 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 // TODO(rtenhove) clean up frame buffer size calculations so that we aren't | 5 // TODO(rtenhove) clean up frame buffer size calculations so that we aren't |
| 6 // constantly adding and subtracting header sizes; this is ugly and error- | 6 // constantly adding and subtracting header sizes; this is ugly and error- |
| 7 // prone. | 7 // prone. |
| 8 | 8 |
| 9 #include "net/spdy/spdy_framer.h" | 9 #include "net/spdy/spdy_framer.h" |
| 10 | 10 |
| (...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1004 } | 1004 } |
| 1005 | 1005 |
| 1006 // Store header. | 1006 // Store header. |
| 1007 (*block)[name] = value; | 1007 (*block)[name] = value; |
| 1008 } | 1008 } |
| 1009 return true; | 1009 return true; |
| 1010 } | 1010 } |
| 1011 | 1011 |
| 1012 /* static */ | 1012 /* static */ |
| 1013 bool SpdyFramer::ParseSettings(const SpdySettingsControlFrame* frame, | 1013 bool SpdyFramer::ParseSettings(const SpdySettingsControlFrame* frame, |
| 1014 SpdySettings* settings) { | 1014 SettingsMap* settings) { |
| 1015 DCHECK_EQ(frame->type(), SETTINGS); | 1015 DCHECK_EQ(frame->type(), SETTINGS); |
| 1016 DCHECK(settings); | |
|
Ryan Hamilton
2012/04/12 17:11:21
Did you mean to remove this DCHECK?
ramant (doing other things)
2012/04/12 18:35:59
(my fault. deleted it by mistake)
Done.
| |
| 1017 | 1016 |
| 1018 SpdyFrameReader parser(frame->header_block(), frame->header_block_len()); | 1017 SpdyFrameReader parser(frame->header_block(), frame->header_block_len()); |
| 1019 for (size_t index = 0; index < frame->num_entries(); ++index) { | 1018 for (size_t index = 0; index < frame->num_entries(); ++index) { |
| 1020 uint32 id_and_flags_wire; | 1019 uint32 id_and_flags_wire; |
| 1021 uint32 value; | 1020 uint32 value; |
| 1022 // SettingsFlagsAndId accepts off-the-wire (network byte order) data, so we | 1021 // SettingsFlagsAndId accepts off-the-wire (network byte order) data, so we |
| 1023 // use ReadBytes() instead of ReadUInt32() as the latter calls ntohl(). | 1022 // use ReadBytes() instead of ReadUInt32() as the latter calls ntohl(). |
| 1024 if (!parser.ReadBytes(&id_and_flags_wire, 4)) { | 1023 if (!parser.ReadBytes(&id_and_flags_wire, 4)) { |
| 1025 return false; | 1024 return false; |
| 1026 } | 1025 } |
| 1027 if (!parser.ReadUInt32(&value)) | 1026 if (!parser.ReadUInt32(&value)) |
| 1028 return false; | 1027 return false; |
| 1029 SettingsFlagsAndId id_and_flags = | 1028 SettingsFlagsAndId flags_and_id = |
| 1030 SettingsFlagsAndId::FromWireFormat(frame->version(), id_and_flags_wire); | 1029 SettingsFlagsAndId::FromWireFormat(frame->version(), id_and_flags_wire); |
| 1031 settings->insert(settings->end(), std::make_pair(id_and_flags, value)); | 1030 SpdySettingsIds id = static_cast<SpdySettingsIds>(flags_and_id.id()); |
| 1031 SpdySettingsFlags flags = | |
| 1032 static_cast<SpdySettingsFlags>(flags_and_id.flags()); | |
| 1033 settings->insert(std::make_pair(id, SettingsFlagsAndValue(flags, value))); | |
| 1032 } | 1034 } |
| 1033 return true; | 1035 return true; |
| 1034 } | 1036 } |
| 1035 | 1037 |
| 1036 /* static */ | 1038 /* static */ |
| 1037 bool SpdyFramer::ParseCredentialData(const char* data, size_t len, | 1039 bool SpdyFramer::ParseCredentialData(const char* data, size_t len, |
| 1038 SpdyCredential* credential) { | 1040 SpdyCredential* credential) { |
| 1039 DCHECK(credential); | 1041 DCHECK(credential); |
| 1040 | 1042 |
| 1041 SpdyFrameReader parser(data, len); | 1043 SpdyFrameReader parser(data, len); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1156 SpdyFrameBuilder frame(SpdyRstStreamControlFrame::size()); | 1158 SpdyFrameBuilder frame(SpdyRstStreamControlFrame::size()); |
| 1157 frame.WriteUInt16(kControlFlagMask | spdy_version_); | 1159 frame.WriteUInt16(kControlFlagMask | spdy_version_); |
| 1158 frame.WriteUInt16(RST_STREAM); | 1160 frame.WriteUInt16(RST_STREAM); |
| 1159 frame.WriteUInt32(8); | 1161 frame.WriteUInt32(8); |
| 1160 frame.WriteUInt32(stream_id); | 1162 frame.WriteUInt32(stream_id); |
| 1161 frame.WriteUInt32(status); | 1163 frame.WriteUInt32(status); |
| 1162 return reinterpret_cast<SpdyRstStreamControlFrame*>(frame.take()); | 1164 return reinterpret_cast<SpdyRstStreamControlFrame*>(frame.take()); |
| 1163 } | 1165 } |
| 1164 | 1166 |
| 1165 SpdySettingsControlFrame* SpdyFramer::CreateSettings( | 1167 SpdySettingsControlFrame* SpdyFramer::CreateSettings( |
| 1166 const SpdySettings& values) const { | 1168 const SettingsMap& values) const { |
| 1167 SpdyFrameBuilder frame(SpdySettingsControlFrame::size() + 8 * values.size()); | 1169 SpdyFrameBuilder frame(SpdySettingsControlFrame::size() + 8 * values.size()); |
| 1168 frame.WriteUInt16(kControlFlagMask | spdy_version_); | 1170 frame.WriteUInt16(kControlFlagMask | spdy_version_); |
| 1169 frame.WriteUInt16(SETTINGS); | 1171 frame.WriteUInt16(SETTINGS); |
| 1170 size_t settings_size = | 1172 size_t settings_size = |
| 1171 SpdySettingsControlFrame::size() - SpdyFrame::kHeaderSize + | 1173 SpdySettingsControlFrame::size() - SpdyFrame::kHeaderSize + |
| 1172 8 * values.size(); | 1174 8 * values.size(); |
| 1173 frame.WriteUInt32(settings_size); | 1175 frame.WriteUInt32(settings_size); |
| 1174 frame.WriteUInt32(values.size()); | 1176 frame.WriteUInt32(values.size()); |
| 1175 SpdySettings::const_iterator it = values.begin(); | 1177 SettingsMap::const_iterator it = values.begin(); |
| 1176 while (it != values.end()) { | 1178 while (it != values.end()) { |
| 1177 uint32 id_and_flags_wire = it->first.GetWireFormat(spdy_version_); | 1179 SettingsFlagsAndId flags_and_id(it->second.first, it->first); |
| 1180 uint32 id_and_flags_wire = flags_and_id.GetWireFormat(spdy_version_); | |
| 1178 frame.WriteBytes(&id_and_flags_wire, 4); | 1181 frame.WriteBytes(&id_and_flags_wire, 4); |
| 1179 frame.WriteUInt32(it->second); | 1182 frame.WriteUInt32(it->second.second); |
| 1180 ++it; | 1183 ++it; |
| 1181 } | 1184 } |
| 1182 return reinterpret_cast<SpdySettingsControlFrame*>(frame.take()); | 1185 return reinterpret_cast<SpdySettingsControlFrame*>(frame.take()); |
| 1183 } | 1186 } |
| 1184 | 1187 |
| 1185 SpdyPingControlFrame* SpdyFramer::CreatePingFrame(uint32 unique_id) const { | 1188 SpdyPingControlFrame* SpdyFramer::CreatePingFrame(uint32 unique_id) const { |
| 1186 SpdyFrameBuilder frame(SpdyPingControlFrame::size()); | 1189 SpdyFrameBuilder frame(SpdyPingControlFrame::size()); |
| 1187 frame.WriteUInt16(kControlFlagMask | spdy_version_); | 1190 frame.WriteUInt16(kControlFlagMask | spdy_version_); |
| 1188 frame.WriteUInt16(PING); | 1191 frame.WriteUInt16(PING); |
| 1189 size_t ping_size = SpdyPingControlFrame::size() - SpdyFrame::kHeaderSize; | 1192 size_t ping_size = SpdyPingControlFrame::size() - SpdyFrame::kHeaderSize; |
| (...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1802 | 1805 |
| 1803 void SpdyFramer::set_validate_control_frame_sizes(bool value) { | 1806 void SpdyFramer::set_validate_control_frame_sizes(bool value) { |
| 1804 validate_control_frame_sizes_ = value; | 1807 validate_control_frame_sizes_ = value; |
| 1805 } | 1808 } |
| 1806 | 1809 |
| 1807 void SpdyFramer::set_enable_compression_default(bool value) { | 1810 void SpdyFramer::set_enable_compression_default(bool value) { |
| 1808 g_enable_compression_default = value; | 1811 g_enable_compression_default = value; |
| 1809 } | 1812 } |
| 1810 | 1813 |
| 1811 } // namespace net | 1814 } // namespace net |
| OLD | NEW |