| Index: net/quic/core/quic_framer.cc
|
| diff --git a/net/quic/core/quic_framer.cc b/net/quic/core/quic_framer.cc
|
| index e8b90f945007f865dd09f7ff3ffcf5561959039c..bdc6f8ceca5f47e885c89ecf10ee68d4cec6fe2f 100644
|
| --- a/net/quic/core/quic_framer.cc
|
| +++ b/net/quic/core/quic_framer.cc
|
| @@ -35,6 +35,9 @@ namespace net {
|
|
|
| namespace {
|
|
|
| +#define ENDPOINT \
|
| + (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ")
|
| +
|
| // Mask to select the lowest 48 bits of a packet number.
|
| const QuicPacketNumber k6ByteSequenceNumberMask = UINT64_C(0x0000FFFFFFFFFFFF);
|
| const QuicPacketNumber k4ByteSequenceNumberMask = UINT64_C(0x00000000FFFFFFFF);
|
| @@ -305,19 +308,19 @@ size_t QuicFramer::GetSerializedFrameLength(
|
| if (can_truncate) {
|
| // Truncate the frame so the packet will not exceed kMaxPacketSize.
|
| // Note that we may not use every byte of the writer in this case.
|
| - DVLOG(1) << "Truncating large frame, free bytes: " << free_bytes;
|
| + DVLOG(1) << ENDPOINT
|
| + << "Truncating large frame, free bytes: " << free_bytes;
|
| return free_bytes;
|
| }
|
| return 0;
|
| }
|
|
|
| -QuicFramer::NewAckFrameInfo::NewAckFrameInfo()
|
| +QuicFramer::AckFrameInfo::AckFrameInfo()
|
| : max_block_length(0), first_block_length(0), num_ack_blocks(0) {}
|
|
|
| -QuicFramer::NewAckFrameInfo::NewAckFrameInfo(const NewAckFrameInfo& other) =
|
| - default;
|
| +QuicFramer::AckFrameInfo::AckFrameInfo(const AckFrameInfo& other) = default;
|
|
|
| -QuicFramer::NewAckFrameInfo::~NewAckFrameInfo() {}
|
| +QuicFramer::AckFrameInfo::~AckFrameInfo() {}
|
|
|
| size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header,
|
| const QuicFrames& frames,
|
| @@ -350,8 +353,8 @@ size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header,
|
| }
|
| break;
|
| case ACK_FRAME:
|
| - if (!AppendNewAckFrameAndTypeByte(*frame.ack_frame, &writer)) {
|
| - QUIC_BUG << "AppendNewAckFrameAndTypeByte failed";
|
| + if (!AppendAckFrameAndTypeByte(*frame.ack_frame, &writer)) {
|
| + QUIC_BUG << "AppendAckFrameAndTypeByte failed";
|
| return 0;
|
| }
|
| break;
|
| @@ -502,7 +505,9 @@ bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) {
|
| // First parse the public header.
|
| QuicPacketPublicHeader public_header;
|
| if (!ProcessPublicHeader(&reader, &public_header)) {
|
| - DVLOG(1) << "Unable to process public header.";
|
| + DCHECK_NE("", detailed_error_);
|
| + DVLOG(1) << ENDPOINT
|
| + << "Unable to process public header. Error: " << detailed_error_;
|
| DCHECK_NE("", detailed_error_);
|
| return RaiseError(QUIC_INVALID_PACKET_HEADER);
|
| }
|
| @@ -569,7 +574,10 @@ bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader,
|
| size_t buffer_length) {
|
| QuicPacketHeader header(public_header);
|
| if (!ProcessUnauthenticatedHeader(encrypted_reader, &header)) {
|
| - DVLOG(1) << "Unable to process packet header. Stopping parsing.";
|
| + DCHECK_NE("", detailed_error_);
|
| + DVLOG(1) << ENDPOINT
|
| + << "Unable to process packet header. Stopping parsing. Error: "
|
| + << detailed_error_;
|
| return false;
|
| }
|
|
|
| @@ -600,7 +608,9 @@ bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader,
|
| // Handle the payload.
|
| if (!ProcessFrameData(&reader, header)) {
|
| DCHECK_NE(QUIC_NO_ERROR, error_); // ProcessFrameData sets the error.
|
| - DLOG(WARNING) << "Unable to process frame data.";
|
| + DCHECK_NE("", detailed_error_);
|
| + DLOG(WARNING) << ENDPOINT
|
| + << "Unable to process frame data. Error: " << detailed_error_;
|
| return false;
|
| }
|
|
|
| @@ -645,7 +655,7 @@ bool QuicFramer::ProcessPublicResetPacket(
|
|
|
| bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header,
|
| QuicDataWriter* writer) {
|
| - DVLOG(1) << "Appending header: " << header;
|
| + DVLOG(1) << ENDPOINT << "Appending header: " << header;
|
| uint8_t public_flags = 0;
|
| if (header.public_header.reset_flag) {
|
| public_flags |= PACKET_PUBLIC_FLAGS_RST;
|
| @@ -691,7 +701,7 @@ bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header,
|
| DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
|
| QuicTag tag = QuicVersionToQuicTag(quic_version_);
|
| writer->WriteUInt32(tag);
|
| - DVLOG(1) << "version = " << quic_version_ << ", tag = '"
|
| + DVLOG(1) << ENDPOINT << "version = " << quic_version_ << ", tag = '"
|
| << QuicTagToString(tag) << "'";
|
| }
|
|
|
| @@ -917,9 +927,9 @@ uint8_t QuicFramer::GetSequenceNumberFlags(
|
| }
|
|
|
| // static
|
| -QuicFramer::NewAckFrameInfo QuicFramer::GetNewAckFrameInfo(
|
| +QuicFramer::AckFrameInfo QuicFramer::GetAckFrameInfo(
|
| const QuicAckFrame& frame) {
|
| - NewAckFrameInfo new_ack_info;
|
| + AckFrameInfo new_ack_info;
|
| if (frame.packets.Empty()) {
|
| return new_ack_info;
|
| }
|
| @@ -960,6 +970,7 @@ bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader,
|
| if (header->public_header.multipath_flag &&
|
| !IsValidPath(header->path_id, &base_packet_number)) {
|
| // Stop processing because path is closed.
|
| + set_detailed_error("Path is closed.");
|
| return false;
|
| }
|
|
|
| @@ -976,6 +987,8 @@ bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader,
|
| }
|
|
|
| if (!visitor_->OnUnauthenticatedHeader(*header)) {
|
| + set_detailed_error(
|
| + "Visitor asked to stop processing of unauthenticated header.");
|
| return false;
|
| }
|
| return true;
|
| @@ -1027,7 +1040,7 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| return RaiseError(QUIC_INVALID_STREAM_DATA);
|
| }
|
| if (!visitor_->OnStreamFrame(frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1037,11 +1050,11 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| // Ack Frame
|
| if (frame_type & kQuicFrameTypeAckMask) {
|
| QuicAckFrame frame;
|
| - if (!ProcessNewAckFrame(reader, frame_type, &frame)) {
|
| + if (!ProcessAckFrame(reader, frame_type, &frame)) {
|
| return RaiseError(QUIC_INVALID_ACK_DATA);
|
| }
|
| if (!visitor_->OnAckFrame(frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1051,7 +1064,8 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| // This was a special frame type that did not match any
|
| // of the known ones. Error.
|
| set_detailed_error("Illegal frame type.");
|
| - DLOG(WARNING) << "Illegal frame type: " << static_cast<int>(frame_type);
|
| + DLOG(WARNING) << ENDPOINT
|
| + << "Illegal frame type: " << static_cast<int>(frame_type);
|
| return RaiseError(QUIC_INVALID_FRAME_DATA);
|
| }
|
|
|
| @@ -1085,7 +1099,7 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| }
|
|
|
| if (!visitor_->OnConnectionCloseFrame(frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1098,7 +1112,7 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| return RaiseError(QUIC_INVALID_GOAWAY_DATA);
|
| }
|
| if (!visitor_->OnGoAwayFrame(goaway_frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1111,7 +1125,7 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| return RaiseError(QUIC_INVALID_WINDOW_UPDATE_DATA);
|
| }
|
| if (!visitor_->OnWindowUpdateFrame(window_update_frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1124,7 +1138,7 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| return RaiseError(QUIC_INVALID_BLOCKED_DATA);
|
| }
|
| if (!visitor_->OnBlockedFrame(blocked_frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1137,7 +1151,7 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| return RaiseError(QUIC_INVALID_STOP_WAITING_DATA);
|
| }
|
| if (!visitor_->OnStopWaitingFrame(stop_waiting_frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1147,7 +1161,7 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| // Ping has no payload.
|
| QuicPingFrame ping_frame;
|
| if (!visitor_->OnPingFrame(ping_frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1159,7 +1173,7 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
| return RaiseError(QUIC_INVALID_PATH_CLOSE_DATA);
|
| }
|
| if (!visitor_->OnPathCloseFrame(path_close_frame)) {
|
| - DVLOG(1) << "Visitor asked to stop further processing.";
|
| + DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing.";
|
| // Returning true since there was no parsing error.
|
| return true;
|
| }
|
| @@ -1168,7 +1182,8 @@ bool QuicFramer::ProcessFrameData(QuicDataReader* reader,
|
|
|
| default:
|
| set_detailed_error("Illegal frame type.");
|
| - DLOG(WARNING) << "Illegal frame type: " << static_cast<int>(frame_type);
|
| + DLOG(WARNING) << ENDPOINT
|
| + << "Illegal frame type: " << static_cast<int>(frame_type);
|
| return RaiseError(QUIC_INVALID_FRAME_DATA);
|
| }
|
| }
|
| @@ -1231,9 +1246,9 @@ bool QuicFramer::ProcessStreamFrame(QuicDataReader* reader,
|
| return true;
|
| }
|
|
|
| -bool QuicFramer::ProcessNewAckFrame(QuicDataReader* reader,
|
| - uint8_t frame_type,
|
| - QuicAckFrame* ack_frame) {
|
| +bool QuicFramer::ProcessAckFrame(QuicDataReader* reader,
|
| + uint8_t frame_type,
|
| + QuicAckFrame* ack_frame) {
|
| // Determine the two lengths from the frame type: largest acked length,
|
| // ack block length.
|
| const QuicPacketNumberLength ack_block_length =
|
| @@ -1668,7 +1683,7 @@ bool QuicFramer::DecryptPayload(QuicDataReader* encrypted_reader,
|
| }
|
|
|
| if (!success) {
|
| - DVLOG(1) << "DecryptPacket failed for packet_number:"
|
| + DVLOG(1) << ENDPOINT << "DecryptPacket failed for packet_number:"
|
| << header.packet_number;
|
| return false;
|
| }
|
| @@ -1689,7 +1704,7 @@ size_t QuicFramer::GetAckFrameSize(
|
| QuicPacketNumberLength packet_number_length) {
|
| size_t ack_size = 0;
|
|
|
| - NewAckFrameInfo ack_info = GetNewAckFrameInfo(ack);
|
| + AckFrameInfo ack_info = GetAckFrameInfo(ack);
|
| QuicPacketNumberLength largest_acked_length =
|
| GetMinSequenceNumberLength(ack.largest_observed);
|
| QuicPacketNumberLength ack_block_length =
|
| @@ -1867,9 +1882,9 @@ void QuicFramer::set_version(const QuicVersion version) {
|
| quic_version_ = version;
|
| }
|
|
|
| -bool QuicFramer::AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame,
|
| - QuicDataWriter* writer) {
|
| - const NewAckFrameInfo new_ack_info = GetNewAckFrameInfo(frame);
|
| +bool QuicFramer::AppendAckFrameAndTypeByte(const QuicAckFrame& frame,
|
| + QuicDataWriter* writer) {
|
| + const AckFrameInfo new_ack_info = GetAckFrameInfo(frame);
|
| QuicPacketNumber largest_acked = frame.largest_observed;
|
| QuicPacketNumberLength largest_acked_length =
|
| GetMinSequenceNumberLength(largest_acked);
|
| @@ -2185,7 +2200,7 @@ bool QuicFramer::AppendPathCloseFrame(const QuicPathCloseFrame& frame,
|
| }
|
|
|
| bool QuicFramer::RaiseError(QuicErrorCode error) {
|
| - DVLOG(1) << "Error: " << QuicErrorCodeToString(error)
|
| + DVLOG(1) << ENDPOINT << "Error: " << QuicErrorCodeToString(error)
|
| << " detail: " << detailed_error_;
|
| set_error(error);
|
| visitor_->OnError(this);
|
|
|