Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework Connect Eyeballing, HTTP/2 and HTTP/3 connection filters #10141

Closed
wants to merge 5 commits into from

Conversation

icing
Copy link
Contributor

@icing icing commented Dec 22, 2022

Refactoring of connection setup and happy eyeballing. Move nghttp2. ngtcp2, quiche and msh3 into connection filters.

  • eyeballing cfilter that uses sub-filters for performing parallel connects

  • socket cfilter for all transport types, including QUIC

  • QUIC implementations in cfilter, can now participate in eyeballing

  • connection setup is more dynamic in order to adapt to what filter did really connect. Relevant to see if a SSL filter needs to be added or if SSL has already been provided

  • HTTP/3 test cases similar to HTTP/2

  • multiuse of parallel transfers for HTTP/3, tested for ngtcp2 and quiche

  • Fix for data attach/detach in VTLS filters that could lead to crashes during parallel transfers.

  • Eliminating setup() methods in cfilters, no longer needed.

  • Improving Curl_conn_is_alive() to replace Curl_connalive() and integrated ssl alive checks into cfilter.

  • Adding CF_CNTRL_CONN_INFO_UPDATE to tell filters to update connection into and persist it at the easy handle.

  • Several more cfilter related cleanups and moves:

    • stream_weigth and dependency info is now wrapped in struct Curl_data_priority
    • Curl_data_priority members depend is available in HTTP2|HTTP3
    • Curl_data_priority members depend on NGHTTP2 support
    • handling init/reset/cleanup of priority part of url.c
    • data->state.priority same struct, but shallow copy for compares only
  • PROTOPT_STREAM has been removed

    • Curl_conn_is_mulitplex() now available to check on capability
  • Adding query method to connection filters.

    • ngtcp2+quiche: implementing query for max concurrent transfers.
  • struct http is now empty in easy handles, could be removed

  • Adding is_alive and keep_alive cfilter methods. Adding DATA_SETUP event. - setting keepalive timestamp on connect - DATA_SETUP is called after the connection has been completely setup (but may not connected yet) to allow filters to initialize data members they use.

  • there is no socket to be had with msh3, it is unclear how select shall work

  • manual test via "curl --http3 https://curl.se" fail with "empty reply from server".

  • Various socket/conn related cleanups:

    • Curl_socket is now Curl_socket_open and in cf-socket.c
    • Curl_closesocket is now Curl_socket_close and in cf-socket.c
    • Curl_ssl_use has been replaced with Cur_conn_is_ssl
    • Curl_conn_tcp_accepted_set has been split into Curl_conn_tcp_listen_set and Curl_conn_tcp_accepted_set with a clearer purpose

lib/cfilters.c Fixed Show fixed Hide fixed
lib/vtls/vtls.c Fixed Show fixed Hide fixed
lib/vtls/vtls.c Fixed Show fixed Hide fixed
lib/connect.c Outdated Show resolved Hide resolved
lib/connect.c Show resolved Hide resolved
…ngtcp2, quiche and msh3 into connection filters.

            - eyeballing cfilter that uses sub-filters for performing parallel connects
            - socket cfilter for all transport types, including QUIC
            - QUIC implementations in cfilter, can now participate in eyeballing
            - connection setup is more dynamic in order to adapt to what filter did really connect.
              Relevant to see if a SSL filter needs to be added or if SSL has already been provided
            - HTTP/3 test cases similar to HTTP/2
            - multiuse of parallel transfers for HTTP/3, tested for ngtcp2 and quiche

            - Fix for data attach/detach in VTLS filters that could lead to crashes during
              parallel transfers.
            - Eliminating setup() methods in cfilters, no longer needed.
            - Improving Curl_conn_is_alive() to replace Curl_connalive() and integrated ssl alive checks into cfilter.
            -  Adding CF_CNTRL_CONN_INFO_UPDATE to tell filters to update connection into and persist it at the easy handle.

            - Several more cfilter related cleanups and moves:
              - stream_weigth and dependency info is now wrapped in struct Curl_data_priority
              - Curl_data_priority members depend is available in HTTP2|HTTP3
              - Curl_data_priority members depend on NGHTTP2 support
              - handling init/reset/cleanup of priority part of url.c
              - data->state.priority same struct, but shallow copy for compares only

            - PROTOPT_STREAM has been removed
              - Curl_conn_is_mulitplex() now available to check on capability

            - Adding query method to connection filters.
              - ngtcp2+quiche: implementing query for max concurrent transfers.
            - struct http is now empty in easy handles, could be removed

            - Adding is_alive and keep_alive cfilter methods. Adding DATA_SETUP event.
                - setting keepalive timestamp on connect
                - DATA_SETUP is called after the connection has been completely setup
                  (but may not connected yet) to allow filters to initialize data members
                  they use.

            - there is no socket to be had with msh3, it is unclear how select shall work
            - manual test via "curl --http3 https://curl.se" fail with "empty reply from server".

            - Various socket/conn related cleanups:
              - Curl_socket is now Curl_socket_open and in cf-socket.c
              - Curl_closesocket is now Curl_socket_close and in cf-socket.c
              - Curl_ssl_use has been replaced with Cur_conn_is_ssl
              - Curl_conn_tcp_accepted_set has been split into
                Curl_conn_tcp_listen_set and Curl_conn_tcp_accepted_set
                with a clearer purpose
