OLD | NEW |
| (Empty) |
1 // Copyright (c) 2015 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_multipath_transmissions_map.h" | |
6 | |
7 namespace net { | |
8 | |
9 QuicMultipathTransmissionsMap::QuicMultipathTransmissionsMap() {} | |
10 | |
11 QuicMultipathTransmissionsMap::~QuicMultipathTransmissionsMap() { | |
12 for (std::pair<QuicPathIdPacketNumber, MultipathTransmissionsList*> | |
13 packet_transmissions : transmission_map_) { | |
14 packet_transmissions.second->pop_front(); | |
15 if (packet_transmissions.second->empty()) { | |
16 delete packet_transmissions.second; | |
17 } | |
18 } | |
19 } | |
20 | |
21 void QuicMultipathTransmissionsMap::OnPacketRetransmittedOnDifferentPath( | |
22 QuicPathIdPacketNumber original_path_id_packet_number, | |
23 QuicPathIdPacketNumber path_id_packet_number) { | |
24 MultipathTransmissionsList* across_paths_transmission_list = nullptr; | |
25 MultipathTransmissionsMap::iterator it = | |
26 transmission_map_.find(original_path_id_packet_number); | |
27 if (it != transmission_map_.end()) { | |
28 across_paths_transmission_list = it->second; | |
29 } else { | |
30 across_paths_transmission_list = new MultipathTransmissionsList(); | |
31 across_paths_transmission_list->push_back(original_path_id_packet_number); | |
32 transmission_map_[original_path_id_packet_number] = | |
33 across_paths_transmission_list; | |
34 } | |
35 | |
36 across_paths_transmission_list->push_back(path_id_packet_number); | |
37 transmission_map_[path_id_packet_number] = across_paths_transmission_list; | |
38 } | |
39 | |
40 const QuicMultipathTransmissionsMap::MultipathTransmissionsList* | |
41 QuicMultipathTransmissionsMap::MaybeGetTransmissionsOnOtherPaths( | |
42 QuicPathIdPacketNumber path_id_packet_number) const { | |
43 MultipathTransmissionsMap::const_iterator it = | |
44 transmission_map_.find(path_id_packet_number); | |
45 if (it == transmission_map_.end()) { | |
46 return nullptr; | |
47 } | |
48 | |
49 return it->second; | |
50 } | |
51 | |
52 void QuicMultipathTransmissionsMap::OnPacketHandled( | |
53 QuicPathIdPacketNumber path_id_packet_number) { | |
54 MultipathTransmissionsMap::iterator it = | |
55 transmission_map_.find(path_id_packet_number); | |
56 if (it == transmission_map_.end()) { | |
57 return; | |
58 } | |
59 | |
60 MultipathTransmissionsList* transmission_list = it->second; | |
61 MultipathTransmissionsList::iterator transmission_it; | |
62 // Remove all across paths transmissions of this packet from the map. | |
63 for (QuicPathIdPacketNumber path_id_packet_number : *transmission_list) { | |
64 transmission_map_.erase(path_id_packet_number); | |
65 } | |
66 // Remove the multipath transmissions list. | |
67 delete transmission_list; | |
68 } | |
69 | |
70 } // namespace net | |
OLD | NEW |