| #include "quiche/http2/adapter/nghttp2_data_provider.h" |
| |
| #include <memory> |
| |
| #include "quiche/http2/adapter/http2_visitor_interface.h" |
| #include "quiche/http2/adapter/nghttp2_util.h" |
| |
| namespace http2 { |
| namespace adapter { |
| namespace callbacks { |
| |
| ssize_t VisitorReadCallback(Http2VisitorInterface& visitor, int32_t stream_id, |
| size_t max_length, uint32_t* data_flags) { |
| *data_flags |= NGHTTP2_DATA_FLAG_NO_COPY; |
| auto [payload_length, end_data, end_stream] = |
| visitor.OnReadyToSendDataForStream(stream_id, max_length); |
| if (payload_length == 0 && !end_data) { |
| return NGHTTP2_ERR_DEFERRED; |
| } else if (payload_length == DataFrameSource::kError) { |
| return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; |
| } |
| if (end_data) { |
| *data_flags |= NGHTTP2_DATA_FLAG_EOF; |
| } |
| if (!end_stream) { |
| *data_flags |= NGHTTP2_DATA_FLAG_NO_END_STREAM; |
| } |
| return payload_length; |
| } |
| |
| } // namespace callbacks |
| } // namespace adapter |
| } // namespace http2 |