- int in data cfilters control/query methods as arg
- shift HAProxy setup filter "below" SSL
- fail HAPRoxy if SSL is in place
- remove struct http_conn
- quiche remove version field
- quiche. drain easy handles need expire, look at http2 code
lib/http_proxy.c Fixed Show fixed Hide fixed
@bagder bagder closed this in 71b7e01 Dec 30, 2022
@bagder
Copy link
Member

bagder commented Dec 30, 2022

Thanks!

bch pushed a commit to bch/curl that referenced this pull request Jul 19, 2023
Refactoring of connection setup and happy eyeballing. Move
nghttp2. ngtcp2, quiche and msh3 into connection filters.

 - eyeballing cfilter that uses sub-filters for performing parallel connects
 - socket cfilter for all transport types, including QUIC
 - QUIC implementations in cfilter, can now participate in eyeballing
 - connection setup is more dynamic in order to adapt to what filter did
   really connect.  Relevant to see if a SSL filter needs to be added or
   if SSL has already been provided
 - HTTP/3 test cases similar to HTTP/2
 - multiuse of parallel transfers for HTTP/3, tested for ngtcp2 and quiche

 - Fix for data attach/detach in VTLS filters that could lead to crashes
   during parallel transfers.
 - Eliminating setup() methods in cfilters, no longer needed.
 - Improving Curl_conn_is_alive() to replace Curl_connalive() and
   integrated ssl alive checks into cfilter.
 - Adding CF_CNTRL_CONN_INFO_UPDATE to tell filters to update
   connection into and persist it at the easy handle.

 - Several more cfilter related cleanups and moves:
   - stream_weigth and dependency info is now wrapped in struct
     Curl_data_priority
   - Curl_data_priority members depend is available in HTTP2|HTTP3
   - Curl_data_priority members depend on NGHTTP2 support
   - handling init/reset/cleanup of priority part of url.c
   - data->state.priority same struct, but shallow copy for compares only

 - PROTOPT_STREAM has been removed
   - Curl_conn_is_mulitplex() now available to check on capability

 - Adding query method to connection filters.
   - ngtcp2+quiche: implementing query for max concurrent transfers.

 - Adding is_alive and keep_alive cfilter methods. Adding DATA_SETUP event.
   - setting keepalive timestamp on connect
   - DATA_SETUP is called after the connection has been completely
     setup (but may not connected yet) to allow filters to initialize
     data members they use.

 - there is no socket to be had with msh3, it is unclear how select
   shall work

 - manual test via "curl --http3 https://curl.se" fail with "empty
   reply from server".

 - Various socket/conn related cleanups:
   - Curl_socket is now Curl_socket_open and in cf-socket.c
   - Curl_closesocket is now Curl_socket_close and in cf-socket.c
   - Curl_ssl_use has been replaced with Cur_conn_is_ssl
   - Curl_conn_tcp_accepted_set has been split into
     Curl_conn_tcp_listen_set and Curl_conn_tcp_accepted_set
     with a clearer purpose

Closes curl#10141
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

None yet

2 participants