@@ -209,24 +209,25 @@ class Http3ApplicationImpl final : public Session::Application {
209209 started_ = true ;
210210 Debug (&session (), " Starting HTTP/3 application." );
211211
212- auto params = ngtcp2_conn_get_remote_transport_params ( session ());
213- if (params == nullptr ) [[unlikely]] {
212+ const auto params = session (). remote_transport_params ( );
213+ if (! params) [[unlikely]] {
214214 // The params are not available yet. Cannot start.
215215 Debug (&session (),
216216 " Cannot start HTTP/3 application yet. No remote transport params" );
217217 return false ;
218218 }
219219
220- if (params-> initial_max_streams_uni < 3 ) {
220+ if (params. initial_max_streams_uni () < 3 ) {
221221 // HTTP3 requires 3 unidirectional control streams to be opened in each
222222 // direction in additional to the bidirectional streams that are used to
223223 // actually carry request and response payload back and forth.
224224 // See:
225225 // https://nghttp2.org/nghttp3/programmers-guide.html#binding-control-streams
226226 Debug (&session (),
227227 " Cannot start HTTP/3 application. Initial max "
228- " unidirectional streams [%zu] is too low. Must be at least 3" ,
229- params->initial_max_streams_uni );
228+ " unidirectional streams [%" PRIu64
229+ " ] is too low. Must be at least 3" ,
230+ params.initial_max_streams_uni ());
230231 return false ;
231232 }
232233
@@ -235,17 +236,14 @@ class Http3ApplicationImpl final : public Session::Application {
235236 // of requests that the client can actually created.
236237 if (session ().is_server ()) {
237238 nghttp3_conn_set_max_client_streams_bidi (
238- *this , params-> initial_max_streams_bidi );
239+ *this , params. initial_max_streams_bidi () );
239240 }
240241
241242 Debug (&session (), " Creating and binding HTTP/3 control streams" );
242243 bool ret =
243- ngtcp2_conn_open_uni_stream (session (), &control_stream_id_, nullptr ) ==
244- 0 &&
245- ngtcp2_conn_open_uni_stream (
246- session (), &qpack_enc_stream_id_, nullptr ) == 0 &&
247- ngtcp2_conn_open_uni_stream (
248- session (), &qpack_dec_stream_id_, nullptr ) == 0 &&
244+ session ().OpenUni (&control_stream_id_) &&
245+ session ().OpenUni (&qpack_enc_stream_id_) &&
246+ session ().OpenUni (&qpack_dec_stream_id_) &&
249247 nghttp3_conn_bind_control_stream (*this , control_stream_id_) == 0 &&
250248 nghttp3_conn_bind_qpack_streams (
251249 *this , qpack_enc_stream_id_, qpack_dec_stream_id_) == 0 ;
@@ -306,8 +304,7 @@ class Http3ApplicationImpl final : public Session::Application {
306304 Debug (&session (),
307305 " Extending stream and connection offset by %zd bytes" ,
308306 nread);
309- session ().ExtendStreamOffset (id, nread);
310- session ().ExtendOffset (nread);
307+ session ().Consume (id, nread);
311308 }
312309
313310 // If this data arrived as 0-RTT, mark the stream. We set it after
@@ -365,24 +362,11 @@ class Http3ApplicationImpl final : public Session::Application {
365362 case EndpointLabel::LOCAL :
366363 return ;
367364 case EndpointLabel::REMOTE : {
368- switch (direction) {
369- case Direction::BIDIRECTIONAL : {
370- Debug (&session (),
371- " HTTP/3 application extending max bidi streams by %" PRIu64,
372- max_streams);
373- ngtcp2_conn_extend_max_streams_bidi (
374- session (), static_cast <size_t >(max_streams));
375- break ;
376- }
377- case Direction::UNIDIRECTIONAL : {
378- Debug (&session (),
379- " HTTP/3 application extending max uni streams by %" PRIu64,
380- max_streams);
381- ngtcp2_conn_extend_max_streams_uni (
382- session (), static_cast <size_t >(max_streams));
383- break ;
384- }
385- }
365+ Debug (&session (),
366+ " HTTP/3 application extending max %s streams by %" PRIu64,
367+ direction == Direction::BIDIRECTIONAL ? " bidi" : " uni" ,
368+ max_streams);
369+ session ().ExtendMaxStreams (direction, max_streams);
386370 }
387371 }
388372 }
@@ -530,8 +514,7 @@ class Http3ApplicationImpl final : public Session::Application {
530514 return ;
531515 }
532516
533- session ().SetLastError (
534- QuicError::ForApplication (nghttp3_err_infer_quic_app_error_code (rv)));
517+ session ().SetApplicationError (nghttp3_err_infer_quic_app_error_code (rv));
535518 session ().Close ();
536519 }
537520
@@ -548,8 +531,7 @@ class Http3ApplicationImpl final : public Session::Application {
548531 return ;
549532 }
550533
551- session ().SetLastError (
552- QuicError::ForApplication (nghttp3_err_infer_quic_app_error_code (rv)));
534+ session ().SetApplicationError (nghttp3_err_infer_quic_app_error_code (rv));
553535 session ().Close ();
554536 }
555537
@@ -688,12 +670,22 @@ class Http3ApplicationImpl final : public Session::Application {
688670 }
689671
690672 int GetStreamData (StreamData* data) override {
673+ static_assert (
674+ sizeof (ngtcp2_vec) == sizeof (nghttp3_vec) &&
675+ alignof (ngtcp2_vec) == alignof (nghttp3_vec) &&
676+ offsetof (ngtcp2_vec, base) == offsetof (nghttp3_vec, base) &&
677+ offsetof (ngtcp2_vec, len) == offsetof (nghttp3_vec, len),
678+ " ngtcp2_vec and nghttp3_vec must have identical layout" );
691679 data->count = kMaxVectorCount ;
692680 ssize_t ret = 0 ;
693681 Debug (&session (), " HTTP/3 application getting stream data" );
694682 if (conn_ && session ().max_data_left ()) {
695- ret = nghttp3_conn_writev_stream (
696- *this , &data->id , &data->fin , *data, data->count );
683+ ret =
684+ nghttp3_conn_writev_stream (*this ,
685+ &data->id ,
686+ &data->fin ,
687+ reinterpret_cast <nghttp3_vec*>(data->data ),
688+ data->count );
697689 // A negative return value indicates an error.
698690 if (ret < 0 ) {
699691 return static_cast <int >(ret);
@@ -720,8 +712,7 @@ class Http3ApplicationImpl final : public Session::Application {
720712 // nghttp3 tracks its own offset via add_write_offset.
721713 int err = nghttp3_conn_add_write_offset (*this , data->id , datalen);
722714 if (err != 0 ) {
723- session ().SetLastError (QuicError::ForApplication (
724- nghttp3_err_infer_quic_app_error_code (err)));
715+ session ().SetApplicationError (nghttp3_err_infer_quic_app_error_code (err));
725716 return false ;
726717 }
727718 // Raw application bytes are committed to the stream's outbound
@@ -1211,10 +1202,10 @@ class Http3ApplicationImpl final : public Session::Application {
12111202 void * conn_user_data,
12121203 void * stream_user_data) {
12131204 NGHTTP3_CALLBACK_SCOPE (app);
1214- auto & session = app.session ();
1215- Debug (&session, " HTTP/3 application deferred consume %zu bytes" , consumed);
1216- session. ExtendStreamOffset (id, consumed);
1217- session. ExtendOffset ( consumed);
1205+ Debug (& app.session (),
1206+ " HTTP/3 application deferred consume %zu bytes" ,
1207+ consumed);
1208+ app. session (). Consume (id, consumed);
12181209 return NGTCP2_SUCCESS ;
12191210 }
12201211
0 commit comments