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