| Index: net/quic/quic_multipath_transmissions_map.h
|
| diff --git a/net/quic/quic_multipath_transmissions_map.h b/net/quic/quic_multipath_transmissions_map.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..121e63ee6a510af43074b3ae37035fd0c824e416
|
| --- /dev/null
|
| +++ b/net/quic/quic_multipath_transmissions_map.h
|
| @@ -0,0 +1,65 @@
|
| +// Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// A map manages packets which are transmitted across multiple paths.
|
| +// For example, a packet is originally transmitted on path 1 with packet number
|
| +// 1. Then this packet is retransmitted on path 2 with packet number 1. (1, 1)
|
| +// and (2, 1) are inserted into this map. Suppose (2, 1) is detected lost and
|
| +// gets retransmitted on path 2 with packet 2. (2, 2) will not be inserted
|
| +// because this transmission does not "across" path compared to (2, 1).
|
| +
|
| +#ifndef NET_QUIC_QUIC_MULTIPATH_TRANSMISSIONS_MAP_H_
|
| +#define NET_QUIC_QUIC_MULTIPATH_TRANSMISSIONS_MAP_H_
|
| +
|
| +#include <deque>
|
| +
|
| +#include "base/containers/hash_tables.h"
|
| +#include "base/macros.h"
|
| +#include "net/quic/quic_protocol.h"
|
| +
|
| +namespace net_quic {
|
| +
|
| +typedef std::pair<net::QuicPathId, net::QuicPacketNumber>
|
| + QuicPathIdPacketNumber;
|
| +
|
| +class NET_EXPORT_PRIVATE QuicMultipathTransmissionsMap {
|
| + public:
|
| + typedef std::deque<QuicPathIdPacketNumber> MultipathTransmissionsList;
|
| + typedef base::hash_map<QuicPathIdPacketNumber, MultipathTransmissionsList*>
|
| + MultipathTransmissionsMap;
|
| +
|
| + QuicMultipathTransmissionsMap();
|
| + ~QuicMultipathTransmissionsMap();
|
| +
|
| + // Called when a packet is retransmitted on a different path. Adds both
|
| + // |original_path_id_packet_number| (if not exists) and
|
| + // |path_id_packet_number| to |transmission_map_|.
|
| + void OnPacketRetransmittedOnDifferentPath(
|
| + QuicPathIdPacketNumber original_path_id_packet_number,
|
| + QuicPathIdPacketNumber path_id_packet_number);
|
| +
|
| + // Returns all multipath transmissions list if |path_id_packet_number| has
|
| + // been transmitted across multiple paths, nullptr otherwise.
|
| + const MultipathTransmissionsList* MaybeGetTransmissionsOnOtherPaths(
|
| + QuicPathIdPacketNumber path_id_packet_number) const;
|
| +
|
| + // Called after packet |path_id_packet_number| is received.
|
| + // If |path_id_packet_number| has been transmitted across multiple paths,
|
| + // clears all multipath transmissions list and removes each transmission from
|
| + // |transmission_map_|, does nothing otherwise.
|
| + void OnPacketHandled(QuicPathIdPacketNumber path_id_packet_number);
|
| +
|
| + private:
|
| + // Keys of the map are QuicPathIdPacketNumber, and values are pointers to
|
| + // lists of multipath transmissions of the same packet. For example, if a
|
| + // packet has been transmitted as (1, 1) and (2, 1), two entries are added
|
| + // to this map and both values point to the same list: {(1, 1), (2, 1)}.
|
| + // The MultipathTransmissionsList is owned by the transmission which is
|
| + // received first (on any path).
|
| + MultipathTransmissionsMap transmission_map_;
|
| +};
|
| +
|
| +} // namespace net_quic
|
| +
|
| +#endif // NET_QUIC_QUIC_MULTIPATH_TRANSMISSIONS_MAP_H_
|
|
|