Skip to content

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

Closed
icing wants to merge 5 commits intocurl:masterfrom
icing:cf-socket-connect
Closed

Rework Connect Eyeballing, HTTP/2 and HTTP/3 connection filters#10141
icing wants to merge 5 commits intocurl:masterfrom
icing:cf-socket-connect

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

@icing icing force-pushed the cf-socket-connect branch from 90c8307 to 7e11c22 Compare December 23, 2022 08:23
@icing icing force-pushed the cf-socket-connect branch from 8e054cb to 1257d0b Compare December 28, 2022 13:32
…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
@icing icing force-pushed the cf-socket-connect branch from 4af6db7 to b069c96 Compare December 30, 2022 08:15
- 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
@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
vszakats added a commit that referenced this pull request Jul 24, 2025
- lib/connect.c: unused since:
  71b7e01 #10141

- lib/curl_sspi.c: unused since:
  0d71b18 #17413

Cherry-picked from #18009
Closes #18011
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.

2 participants