• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 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/quic_packet_creator_peer.h"
6 
7 #include "quiche/quic/core/frames/quic_frame.h"
8 #include "quiche/quic/core/quic_packet_creator.h"
9 #include "quiche/quic/core/quic_types.h"
10 
11 namespace quic {
12 namespace test {
13 
14 // static
SendVersionInPacket(QuicPacketCreator * creator)15 bool QuicPacketCreatorPeer::SendVersionInPacket(QuicPacketCreator* creator) {
16   return creator->IncludeVersionInHeader();
17 }
18 
19 // static
SetSendVersionInPacket(QuicPacketCreator * creator,bool send_version_in_packet)20 void QuicPacketCreatorPeer::SetSendVersionInPacket(
21     QuicPacketCreator* creator, bool send_version_in_packet) {
22   ParsedQuicVersion version = creator->framer_->version();
23   if (!VersionHasIetfQuicFrames(version.transport_version) &&
24       version.handshake_protocol != PROTOCOL_TLS1_3) {
25     creator->send_version_in_packet_ = send_version_in_packet;
26     return;
27   }
28   if (!send_version_in_packet) {
29     creator->packet_.encryption_level = ENCRYPTION_FORWARD_SECURE;
30     return;
31   }
32   QUICHE_DCHECK(creator->packet_.encryption_level < ENCRYPTION_FORWARD_SECURE);
33 }
34 
35 // static
SetPacketNumberLength(QuicPacketCreator * creator,QuicPacketNumberLength packet_number_length)36 void QuicPacketCreatorPeer::SetPacketNumberLength(
37     QuicPacketCreator* creator, QuicPacketNumberLength packet_number_length) {
38   creator->packet_.packet_number_length = packet_number_length;
39 }
40 
41 // static
GetPacketNumberLength(QuicPacketCreator * creator)42 QuicPacketNumberLength QuicPacketCreatorPeer::GetPacketNumberLength(
43     QuicPacketCreator* creator) {
44   return creator->GetPacketNumberLength();
45 }
46 
47 // static
48 quiche::QuicheVariableLengthIntegerLength
GetRetryTokenLengthLength(QuicPacketCreator * creator)49 QuicPacketCreatorPeer::GetRetryTokenLengthLength(QuicPacketCreator* creator) {
50   return creator->GetRetryTokenLengthLength();
51 }
52 
53 // static
54 quiche::QuicheVariableLengthIntegerLength
GetLengthLength(QuicPacketCreator * creator)55 QuicPacketCreatorPeer::GetLengthLength(QuicPacketCreator* creator) {
56   return creator->GetLengthLength();
57 }
58 
SetPacketNumber(QuicPacketCreator * creator,uint64_t s)59 void QuicPacketCreatorPeer::SetPacketNumber(QuicPacketCreator* creator,
60                                             uint64_t s) {
61   QUICHE_DCHECK_NE(0u, s);
62   creator->packet_.packet_number = QuicPacketNumber(s);
63 }
64 
SetPacketNumber(QuicPacketCreator * creator,QuicPacketNumber num)65 void QuicPacketCreatorPeer::SetPacketNumber(QuicPacketCreator* creator,
66                                             QuicPacketNumber num) {
67   creator->packet_.packet_number = num;
68 }
69 
70 // static
ClearPacketNumber(QuicPacketCreator * creator)71 void QuicPacketCreatorPeer::ClearPacketNumber(QuicPacketCreator* creator) {
72   creator->packet_.packet_number.Clear();
73 }
74 
75 // static
FillPacketHeader(QuicPacketCreator * creator,QuicPacketHeader * header)76 void QuicPacketCreatorPeer::FillPacketHeader(QuicPacketCreator* creator,
77                                              QuicPacketHeader* header) {
78   creator->FillPacketHeader(header);
79 }
80 
81 // static
CreateStreamFrame(QuicPacketCreator * creator,QuicStreamId id,size_t data_length,QuicStreamOffset offset,bool fin,QuicFrame * frame)82 void QuicPacketCreatorPeer::CreateStreamFrame(QuicPacketCreator* creator,
83                                               QuicStreamId id,
84                                               size_t data_length,
85                                               QuicStreamOffset offset, bool fin,
86                                               QuicFrame* frame) {
87   creator->CreateStreamFrame(id, data_length, offset, fin, frame);
88 }
89 
90 // static
CreateCryptoFrame(QuicPacketCreator * creator,EncryptionLevel level,size_t write_length,QuicStreamOffset offset,QuicFrame * frame)91 bool QuicPacketCreatorPeer::CreateCryptoFrame(QuicPacketCreator* creator,
92                                               EncryptionLevel level,
93                                               size_t write_length,
94                                               QuicStreamOffset offset,
95                                               QuicFrame* frame) {
96   return creator->CreateCryptoFrame(level, write_length, offset, frame);
97 }
98 
99 // static
SerializeAllFrames(QuicPacketCreator * creator,const QuicFrames & frames,char * buffer,size_t buffer_len)100 SerializedPacket QuicPacketCreatorPeer::SerializeAllFrames(
101     QuicPacketCreator* creator, const QuicFrames& frames, char* buffer,
102     size_t buffer_len) {
103   QUICHE_DCHECK(creator->queued_frames_.empty());
104   QUICHE_DCHECK(!frames.empty());
105   for (const QuicFrame& frame : frames) {
106     bool success = creator->AddFrame(frame, NOT_RETRANSMISSION);
107     QUICHE_DCHECK(success);
108   }
109   const bool success =
110       creator->SerializePacket(QuicOwnedPacketBuffer(buffer, nullptr),
111                                buffer_len, /*allow_padding=*/true);
112   QUICHE_DCHECK(success);
113   SerializedPacket packet = std::move(creator->packet_);
114   // The caller takes ownership of the QuicEncryptedPacket.
115   creator->packet_.encrypted_buffer = nullptr;
116   return packet;
117 }
118 
119 // static
120 std::unique_ptr<SerializedPacket>
SerializeConnectivityProbingPacket(QuicPacketCreator * creator)121 QuicPacketCreatorPeer::SerializeConnectivityProbingPacket(
122     QuicPacketCreator* creator) {
123   return creator->SerializeConnectivityProbingPacket();
124 }
125 
126 // static
127 std::unique_ptr<SerializedPacket>
SerializePathChallengeConnectivityProbingPacket(QuicPacketCreator * creator,const QuicPathFrameBuffer & payload)128 QuicPacketCreatorPeer::SerializePathChallengeConnectivityProbingPacket(
129     QuicPacketCreator* creator, const QuicPathFrameBuffer& payload) {
130   return creator->SerializePathChallengeConnectivityProbingPacket(payload);
131 }
132 
133 // static
GetEncryptionLevel(QuicPacketCreator * creator)134 EncryptionLevel QuicPacketCreatorPeer::GetEncryptionLevel(
135     QuicPacketCreator* creator) {
136   return creator->packet_.encryption_level;
137 }
138 
139 // static
framer(QuicPacketCreator * creator)140 QuicFramer* QuicPacketCreatorPeer::framer(QuicPacketCreator* creator) {
141   return creator->framer_;
142 }
143 
144 // static
GetRetryToken(QuicPacketCreator * creator)145 std::string QuicPacketCreatorPeer::GetRetryToken(QuicPacketCreator* creator) {
146   return creator->retry_token_;
147 }
148 
149 // static
QueuedFrames(QuicPacketCreator * creator)150 QuicFrames& QuicPacketCreatorPeer::QueuedFrames(QuicPacketCreator* creator) {
151   return creator->queued_frames_;
152 }
153 
154 // static
SetRandom(QuicPacketCreator * creator,QuicRandom * random)155 void QuicPacketCreatorPeer::SetRandom(QuicPacketCreator* creator,
156                                       QuicRandom* random) {
157   creator->random_ = random;
158 }
159 
160 }  // namespace test
161 }  // namespace quic
162