| Index: net/spdy/spdy_framer.cc
|
| diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc
|
| index 4d716fab12f9d453306bbe2a7f72a947dc41a742..d49b05e4f1ddde30f3b29e5b5897c97b3cc59b2f 100644
|
| --- a/net/spdy/spdy_framer.cc
|
| +++ b/net/spdy/spdy_framer.cc
|
| @@ -1183,9 +1183,14 @@ size_t SpdyFramer::ProcessControlFramePayload(const char* data, size_t len) {
|
| // Use frame-specific handlers.
|
| switch (control_frame.type()) {
|
| case PING: {
|
| - SpdyPingControlFrame* ping_frame =
|
| - reinterpret_cast<SpdyPingControlFrame*>(&control_frame);
|
| - visitor_->OnPing(ping_frame->unique_id());
|
| + SpdyFrameReader reader(current_frame_buffer_.get(),
|
| + current_frame_len_);
|
| + reader.Seek(GetControlFrameMinimumSize()); // Skip frame header.
|
| + SpdyPingId id = 0;
|
| + bool successful_read = reader.ReadUInt32(&id);
|
| + DCHECK(successful_read);
|
| + DCHECK(reader.IsDoneReading());
|
| + visitor_->OnPing(id);
|
| }
|
| break;
|
| case WINDOW_UPDATE: {
|
| @@ -1574,9 +1579,9 @@ SpdySerializedFrame* SpdyFramer::SerializeSettings(
|
| return builder.take();
|
| }
|
|
|
| -SpdyPingControlFrame* SpdyFramer::CreatePingFrame(uint32 unique_id) const {
|
| +SpdyFrame* SpdyFramer::CreatePingFrame(uint32 unique_id) const {
|
| SpdyPingIR ping(unique_id);
|
| - return reinterpret_cast<SpdyPingControlFrame*>(SerializePing(ping));
|
| + return SerializePing(ping);
|
| }
|
|
|
| SpdySerializedFrame* SpdyFramer::SerializePing(const SpdyPingIR& ping) const {
|
|
|