Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: net/quic/crypto/crypto_framer.cc

Issue 1535363003: Switch to standard integer types in net/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: stddef Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/crypto/crypto_framer.h ('k') | net/quic/crypto/crypto_framer_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/crypto/crypto_framer.h" 5 #include "net/quic/crypto/crypto_framer.h"
6 6
7 #include "net/quic/crypto/crypto_protocol.h" 7 #include "net/quic/crypto/crypto_protocol.h"
8 #include "net/quic/quic_data_reader.h" 8 #include "net/quic/quic_data_reader.h"
9 #include "net/quic/quic_data_writer.h" 9 #include "net/quic/quic_data_writer.h"
10 10
11 using base::StringPiece; 11 using base::StringPiece;
12 using std::pair; 12 using std::pair;
13 using std::vector; 13 using std::vector;
14 14
15 namespace net { 15 namespace net {
16 16
17 namespace { 17 namespace {
18 18
19 const size_t kQuicTagSize = sizeof(uint32); 19 const size_t kQuicTagSize = sizeof(uint32_t);
20 const size_t kCryptoEndOffsetSize = sizeof(uint32); 20 const size_t kCryptoEndOffsetSize = sizeof(uint32_t);
21 const size_t kNumEntriesSize = sizeof(uint16); 21 const size_t kNumEntriesSize = sizeof(uint16_t);
22 22
23 // OneShotVisitor is a framer visitor that records a single handshake message. 23 // OneShotVisitor is a framer visitor that records a single handshake message.
24 class OneShotVisitor : public CryptoFramerVisitorInterface { 24 class OneShotVisitor : public CryptoFramerVisitorInterface {
25 public: 25 public:
26 OneShotVisitor() : error_(false) {} 26 OneShotVisitor() : error_(false) {}
27 27
28 void OnError(CryptoFramer* framer) override { error_ = true; } 28 void OnError(CryptoFramer* framer) override { error_ = true; }
29 29
30 void OnHandshakeMessage(const CryptoHandshakeMessage& message) override { 30 void OnHandshakeMessage(const CryptoHandshakeMessage& message) override {
31 out_.reset(new CryptoHandshakeMessage(message)); 31 out_.reset(new CryptoHandshakeMessage(message));
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 if (num_entries > kMaxEntries) { 102 if (num_entries > kMaxEntries) {
103 return nullptr; 103 return nullptr;
104 } 104 }
105 105
106 scoped_ptr<char[]> buffer(new char[len]); 106 scoped_ptr<char[]> buffer(new char[len]);
107 QuicDataWriter writer(len, buffer.get()); 107 QuicDataWriter writer(len, buffer.get());
108 if (!writer.WriteUInt32(message.tag())) { 108 if (!writer.WriteUInt32(message.tag())) {
109 DCHECK(false) << "Failed to write message tag."; 109 DCHECK(false) << "Failed to write message tag.";
110 return nullptr; 110 return nullptr;
111 } 111 }
112 if (!writer.WriteUInt16(static_cast<uint16>(num_entries))) { 112 if (!writer.WriteUInt16(static_cast<uint16_t>(num_entries))) {
113 DCHECK(false) << "Failed to write size."; 113 DCHECK(false) << "Failed to write size.";
114 return nullptr; 114 return nullptr;
115 } 115 }
116 if (!writer.WriteUInt16(0)) { 116 if (!writer.WriteUInt16(0)) {
117 DCHECK(false) << "Failed to write padding."; 117 DCHECK(false) << "Failed to write padding.";
118 return nullptr; 118 return nullptr;
119 } 119 }
120 120
121 uint32 end_offset = 0; 121 uint32_t end_offset = 0;
122 // Tags and offsets 122 // Tags and offsets
123 for (QuicTagValueMap::const_iterator it = message.tag_value_map().begin(); 123 for (QuicTagValueMap::const_iterator it = message.tag_value_map().begin();
124 it != message.tag_value_map().end(); ++it) { 124 it != message.tag_value_map().end(); ++it) {
125 if (it->first == kPAD && need_pad_tag) { 125 if (it->first == kPAD && need_pad_tag) {
126 // Existing PAD tags are only checked when padding needs to be added 126 // Existing PAD tags are only checked when padding needs to be added
127 // because parts of the code may need to reserialize received messages 127 // because parts of the code may need to reserialize received messages
128 // and those messages may, legitimately include padding. 128 // and those messages may, legitimately include padding.
129 DCHECK(false) << "Message needed padding but already contained a PAD tag"; 129 DCHECK(false) << "Message needed padding but already contained a PAD tag";
130 return nullptr; 130 return nullptr;
131 } 131 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 switch (state_) { 196 switch (state_) {
197 case STATE_READING_TAG: 197 case STATE_READING_TAG:
198 if (reader.BytesRemaining() < kQuicTagSize) { 198 if (reader.BytesRemaining() < kQuicTagSize) {
199 break; 199 break;
200 } 200 }
201 QuicTag message_tag; 201 QuicTag message_tag;
202 reader.ReadUInt32(&message_tag); 202 reader.ReadUInt32(&message_tag);
203 message_.set_tag(message_tag); 203 message_.set_tag(message_tag);
204 state_ = STATE_READING_NUM_ENTRIES; 204 state_ = STATE_READING_NUM_ENTRIES;
205 case STATE_READING_NUM_ENTRIES: 205 case STATE_READING_NUM_ENTRIES:
206 if (reader.BytesRemaining() < kNumEntriesSize + sizeof(uint16)) { 206 if (reader.BytesRemaining() < kNumEntriesSize + sizeof(uint16_t)) {
207 break; 207 break;
208 } 208 }
209 reader.ReadUInt16(&num_entries_); 209 reader.ReadUInt16(&num_entries_);
210 if (num_entries_ > kMaxEntries) { 210 if (num_entries_ > kMaxEntries) {
211 return QUIC_CRYPTO_TOO_MANY_ENTRIES; 211 return QUIC_CRYPTO_TOO_MANY_ENTRIES;
212 } 212 }
213 uint16 padding; 213 uint16_t padding;
214 reader.ReadUInt16(&padding); 214 reader.ReadUInt16(&padding);
215 215
216 tags_and_lengths_.reserve(num_entries_); 216 tags_and_lengths_.reserve(num_entries_);
217 state_ = STATE_READING_TAGS_AND_LENGTHS; 217 state_ = STATE_READING_TAGS_AND_LENGTHS;
218 values_len_ = 0; 218 values_len_ = 0;
219 case STATE_READING_TAGS_AND_LENGTHS: { 219 case STATE_READING_TAGS_AND_LENGTHS: {
220 if (reader.BytesRemaining() < 220 if (reader.BytesRemaining() <
221 num_entries_ * (kQuicTagSize + kCryptoEndOffsetSize)) { 221 num_entries_ * (kQuicTagSize + kCryptoEndOffsetSize)) {
222 break; 222 break;
223 } 223 }
224 224
225 uint32 last_end_offset = 0; 225 uint32_t last_end_offset = 0;
226 for (unsigned i = 0; i < num_entries_; ++i) { 226 for (unsigned i = 0; i < num_entries_; ++i) {
227 QuicTag tag; 227 QuicTag tag;
228 reader.ReadUInt32(&tag); 228 reader.ReadUInt32(&tag);
229 if (i > 0 && tag <= tags_and_lengths_[i - 1].first) { 229 if (i > 0 && tag <= tags_and_lengths_[i - 1].first) {
230 if (tag == tags_and_lengths_[i - 1].first) { 230 if (tag == tags_and_lengths_[i - 1].first) {
231 return QUIC_CRYPTO_DUPLICATE_TAG; 231 return QUIC_CRYPTO_DUPLICATE_TAG;
232 } 232 }
233 return QUIC_CRYPTO_TAGS_OUT_OF_ORDER; 233 return QUIC_CRYPTO_TAGS_OUT_OF_ORDER;
234 } 234 }
235 235
236 uint32 end_offset; 236 uint32_t end_offset;
237 reader.ReadUInt32(&end_offset); 237 reader.ReadUInt32(&end_offset);
238 238
239 if (end_offset < last_end_offset) { 239 if (end_offset < last_end_offset) {
240 return QUIC_CRYPTO_TAGS_OUT_OF_ORDER; 240 return QUIC_CRYPTO_TAGS_OUT_OF_ORDER;
241 } 241 }
242 tags_and_lengths_.push_back(std::make_pair( 242 tags_and_lengths_.push_back(std::make_pair(
243 tag, static_cast<size_t>(end_offset - last_end_offset))); 243 tag, static_cast<size_t>(end_offset - last_end_offset)));
244 last_end_offset = end_offset; 244 last_end_offset = end_offset;
245 } 245 }
246 values_len_ = last_end_offset; 246 values_len_ = last_end_offset;
(...skipping 14 matching lines...) Expand all
261 break; 261 break;
262 } 262 }
263 // Save any remaining data. 263 // Save any remaining data.
264 buffer_ = reader.PeekRemainingPayload().as_string(); 264 buffer_ = reader.PeekRemainingPayload().as_string();
265 return QUIC_NO_ERROR; 265 return QUIC_NO_ERROR;
266 } 266 }
267 267
268 // static 268 // static
269 bool CryptoFramer::WritePadTag(QuicDataWriter* writer, 269 bool CryptoFramer::WritePadTag(QuicDataWriter* writer,
270 size_t pad_length, 270 size_t pad_length,
271 uint32* end_offset) { 271 uint32_t* end_offset) {
272 if (!writer->WriteUInt32(kPAD)) { 272 if (!writer->WriteUInt32(kPAD)) {
273 DCHECK(false) << "Failed to write tag."; 273 DCHECK(false) << "Failed to write tag.";
274 return false; 274 return false;
275 } 275 }
276 *end_offset += pad_length; 276 *end_offset += pad_length;
277 if (!writer->WriteUInt32(*end_offset)) { 277 if (!writer->WriteUInt32(*end_offset)) {
278 DCHECK(false) << "Failed to write end offset."; 278 DCHECK(false) << "Failed to write end offset.";
279 return false; 279 return false;
280 } 280 }
281 return true; 281 return true;
282 } 282 }
283 283
284 } // namespace net 284 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/crypto/crypto_framer.h ('k') | net/quic/crypto/crypto_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698