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