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 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1182 DCHECK(!control_frame.has_header_block()); | 1182 DCHECK(!control_frame.has_header_block()); |
1183 // Use frame-specific handlers. | 1183 // Use frame-specific handlers. |
1184 switch (control_frame.type()) { | 1184 switch (control_frame.type()) { |
1185 case PING: { | 1185 case PING: { |
1186 SpdyPingControlFrame* ping_frame = | 1186 SpdyPingControlFrame* ping_frame = |
1187 reinterpret_cast<SpdyPingControlFrame*>(&control_frame); | 1187 reinterpret_cast<SpdyPingControlFrame*>(&control_frame); |
1188 visitor_->OnPing(ping_frame->unique_id()); | 1188 visitor_->OnPing(ping_frame->unique_id()); |
1189 } | 1189 } |
1190 break; | 1190 break; |
1191 case WINDOW_UPDATE: { | 1191 case WINDOW_UPDATE: { |
1192 SpdyWindowUpdateControlFrame *window_update_frame = | 1192 SpdyFrameReader reader(current_frame_buffer_.get(), |
1193 reinterpret_cast<SpdyWindowUpdateControlFrame*>(&control_frame); | 1193 current_frame_len_); |
1194 visitor_->OnWindowUpdate(window_update_frame->stream_id(), | 1194 reader.Seek(SpdyFrame::kHeaderSize); // Seek past frame header. |
1195 window_update_frame->delta_window_size()); | 1195 SpdyStreamId stream_id = kInvalidStream; |
| 1196 uint32 delta_window_size = 0; |
| 1197 bool successful_read = reader.ReadUInt31(&stream_id); |
| 1198 DCHECK(successful_read); |
| 1199 successful_read = reader.ReadUInt32(&delta_window_size); |
| 1200 DCHECK(successful_read); |
| 1201 DCHECK(reader.IsDoneReading()); |
| 1202 visitor_->OnWindowUpdate(stream_id, delta_window_size); |
1196 } | 1203 } |
1197 break; | 1204 break; |
1198 case RST_STREAM: { | 1205 case RST_STREAM: { |
1199 SpdyRstStreamControlFrame* rst_stream_frame = | 1206 SpdyRstStreamControlFrame* rst_stream_frame = |
1200 reinterpret_cast<SpdyRstStreamControlFrame*>(&control_frame); | 1207 reinterpret_cast<SpdyRstStreamControlFrame*>(&control_frame); |
1201 visitor_->OnRstStream(rst_stream_frame->stream_id(), | 1208 visitor_->OnRstStream(rst_stream_frame->stream_id(), |
1202 rst_stream_frame->status()); | 1209 rst_stream_frame->status()); |
1203 } | 1210 } |
1204 break; | 1211 break; |
1205 case GOAWAY: { | 1212 case GOAWAY: { |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1638 builder.WriteUInt16(0); // Unused. | 1645 builder.WriteUInt16(0); // Unused. |
1639 } | 1646 } |
1640 DCHECK_EQ(GetHeadersMinimumSize(), builder.length()); | 1647 DCHECK_EQ(GetHeadersMinimumSize(), builder.length()); |
1641 | 1648 |
1642 SerializeNameValueBlock(&builder, headers); | 1649 SerializeNameValueBlock(&builder, headers); |
1643 DCHECK_EQ(size, builder.length()); | 1650 DCHECK_EQ(size, builder.length()); |
1644 | 1651 |
1645 return builder.take(); | 1652 return builder.take(); |
1646 } | 1653 } |
1647 | 1654 |
1648 SpdyWindowUpdateControlFrame* SpdyFramer::CreateWindowUpdate( | 1655 SpdyFrame* SpdyFramer::CreateWindowUpdate( |
1649 SpdyStreamId stream_id, | 1656 SpdyStreamId stream_id, |
1650 uint32 delta_window_size) const { | 1657 uint32 delta_window_size) const { |
1651 SpdyWindowUpdateIR window_update(stream_id, delta_window_size); | 1658 SpdyWindowUpdateIR window_update(stream_id, delta_window_size); |
1652 return reinterpret_cast<SpdyWindowUpdateControlFrame*>( | 1659 return SerializeWindowUpdate(window_update); |
1653 SerializeWindowUpdate(window_update)); | |
1654 } | 1660 } |
1655 | 1661 |
1656 SpdySerializedFrame* SpdyFramer::SerializeWindowUpdate( | 1662 SpdySerializedFrame* SpdyFramer::SerializeWindowUpdate( |
1657 const SpdyWindowUpdateIR& window_update) const { | 1663 const SpdyWindowUpdateIR& window_update) const { |
1658 SpdyFrameBuilder builder(WINDOW_UPDATE, | 1664 SpdyFrameBuilder builder(WINDOW_UPDATE, |
1659 kNoFlags, | 1665 kNoFlags, |
1660 protocol_version(), | 1666 protocol_version(), |
1661 GetWindowUpdateSize()); | 1667 GetWindowUpdateSize()); |
1662 builder.WriteUInt32(window_update.stream_id()); | 1668 builder.WriteUInt32(window_update.stream_id()); |
1663 builder.WriteUInt32(window_update.delta()); | 1669 builder.WriteUInt32(window_update.delta()); |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2060 builder->WriteString(it->first); | 2066 builder->WriteString(it->first); |
2061 builder->WriteString(it->second); | 2067 builder->WriteString(it->second); |
2062 } else { | 2068 } else { |
2063 builder->WriteStringPiece32(it->first); | 2069 builder->WriteStringPiece32(it->first); |
2064 builder->WriteStringPiece32(it->second); | 2070 builder->WriteStringPiece32(it->second); |
2065 } | 2071 } |
2066 } | 2072 } |
2067 } | 2073 } |
2068 | 2074 |
2069 } // namespace net | 2075 } // namespace net |
OLD | NEW |