1 #include "quiche/http2/adapter/event_forwarder.h"
2
3 namespace http2 {
4 namespace adapter {
5
EventForwarder(ForwardPredicate can_forward,spdy::SpdyFramerVisitorInterface & receiver)6 EventForwarder::EventForwarder(ForwardPredicate can_forward,
7 spdy::SpdyFramerVisitorInterface& receiver)
8 : can_forward_(std::move(can_forward)), receiver_(receiver) {}
9
OnError(Http2DecoderAdapter::SpdyFramerError error,std::string detailed_error)10 void EventForwarder::OnError(Http2DecoderAdapter::SpdyFramerError error,
11 std::string detailed_error) {
12 if (can_forward_()) {
13 receiver_.OnError(error, std::move(detailed_error));
14 }
15 }
16
OnCommonHeader(spdy::SpdyStreamId stream_id,size_t length,uint8_t type,uint8_t flags)17 void EventForwarder::OnCommonHeader(spdy::SpdyStreamId stream_id, size_t length,
18 uint8_t type, uint8_t flags) {
19 if (can_forward_()) {
20 receiver_.OnCommonHeader(stream_id, length, type, flags);
21 }
22 }
23
OnDataFrameHeader(spdy::SpdyStreamId stream_id,size_t length,bool fin)24 void EventForwarder::OnDataFrameHeader(spdy::SpdyStreamId stream_id,
25 size_t length, bool fin) {
26 if (can_forward_()) {
27 receiver_.OnDataFrameHeader(stream_id, length, fin);
28 }
29 }
30
OnStreamFrameData(spdy::SpdyStreamId stream_id,const char * data,size_t len)31 void EventForwarder::OnStreamFrameData(spdy::SpdyStreamId stream_id,
32 const char* data, size_t len) {
33 if (can_forward_()) {
34 receiver_.OnStreamFrameData(stream_id, data, len);
35 }
36 }
37
OnStreamEnd(spdy::SpdyStreamId stream_id)38 void EventForwarder::OnStreamEnd(spdy::SpdyStreamId stream_id) {
39 if (can_forward_()) {
40 receiver_.OnStreamEnd(stream_id);
41 }
42 }
43
OnStreamPadLength(spdy::SpdyStreamId stream_id,size_t value)44 void EventForwarder::OnStreamPadLength(spdy::SpdyStreamId stream_id,
45 size_t value) {
46 if (can_forward_()) {
47 receiver_.OnStreamPadLength(stream_id, value);
48 }
49 }
50
OnStreamPadding(spdy::SpdyStreamId stream_id,size_t len)51 void EventForwarder::OnStreamPadding(spdy::SpdyStreamId stream_id, size_t len) {
52 if (can_forward_()) {
53 receiver_.OnStreamPadding(stream_id, len);
54 }
55 }
56
OnHeaderFrameStart(spdy::SpdyStreamId stream_id)57 spdy::SpdyHeadersHandlerInterface* EventForwarder::OnHeaderFrameStart(
58 spdy::SpdyStreamId stream_id) {
59 return receiver_.OnHeaderFrameStart(stream_id);
60 }
61
OnHeaderFrameEnd(spdy::SpdyStreamId stream_id)62 void EventForwarder::OnHeaderFrameEnd(spdy::SpdyStreamId stream_id) {
63 if (can_forward_()) {
64 receiver_.OnHeaderFrameEnd(stream_id);
65 }
66 }
67
OnRstStream(spdy::SpdyStreamId stream_id,spdy::SpdyErrorCode error_code)68 void EventForwarder::OnRstStream(spdy::SpdyStreamId stream_id,
69 spdy::SpdyErrorCode error_code) {
70 if (can_forward_()) {
71 receiver_.OnRstStream(stream_id, error_code);
72 }
73 }
74
OnSettings()75 void EventForwarder::OnSettings() {
76 if (can_forward_()) {
77 receiver_.OnSettings();
78 }
79 }
80
OnSetting(spdy::SpdySettingsId id,uint32_t value)81 void EventForwarder::OnSetting(spdy::SpdySettingsId id, uint32_t value) {
82 if (can_forward_()) {
83 receiver_.OnSetting(id, value);
84 }
85 }
86
OnSettingsEnd()87 void EventForwarder::OnSettingsEnd() {
88 if (can_forward_()) {
89 receiver_.OnSettingsEnd();
90 }
91 }
92
OnSettingsAck()93 void EventForwarder::OnSettingsAck() {
94 if (can_forward_()) {
95 receiver_.OnSettingsAck();
96 }
97 }
98
OnPing(spdy::SpdyPingId unique_id,bool is_ack)99 void EventForwarder::OnPing(spdy::SpdyPingId unique_id, bool is_ack) {
100 if (can_forward_()) {
101 receiver_.OnPing(unique_id, is_ack);
102 }
103 }
104
OnGoAway(spdy::SpdyStreamId last_accepted_stream_id,spdy::SpdyErrorCode error_code)105 void EventForwarder::OnGoAway(spdy::SpdyStreamId last_accepted_stream_id,
106 spdy::SpdyErrorCode error_code) {
107 if (can_forward_()) {
108 receiver_.OnGoAway(last_accepted_stream_id, error_code);
109 }
110 }
111
OnGoAwayFrameData(const char * goaway_data,size_t len)112 bool EventForwarder::OnGoAwayFrameData(const char* goaway_data, size_t len) {
113 if (can_forward_()) {
114 return receiver_.OnGoAwayFrameData(goaway_data, len);
115 }
116 return false;
117 }
118
OnHeaders(spdy::SpdyStreamId stream_id,size_t payload_length,bool has_priority,int weight,spdy::SpdyStreamId parent_stream_id,bool exclusive,bool fin,bool end)119 void EventForwarder::OnHeaders(spdy::SpdyStreamId stream_id,
120 size_t payload_length, bool has_priority,
121 int weight, spdy::SpdyStreamId parent_stream_id,
122 bool exclusive, bool fin, bool end) {
123 if (can_forward_()) {
124 receiver_.OnHeaders(stream_id, payload_length, has_priority, weight,
125 parent_stream_id, exclusive, fin, end);
126 }
127 }
128
OnWindowUpdate(spdy::SpdyStreamId stream_id,int delta_window_size)129 void EventForwarder::OnWindowUpdate(spdy::SpdyStreamId stream_id,
130 int delta_window_size) {
131 if (can_forward_()) {
132 receiver_.OnWindowUpdate(stream_id, delta_window_size);
133 }
134 }
135
OnPushPromise(spdy::SpdyStreamId stream_id,spdy::SpdyStreamId promised_stream_id,bool end)136 void EventForwarder::OnPushPromise(spdy::SpdyStreamId stream_id,
137 spdy::SpdyStreamId promised_stream_id,
138 bool end) {
139 if (can_forward_()) {
140 receiver_.OnPushPromise(stream_id, promised_stream_id, end);
141 }
142 }
143
OnContinuation(spdy::SpdyStreamId stream_id,size_t payload_length,bool end)144 void EventForwarder::OnContinuation(spdy::SpdyStreamId stream_id,
145 size_t payload_length, bool end) {
146 if (can_forward_()) {
147 receiver_.OnContinuation(stream_id, payload_length, end);
148 }
149 }
150
OnAltSvc(spdy::SpdyStreamId stream_id,absl::string_view origin,const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector & altsvc_vector)151 void EventForwarder::OnAltSvc(
152 spdy::SpdyStreamId stream_id, absl::string_view origin,
153 const spdy::SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector) {
154 if (can_forward_()) {
155 receiver_.OnAltSvc(stream_id, origin, altsvc_vector);
156 }
157 }
158
OnPriority(spdy::SpdyStreamId stream_id,spdy::SpdyStreamId parent_stream_id,int weight,bool exclusive)159 void EventForwarder::OnPriority(spdy::SpdyStreamId stream_id,
160 spdy::SpdyStreamId parent_stream_id, int weight,
161 bool exclusive) {
162 if (can_forward_()) {
163 receiver_.OnPriority(stream_id, parent_stream_id, weight, exclusive);
164 }
165 }
166
OnPriorityUpdate(spdy::SpdyStreamId prioritized_stream_id,absl::string_view priority_field_value)167 void EventForwarder::OnPriorityUpdate(spdy::SpdyStreamId prioritized_stream_id,
168 absl::string_view priority_field_value) {
169 if (can_forward_()) {
170 receiver_.OnPriorityUpdate(prioritized_stream_id, priority_field_value);
171 }
172 }
173
OnUnknownFrame(spdy::SpdyStreamId stream_id,uint8_t frame_type)174 bool EventForwarder::OnUnknownFrame(spdy::SpdyStreamId stream_id,
175 uint8_t frame_type) {
176 if (can_forward_()) {
177 return receiver_.OnUnknownFrame(stream_id, frame_type);
178 }
179 return false;
180 }
181
OnUnknownFrameStart(spdy::SpdyStreamId stream_id,size_t length,uint8_t type,uint8_t flags)182 void EventForwarder::OnUnknownFrameStart(spdy::SpdyStreamId stream_id,
183 size_t length, uint8_t type,
184 uint8_t flags) {
185 if (can_forward_()) {
186 receiver_.OnUnknownFrameStart(stream_id, length, type, flags);
187 }
188 }
189
OnUnknownFramePayload(spdy::SpdyStreamId stream_id,absl::string_view payload)190 void EventForwarder::OnUnknownFramePayload(spdy::SpdyStreamId stream_id,
191 absl::string_view payload) {
192 if (can_forward_()) {
193 receiver_.OnUnknownFramePayload(stream_id, payload);
194 }
195 }
196
197 } // namespace adapter
198 } // namespace http2
199