litespeedtech / lsquic

LiteSpeed QUIC and HTTP/3 Library
MIT License
1.56k stars 339 forks source link

Connection aborted when requesting Youtube home page: Received unexpected ACK_FREQUENCY frame (not negotiated) #445

Closed arthurhrb closed 1 year ago

arthurhrb commented 1 year ago

When requesting www.youtube.com/ the connection is aborted after ~100kB are received. The page has ~700kB. Reproduced with all IETF supported versions. The request is successfully completed with GQuic.

Command line: http_client -s www.youtube.com -p "/" -L info

Log: 8:55:23.399 [INFO] [QUIC:744A3CA1AF1328AA] conn: Abort connection: Received unexpected ACK_FREQUENCY frame (not negotiated) 18:55:23.399 [INFO] http_client_on_close called 18:55:23.399 [INFO] all requests completed, closing connection 18:55:23.399 [NOTICE] [QUIC:744A3CA1AF1328AA] sendctl: stats: n_total_sent: 26; n_resent: 0; n_delayed: 0 18:55:23.399 [INFO] Connection closed. Status: 7. Message: Received unexpected ACK_FREQUENCY frame (not negotiated) 18:55:23.399 [NOTICE] [QUIC:744A3CA1AF1328AA] conn: # ticks: 27 18:55:23.399 [NOTICE] [QUIC:744A3CA1AF1328AA] conn: sent 26 packets 18:55:23.399 [NOTICE] [QUIC:744A3CA1AF1328AA] conn: received 101 packets, of which 0 were not decryptable, 0 were dups and 0 were errors; sent 26 packets, avg stream data per outgoing packet is 1 bytes 18:55:23.399 [NOTICE] [QUIC:744A3CA1AF1328AA] conn: ACKs: delayed acks on: no; in: 3; processed: 3; merged: 0 18:55:23.399 [INFO] All connections are closed: stop engine

litespeedtech commented 1 year ago

Please try this patch

diff --git a/src/liblsquic/lsquic_full_conn_ietf.c b/src/liblsquic/lsquic_full_conn_ietf.c
index db1885cc..974139d4 100644
--- a/src/liblsquic/lsquic_full_conn_ietf.c
+++ b/src/liblsquic/lsquic_full_conn_ietf.c
@@ -6693,7 +6693,8 @@ process_ack_frequency_frame (struct ietf_full_conn *conn,
     uint64_t seqno, pack_tol, upd_mad;
     int parsed_len, ignore;

-    if (!(conn->ifc_flags & IFC_DELAYED_ACKS))
+    if (!conn->ifc_settings->es_delayed_acks
+        && !(conn->ifc_flags & IFC_DELAYED_ACKS))
     {
         ABORT_QUIETLY(0, TEC_PROTOCOL_VIOLATION,
             "Received unexpected ACK_FREQUENCY frame (not negotiated)");
arthurhrb commented 1 year ago

it works OK with the patch: 15:07:15.734 [INFO] all requests completed, closing connection 15:07:15.734 [NOTICE] [QUIC:C76C2F28D56B134A] sendctl: stats: n_total_sent: 11; n_resent: 0; n_delayed: 0 15:07:15.734 [INFO] Connection closed. Status: 8. Message:

litespeedtech commented 1 year ago

Thanks for the confirmation. The fix is in v3.3.0 already.