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_framer_peer.h"
6
7 #include "quiche/quic/core/quic_framer.h"
8 #include "quiche/quic/core/quic_packets.h"
9
10 namespace quic {
11 namespace test {
12
13 // static
CalculatePacketNumberFromWire(QuicFramer * framer,QuicPacketNumberLength packet_number_length,QuicPacketNumber last_packet_number,uint64_t packet_number)14 uint64_t QuicFramerPeer::CalculatePacketNumberFromWire(
15 QuicFramer* framer, QuicPacketNumberLength packet_number_length,
16 QuicPacketNumber last_packet_number, uint64_t packet_number) {
17 return framer->CalculatePacketNumberFromWire(
18 packet_number_length, last_packet_number, packet_number);
19 }
20
21 // static
SetLastSerializedServerConnectionId(QuicFramer * framer,QuicConnectionId server_connection_id)22 void QuicFramerPeer::SetLastSerializedServerConnectionId(
23 QuicFramer* framer, QuicConnectionId server_connection_id) {
24 framer->last_serialized_server_connection_id_ = server_connection_id;
25 }
26
27 // static
SetLastSerializedClientConnectionId(QuicFramer * framer,QuicConnectionId client_connection_id)28 void QuicFramerPeer::SetLastSerializedClientConnectionId(
29 QuicFramer* framer, QuicConnectionId client_connection_id) {
30 framer->last_serialized_client_connection_id_ = client_connection_id;
31 }
32
33 // static
SetLastWrittenPacketNumberLength(QuicFramer * framer,size_t packet_number_length)34 void QuicFramerPeer::SetLastWrittenPacketNumberLength(
35 QuicFramer* framer, size_t packet_number_length) {
36 framer->last_written_packet_number_length_ = packet_number_length;
37 }
38
39 // static
SetLargestPacketNumber(QuicFramer * framer,QuicPacketNumber packet_number)40 void QuicFramerPeer::SetLargestPacketNumber(QuicFramer* framer,
41 QuicPacketNumber packet_number) {
42 framer->largest_packet_number_ = packet_number;
43 }
44
45 // static
SetPerspective(QuicFramer * framer,Perspective perspective)46 void QuicFramerPeer::SetPerspective(QuicFramer* framer,
47 Perspective perspective) {
48 framer->perspective_ = perspective;
49 framer->infer_packet_header_type_from_version_ =
50 perspective == Perspective::IS_CLIENT;
51 }
52
53 // static
SwapCrypters(QuicFramer * framer1,QuicFramer * framer2)54 void QuicFramerPeer::SwapCrypters(QuicFramer* framer1, QuicFramer* framer2) {
55 for (int i = ENCRYPTION_INITIAL; i < NUM_ENCRYPTION_LEVELS; i++) {
56 framer1->encrypter_[i].swap(framer2->encrypter_[i]);
57 framer1->decrypter_[i].swap(framer2->decrypter_[i]);
58 }
59
60 EncryptionLevel framer2_level = framer2->decrypter_level_;
61 framer2->decrypter_level_ = framer1->decrypter_level_;
62 framer1->decrypter_level_ = framer2_level;
63 framer2_level = framer2->alternative_decrypter_level_;
64 framer2->alternative_decrypter_level_ = framer1->alternative_decrypter_level_;
65 framer1->alternative_decrypter_level_ = framer2_level;
66
67 const bool framer2_latch = framer2->alternative_decrypter_latch_;
68 framer2->alternative_decrypter_latch_ = framer1->alternative_decrypter_latch_;
69 framer1->alternative_decrypter_latch_ = framer2_latch;
70 }
71
72 // static
GetEncrypter(QuicFramer * framer,EncryptionLevel level)73 QuicEncrypter* QuicFramerPeer::GetEncrypter(QuicFramer* framer,
74 EncryptionLevel level) {
75 return framer->encrypter_[level].get();
76 }
77
78 // static
GetDecrypter(QuicFramer * framer,EncryptionLevel level)79 QuicDecrypter* QuicFramerPeer::GetDecrypter(QuicFramer* framer,
80 EncryptionLevel level) {
81 return framer->decrypter_[level].get();
82 }
83
84 // static
SetFirstSendingPacketNumber(QuicFramer * framer,uint64_t packet_number)85 void QuicFramerPeer::SetFirstSendingPacketNumber(QuicFramer* framer,
86 uint64_t packet_number) {
87 *const_cast<QuicPacketNumber*>(&framer->first_sending_packet_number_) =
88 QuicPacketNumber(packet_number);
89 }
90
91 // static
SetExpectedServerConnectionIDLength(QuicFramer * framer,uint8_t expected_server_connection_id_length)92 void QuicFramerPeer::SetExpectedServerConnectionIDLength(
93 QuicFramer* framer, uint8_t expected_server_connection_id_length) {
94 *const_cast<uint8_t*>(&framer->expected_server_connection_id_length_) =
95 expected_server_connection_id_length;
96 }
97
98 // static
GetLargestDecryptedPacketNumber(QuicFramer * framer,PacketNumberSpace packet_number_space)99 QuicPacketNumber QuicFramerPeer::GetLargestDecryptedPacketNumber(
100 QuicFramer* framer, PacketNumberSpace packet_number_space) {
101 return framer->largest_decrypted_packet_numbers_[packet_number_space];
102 }
103
104 // static
ProcessAndValidateIetfConnectionIdLength(QuicDataReader * reader,ParsedQuicVersion version,Perspective perspective,bool should_update_expected_server_connection_id_length,uint8_t * expected_server_connection_id_length,uint8_t * destination_connection_id_length,uint8_t * source_connection_id_length,std::string * detailed_error)105 bool QuicFramerPeer::ProcessAndValidateIetfConnectionIdLength(
106 QuicDataReader* reader, ParsedQuicVersion version, Perspective perspective,
107 bool should_update_expected_server_connection_id_length,
108 uint8_t* expected_server_connection_id_length,
109 uint8_t* destination_connection_id_length,
110 uint8_t* source_connection_id_length, std::string* detailed_error) {
111 return QuicFramer::ProcessAndValidateIetfConnectionIdLength(
112 reader, version, perspective,
113 should_update_expected_server_connection_id_length,
114 expected_server_connection_id_length, destination_connection_id_length,
115 source_connection_id_length, detailed_error);
116 }
117
118 } // namespace test
119 } // namespace quic
120