xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/test_tools/simple_data_producer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright (c) 2017 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 "quiche/quic/test_tools/simple_data_producer.h"
6 
7 #include <utility>
8 
9 #include "absl/strings/string_view.h"
10 #include "quiche/quic/core/quic_data_writer.h"
11 #include "quiche/quic/platform/api/quic_bug_tracker.h"
12 #include "quiche/quic/platform/api/quic_flags.h"
13 
14 namespace quic {
15 
16 namespace test {
17 
SimpleDataProducer()18 SimpleDataProducer::SimpleDataProducer() {}
19 
~SimpleDataProducer()20 SimpleDataProducer::~SimpleDataProducer() {}
21 
SaveStreamData(QuicStreamId id,absl::string_view data)22 void SimpleDataProducer::SaveStreamData(QuicStreamId id,
23                                         absl::string_view data) {
24   if (data.empty()) {
25     return;
26   }
27   if (!send_buffer_map_.contains(id)) {
28     send_buffer_map_[id] = std::make_unique<QuicStreamSendBuffer>(&allocator_);
29   }
30   send_buffer_map_[id]->SaveStreamData(data);
31 }
32 
SaveCryptoData(EncryptionLevel level,QuicStreamOffset offset,absl::string_view data)33 void SimpleDataProducer::SaveCryptoData(EncryptionLevel level,
34                                         QuicStreamOffset offset,
35                                         absl::string_view data) {
36   auto key = std::make_pair(level, offset);
37   crypto_buffer_map_[key] = std::string(data);
38 }
39 
WriteStreamData(QuicStreamId id,QuicStreamOffset offset,QuicByteCount data_length,QuicDataWriter * writer)40 WriteStreamDataResult SimpleDataProducer::WriteStreamData(
41     QuicStreamId id, QuicStreamOffset offset, QuicByteCount data_length,
42     QuicDataWriter* writer) {
43   auto iter = send_buffer_map_.find(id);
44   if (iter == send_buffer_map_.end()) {
45     return STREAM_MISSING;
46   }
47   if (iter->second->WriteStreamData(offset, data_length, writer)) {
48     return WRITE_SUCCESS;
49   }
50   return WRITE_FAILED;
51 }
52 
WriteCryptoData(EncryptionLevel level,QuicStreamOffset offset,QuicByteCount data_length,QuicDataWriter * writer)53 bool SimpleDataProducer::WriteCryptoData(EncryptionLevel level,
54                                          QuicStreamOffset offset,
55                                          QuicByteCount data_length,
56                                          QuicDataWriter* writer) {
57   auto it = crypto_buffer_map_.find(std::make_pair(level, offset));
58   if (it == crypto_buffer_map_.end() || it->second.length() < data_length) {
59     return false;
60   }
61   return writer->WriteStringPiece(
62       absl::string_view(it->second.data(), data_length));
63 }
64 
65 }  // namespace test
66 
67 }  // namespace quic
68