| 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/quic/core/quic_packet_creator.h" | 5 #include "net/quic/core/quic_packet_creator.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 if (!HasRoomForStreamFrame(id, offset)) { | 131 if (!HasRoomForStreamFrame(id, offset)) { |
| 132 return false; | 132 return false; |
| 133 } | 133 } |
| 134 CreateStreamFrame(id, iov, iov_offset, offset, fin, frame); | 134 CreateStreamFrame(id, iov, iov_offset, offset, fin, frame); |
| 135 // Explicitly disallow multi-packet CHLOs. | 135 // Explicitly disallow multi-packet CHLOs. |
| 136 if (id == kCryptoStreamId && | 136 if (id == kCryptoStreamId && |
| 137 frame->stream_frame->data_length >= sizeof(kCHLO) && | 137 frame->stream_frame->data_length >= sizeof(kCHLO) && |
| 138 strncmp(frame->stream_frame->data_buffer, | 138 strncmp(frame->stream_frame->data_buffer, |
| 139 reinterpret_cast<const char*>(&kCHLO), sizeof(kCHLO)) == 0) { | 139 reinterpret_cast<const char*>(&kCHLO), sizeof(kCHLO)) == 0) { |
| 140 DCHECK_EQ(static_cast<size_t>(0), iov_offset); | 140 DCHECK_EQ(static_cast<size_t>(0), iov_offset); |
| 141 if (frame->stream_frame->data_length < iov.iov->iov_len) { | 141 if (FLAGS_quic_enforce_single_packet_chlo && |
| 142 frame->stream_frame->data_length < iov.iov->iov_len) { |
| 142 const string error_details = "Client hello won't fit in a single packet."; | 143 const string error_details = "Client hello won't fit in a single packet."; |
| 143 QUIC_BUG << error_details << " Constructed stream frame length: " | 144 QUIC_BUG << error_details << " Constructed stream frame length: " |
| 144 << frame->stream_frame->data_length | 145 << frame->stream_frame->data_length |
| 145 << " CHLO length: " << iov.iov->iov_len; | 146 << " CHLO length: " << iov.iov->iov_len; |
| 146 delegate_->OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, error_details, | 147 delegate_->OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, error_details, |
| 147 ConnectionCloseSource::FROM_SELF); | 148 ConnectionCloseSource::FROM_SELF); |
| 148 delete frame->stream_frame; | 149 delete frame->stream_frame; |
| 149 return false; | 150 return false; |
| 150 } | 151 } |
| 151 } | 152 } |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 if (bit_mask_ == 0) { | 682 if (bit_mask_ == 0) { |
| 682 bit_bucket_ = random_->RandUint64(); | 683 bit_bucket_ = random_->RandUint64(); |
| 683 bit_mask_ = 1; | 684 bit_mask_ = 1; |
| 684 } | 685 } |
| 685 bool result = ((bit_bucket_ & bit_mask_) != 0); | 686 bool result = ((bit_bucket_ & bit_mask_) != 0); |
| 686 bit_mask_ <<= 1; | 687 bit_mask_ <<= 1; |
| 687 return result; | 688 return result; |
| 688 } | 689 } |
| 689 | 690 |
| 690 } // namespace net | 691 } // namespace net |
| OLD | NEW |