xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/http2/adapter/recording_http2_visitor.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 #include "quiche/http2/adapter/recording_http2_visitor.h"
2 
3 #include "absl/strings/str_format.h"
4 #include "quiche/http2/adapter/http2_protocol.h"
5 #include "quiche/http2/adapter/http2_util.h"
6 
7 namespace http2 {
8 namespace adapter {
9 namespace test {
10 
OnReadyToSend(absl::string_view serialized)11 int64_t RecordingHttp2Visitor::OnReadyToSend(absl::string_view serialized) {
12   events_.push_back(absl::StrFormat("OnReadyToSend %d", serialized.size()));
13   return serialized.size();
14 }
15 
OnConnectionError(ConnectionError error)16 void RecordingHttp2Visitor::OnConnectionError(ConnectionError error) {
17   events_.push_back(
18       absl::StrFormat("OnConnectionError %s", ConnectionErrorToString(error)));
19 }
20 
OnFrameHeader(Http2StreamId stream_id,size_t length,uint8_t type,uint8_t flags)21 bool RecordingHttp2Visitor::OnFrameHeader(Http2StreamId stream_id,
22                                           size_t length, uint8_t type,
23                                           uint8_t flags) {
24   events_.push_back(absl::StrFormat("OnFrameHeader %d %d %d %d", stream_id,
25                                     length, type, flags));
26   return true;
27 }
28 
OnSettingsStart()29 void RecordingHttp2Visitor::OnSettingsStart() {
30   events_.push_back("OnSettingsStart");
31 }
32 
OnSetting(Http2Setting setting)33 void RecordingHttp2Visitor::OnSetting(Http2Setting setting) {
34   events_.push_back(absl::StrFormat(
35       "OnSetting %s %d", Http2SettingsIdToString(setting.id), setting.value));
36 }
37 
OnSettingsEnd()38 void RecordingHttp2Visitor::OnSettingsEnd() {
39   events_.push_back("OnSettingsEnd");
40 }
41 
OnSettingsAck()42 void RecordingHttp2Visitor::OnSettingsAck() {
43   events_.push_back("OnSettingsAck");
44 }
45 
OnBeginHeadersForStream(Http2StreamId stream_id)46 bool RecordingHttp2Visitor::OnBeginHeadersForStream(Http2StreamId stream_id) {
47   events_.push_back(absl::StrFormat("OnBeginHeadersForStream %d", stream_id));
48   return true;
49 }
50 
OnHeaderForStream(Http2StreamId stream_id,absl::string_view name,absl::string_view value)51 Http2VisitorInterface::OnHeaderResult RecordingHttp2Visitor::OnHeaderForStream(
52     Http2StreamId stream_id, absl::string_view name, absl::string_view value) {
53   events_.push_back(
54       absl::StrFormat("OnHeaderForStream %d %s %s", stream_id, name, value));
55   return HEADER_OK;
56 }
57 
OnEndHeadersForStream(Http2StreamId stream_id)58 bool RecordingHttp2Visitor::OnEndHeadersForStream(Http2StreamId stream_id) {
59   events_.push_back(absl::StrFormat("OnEndHeadersForStream %d", stream_id));
60   return true;
61 }
62 
OnDataPaddingLength(Http2StreamId stream_id,size_t padding_length)63 bool RecordingHttp2Visitor::OnDataPaddingLength(Http2StreamId stream_id,
64                                                 size_t padding_length) {
65   events_.push_back(
66       absl::StrFormat("OnDataPaddingLength %d %d", stream_id, padding_length));
67   return true;
68 }
69 
OnBeginDataForStream(Http2StreamId stream_id,size_t payload_length)70 bool RecordingHttp2Visitor::OnBeginDataForStream(Http2StreamId stream_id,
71                                                  size_t payload_length) {
72   events_.push_back(
73       absl::StrFormat("OnBeginDataForStream %d %d", stream_id, payload_length));
74   return true;
75 }
76 
OnDataForStream(Http2StreamId stream_id,absl::string_view data)77 bool RecordingHttp2Visitor::OnDataForStream(Http2StreamId stream_id,
78                                             absl::string_view data) {
79   events_.push_back(absl::StrFormat("OnDataForStream %d %s", stream_id, data));
80   return true;
81 }
82 
OnEndStream(Http2StreamId stream_id)83 bool RecordingHttp2Visitor::OnEndStream(Http2StreamId stream_id) {
84   events_.push_back(absl::StrFormat("OnEndStream %d", stream_id));
85   return true;
86 }
87 
OnRstStream(Http2StreamId stream_id,Http2ErrorCode error_code)88 void RecordingHttp2Visitor::OnRstStream(Http2StreamId stream_id,
89                                         Http2ErrorCode error_code) {
90   events_.push_back(absl::StrFormat("OnRstStream %d %s", stream_id,
91                                     Http2ErrorCodeToString(error_code)));
92 }
93 
OnCloseStream(Http2StreamId stream_id,Http2ErrorCode error_code)94 bool RecordingHttp2Visitor::OnCloseStream(Http2StreamId stream_id,
95                                           Http2ErrorCode error_code) {
96   events_.push_back(absl::StrFormat("OnCloseStream %d %s", stream_id,
97                                     Http2ErrorCodeToString(error_code)));
98   return true;
99 }
100 
OnPriorityForStream(Http2StreamId stream_id,Http2StreamId parent_stream_id,int weight,bool exclusive)101 void RecordingHttp2Visitor::OnPriorityForStream(Http2StreamId stream_id,
102                                                 Http2StreamId parent_stream_id,
103                                                 int weight, bool exclusive) {
104   events_.push_back(absl::StrFormat("OnPriorityForStream %d %d %d %d",
105                                     stream_id, parent_stream_id, weight,
106                                     exclusive));
107 }
108 
OnPing(Http2PingId ping_id,bool is_ack)109 void RecordingHttp2Visitor::OnPing(Http2PingId ping_id, bool is_ack) {
110   events_.push_back(absl::StrFormat("OnPing %d %d", ping_id, is_ack));
111 }
112 
OnPushPromiseForStream(Http2StreamId stream_id,Http2StreamId promised_stream_id)113 void RecordingHttp2Visitor::OnPushPromiseForStream(
114     Http2StreamId stream_id, Http2StreamId promised_stream_id) {
115   events_.push_back(absl::StrFormat("OnPushPromiseForStream %d %d", stream_id,
116                                     promised_stream_id));
117 }
118 
OnGoAway(Http2StreamId last_accepted_stream_id,Http2ErrorCode error_code,absl::string_view opaque_data)119 bool RecordingHttp2Visitor::OnGoAway(Http2StreamId last_accepted_stream_id,
120                                      Http2ErrorCode error_code,
121                                      absl::string_view opaque_data) {
122   events_.push_back(
123       absl::StrFormat("OnGoAway %d %s %s", last_accepted_stream_id,
124                       Http2ErrorCodeToString(error_code), opaque_data));
125   return true;
126 }
127 
OnWindowUpdate(Http2StreamId stream_id,int window_increment)128 void RecordingHttp2Visitor::OnWindowUpdate(Http2StreamId stream_id,
129                                            int window_increment) {
130   events_.push_back(
131       absl::StrFormat("OnWindowUpdate %d %d", stream_id, window_increment));
132 }
133 
OnBeforeFrameSent(uint8_t frame_type,Http2StreamId stream_id,size_t length,uint8_t flags)134 int RecordingHttp2Visitor::OnBeforeFrameSent(uint8_t frame_type,
135                                              Http2StreamId stream_id,
136                                              size_t length, uint8_t flags) {
137   events_.push_back(absl::StrFormat("OnBeforeFrameSent %d %d %d %d", frame_type,
138                                     stream_id, length, flags));
139   return 0;
140 }
141 
OnFrameSent(uint8_t frame_type,Http2StreamId stream_id,size_t length,uint8_t flags,uint32_t error_code)142 int RecordingHttp2Visitor::OnFrameSent(uint8_t frame_type,
143                                        Http2StreamId stream_id, size_t length,
144                                        uint8_t flags, uint32_t error_code) {
145   events_.push_back(absl::StrFormat("OnFrameSent %d %d %d %d %d", frame_type,
146                                     stream_id, length, flags, error_code));
147   return 0;
148 }
149 
OnInvalidFrame(Http2StreamId stream_id,InvalidFrameError error)150 bool RecordingHttp2Visitor::OnInvalidFrame(Http2StreamId stream_id,
151                                            InvalidFrameError error) {
152   events_.push_back(absl::StrFormat("OnInvalidFrame %d %s", stream_id,
153                                     InvalidFrameErrorToString(error)));
154   return true;
155 }
156 
OnBeginMetadataForStream(Http2StreamId stream_id,size_t payload_length)157 void RecordingHttp2Visitor::OnBeginMetadataForStream(Http2StreamId stream_id,
158                                                      size_t payload_length) {
159   events_.push_back(absl::StrFormat("OnBeginMetadataForStream %d %d", stream_id,
160                                     payload_length));
161 }
162 
OnMetadataForStream(Http2StreamId stream_id,absl::string_view metadata)163 bool RecordingHttp2Visitor::OnMetadataForStream(Http2StreamId stream_id,
164                                                 absl::string_view metadata) {
165   events_.push_back(
166       absl::StrFormat("OnMetadataForStream %d %s", stream_id, metadata));
167   return true;
168 }
169 
OnMetadataEndForStream(Http2StreamId stream_id)170 bool RecordingHttp2Visitor::OnMetadataEndForStream(Http2StreamId stream_id) {
171   events_.push_back(absl::StrFormat("OnMetadataEndForStream %d", stream_id));
172   return true;
173 }
174 
OnErrorDebug(absl::string_view message)175 void RecordingHttp2Visitor::OnErrorDebug(absl::string_view message) {
176   events_.push_back(absl::StrFormat("OnErrorDebug %s", message));
177 }
178 
179 }  // namespace test
180 }  // namespace adapter
181 }  // namespace http2
182