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

Side by Side Diff: net/quic/quic_received_entropy_manager.cc

Issue 20227003: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Land Recent QUIC changes Created 7 years, 5 months 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "net/quic/quic_received_entropy_manager.h"
6
7 #include "base/logging.h"
8 #include "net/base/linked_hash_map.h"
9
10 using std::make_pair;
11 using std::max;
12 using std::min;
13
14 namespace net {
15
16 QuicReceivedEntropyManager::QuicReceivedEntropyManager()
17 : packets_entropy_hash_(0),
18 largest_sequence_number_(0) {}
19
20 QuicReceivedEntropyManager::~QuicReceivedEntropyManager() {}
21
22 QuicPacketSequenceNumber
23 QuicReceivedEntropyManager::LargestSequenceNumber() const {
24 if (packets_entropy_.empty()) {
25 return 0;
26 }
27 return packets_entropy_.rbegin()->first;
28 }
29
30 void QuicReceivedEntropyManager::RecordPacketEntropyHash(
31 QuicPacketSequenceNumber sequence_number,
32 QuicPacketEntropyHash entropy_hash) {
33 if (sequence_number < largest_sequence_number_) {
34 DLOG(INFO) << "Ignoring received packet entropy for sequence_number:"
35 << sequence_number << " less than largest_peer_sequence_number:"
36 << largest_sequence_number_;
37 return;
38 }
39 packets_entropy_.insert(make_pair(sequence_number, entropy_hash));
40 packets_entropy_hash_ ^= entropy_hash;
41 DVLOG(2) << "setting cumulative received entropy hash to: "
42 << static_cast<int>(packets_entropy_hash_)
43 << " updated with sequence number " << sequence_number
44 << " entropy hash: " << static_cast<int>(entropy_hash);
45 }
46
47 QuicPacketEntropyHash QuicReceivedEntropyManager::EntropyHash(
48 QuicPacketSequenceNumber sequence_number) const {
49 DCHECK_LE(sequence_number, LargestSequenceNumber());
50 DCHECK_GE(sequence_number, largest_sequence_number_);
51 if (sequence_number == LargestSequenceNumber()) {
52 return packets_entropy_hash_;
53 }
54
55 ReceivedEntropyMap::const_iterator it =
56 packets_entropy_.upper_bound(sequence_number);
57 // When this map is empty we should only query entropy for
58 // |largest_received_sequence_number_|.
59 LOG_IF(WARNING, it != packets_entropy_.end())
60 << "largest_received: " << LargestSequenceNumber()
61 << " sequence_number: " << sequence_number;
62
63 // TODO(satyamshekhar): Make this O(1).
64 QuicPacketEntropyHash hash = packets_entropy_hash_;
65 for (; it != packets_entropy_.end(); ++it) {
66 hash ^= it->second;
67 }
68 return hash;
69 }
70
71 void QuicReceivedEntropyManager::RecalculateEntropyHash(
72 QuicPacketSequenceNumber peer_least_unacked,
73 QuicPacketEntropyHash entropy_hash) {
74 DLOG_IF(WARNING, peer_least_unacked > LargestSequenceNumber())
75 << "Prematurely updating the entropy manager before registering the "
76 << "entropy of the containing packet creates a temporary inconsistency.";
77 if (peer_least_unacked < largest_sequence_number_) {
78 DLOG(INFO) << "Ignoring received peer_least_unacked:" << peer_least_unacked
79 << " less than largest_peer_sequence_number:"
80 << largest_sequence_number_;
81 return;
82 }
83 largest_sequence_number_ = peer_least_unacked;
84 packets_entropy_hash_ = entropy_hash;
85 ReceivedEntropyMap::iterator it =
86 packets_entropy_.lower_bound(peer_least_unacked);
87 // TODO(satyamshekhar): Make this O(1).
88 for (; it != packets_entropy_.end(); ++it) {
89 packets_entropy_hash_ ^= it->second;
90 }
91 // Discard entropies before least unacked.
92 packets_entropy_.erase(
93 packets_entropy_.begin(),
94 packets_entropy_.lower_bound(
95 min(peer_least_unacked, LargestSequenceNumber())));
96 }
97
98 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_received_entropy_manager.h ('k') | net/quic/quic_received_entropy_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698