Commit graph

75 commits

Author SHA1 Message Date
Dmitri Tikhonov
bc520ef752 Release 2.11.0
- [FEATURE] QUIC and HTTP/3 Internet Draft 27 support.
- [FEATURE] Add experimental delayed ACKs extension.
- Drop support for Internet Draft 24.
- Code cleanup.
2020-02-24 12:02:57 -05:00
Dmitri Tikhonov
df25d34a5e Fail engine ctor if stream callbackes are not specified 2020-02-20 17:01:15 -05:00
Dmitri Tikhonov
83506617f9 Set lshpack include directory in the library's Makefile 2020-02-20 17:00:23 -05:00
Dmitri Tikhonov
aa82021170 Release 2.10.6
- [BUGFIX] HTTP/3 framing: don't misinterpret rare occurence as error.
- [BUGFIX] Send gap warning due to missing poisoned packet.
2020-02-14 09:11:22 -05:00
Dmitri Tikhonov
35ac25bb73 Add stream unit test disproving issue #106 2020-02-14 08:44:19 -05:00
Dmitri Tikhonov
1bdb91d191 Release 2.10.5
- [BUGFIX] BBR: call cci_sent() with correct arguments and at correct time.
- Refactor transport parameters module.
- Minor code cleanup.
2020-02-13 09:36:04 -05:00
Dmitri Tikhonov
9fc120419d Release 2.10.0
- [FEATURE] QUIC and HTTP/3 Internet Draft 25 support.
- [API] Drop support for ID-23.
- [BUGFIX] Set key phase bit on outgoing packets correctly.
- Code cleanup.
2020-01-28 09:35:09 -05:00
Dmitri Tikhonov
fb96f4dd43 Release 2.9.0
- [API] Drop support for Q039.
- Improve ACK-queuing logic.  Send an ACK once in a while if
  peer keeps on sending non-ack-eliciting packets.
- Improve Alt-Svc string: Q050 and later are not included in
  the old-style "quic" string.
- Send stateless resets if connection could not be promoted.
- Schedule MAX_DATA if needed when DATA_BLOCKED is received.
- Use ls-qpack 0.11.2 -- needed for server push optimization.
- Code cleanup: handle some error cases, improve logging.
2020-01-20 09:41:37 -05:00
Dmitri Tikhonov
a4f5dac3cf Release 2.8.8
- [BUGFIX] Invalid read when parsing IETF transport parameters
  (this was benign).
- [OPTIMIZATION] Frame bundling when using buffered packets in
  IETF QUIC: a) flush QPACK decoder stream and b) include ACKs
  in opportunistic fashion.
- Fix HTTP/3 framing unit test.
- Code cleanup.
2020-01-14 14:26:11 -05:00
Dmitri Tikhonov
7d09751dbb Release 2.8.7
- [BUGFIX] Initial packet size check for IETF mini conn applies to
  UDP payload, not QUIC packet.
- Support old and new school loss_bits transport parameter.
- Use Q run length of 64 as suggested in the loss bits Draft.
- Undo square wave count when packet is delayed.
- Code cleanup; minor fixes.
2020-01-09 11:52:25 -05:00
Dmitri Tikhonov
de46bf2f1f Release 2.8.1
- [FEATURE] Use occasional packet number gaps to detect optimistic
  ACK attacks.
- [BUGFIX] Q050 client: all packet numbers are in the App PNS.
- [OPTIMIZATION] Merge multi-range ACK frames, not just single-range
  ACK frames.
- IETF QUIC: use RTT estimate in ack timeout calculation.
- IETF handshake: abort conn when unexpected errors occur.
- Use PING rather than MAX_DATA frames to elicit ACKs from peer.
- Server: enforce 1200 byte Initial minimum packet size.
- [CLEANUP] Remove code to disable gQUIC crypto.
- [CLEANUP] Remove n_timestamps from ACK info struct.
- Optimize driver: reuse previous ancillary message when possible.
2019-12-30 11:29:05 -05:00
Dmitri Tikhonov
7a8b2ece3a Release 2.8.0
- [FEATURE] Add support for Q050.
- [OPTIMIZATION] Reduce mallocs in gQUIC handshake.
- [BUGFIX] Disable redo of failed STREAM frame insertion with debug
  logging.
2019-12-23 16:14:20 -05:00
Dmitri Tikhonov
a137764bf2 Release 2.7.2
- [BUGFIX] Send controller: update scheduled bytes when DCID length
  changes (IETF client).
- [BUGFIX] Drop alarm check from sanity test.  It no longer works now
  that we use loss chains.
- [PORTABILITY] Fix build on Alpine Linux.
- [PORTABILITY] Fix build using XCode.
- Client initial DCID length: use RAND_bytes() instead of rand(3).
- Add unit tests for connection min heap.
- [DEBUG] Log CID in gQUIC handshake module
- [DEBUG] Turn on extra checks for IETF client send controller.
- [DEBUG] Dedup next advisory tick messages when reason is IDLE timer.
- [DEBUG] QPACK decoder handler: log header error code.
2019-12-11 09:38:58 -05:00
Dmitri Tikhonov
55f8042d41 Release 2.6.6
- [BUGFIX] Using HTTP/3 to HTTP/1.x converter.
- [BUGFIX] Truncate log messages instead of throwing them away.
2019-11-20 11:43:10 -05:00
Dmitri Tikhonov
be8bc27c5b Fix h3_framing unit test, bump version to 2.6.5 2019-11-15 09:27:48 -05:00
Dmitri Tikhonov
2f7aa65884 Release 2.6.3
- [BUGFIX] Close DATA frames with empty payload correctly.
2019-11-12 14:29:32 -05:00
Dmitri Tikhonov
767cf6112c Release 2.6.2
- [BUGFIX] SCID!=ODCID rule applies to Retry packets, not regular
  packets.
- [BUGFIX] Zero-RTT: BoringSSL no longer flips read/write secrets.
- [BUGFIX] Truncate ACK frame rather instead of aborting IETF
  connection.
- [BUGFIX] Client: don't send duplicate reset tokens.
- [BUGFIX] Remove invalid assertion in H3 framing code.
- Silence a warning in send ctl by restructuring switch() statement.
2019-11-11 14:05:54 -05:00
Dmitri Tikhonov
a0e1aeeee0 Release 2.5.0
- [API] lsquic_engine_connect() can now be passed QUIC version to use.
- [OPTIMIZATION] Queue opportunistic ACKs if there is data to be sent.
- [BUGFIX] Don't evict streams from priority iterator if there is
  only one queue.
- [OPTIMIZATION, BUGFIX] Several other optimizations and bug fixes.
- Use ls-qpack v0.10.7.
2019-10-31 12:21:14 -04:00
Dmitri Tikhonov
0adf085acf Release 2.4.7
- Add echo client and server to the distibution.
- Add MD5 client and server to the distibution.
- Fix http_client: check command-line arguments better, prevent crash.
- Fix IETF conn: can_write_ack() should only care about APP PNS.
- Client: delay stream creation until handshake succeds.
- Reset HTTP stream whose write end is closed prematurely.
- Fix tickable(): mirror behavior of tick() wrt buffered packets.
- Log reason why engine is tickable.
2019-10-15 17:04:14 -04:00
Dmitri Tikhonov
ad08470cea Release 2.4.6
- Minor code cleanup and logging improvements.
- Server and client programs: include library version (e.g. 2.4.6)
  into `server' and `user-agent' headers.
2019-10-11 08:24:24 -04:00
Dmitri Tikhonov
4947ba950d Release 2.4.5
- [OPTIMIZATION]: flush encoder stream only when necessary.
- [BUGFIX] Use ls-qpack v0.10.2 for new API -- and for a bug fix.
- [BUGFIX] Typo in IETF conn SETTINGS writer.
- Use latest BoringSSL.
2019-10-08 15:54:01 -04:00
Dmitri Tikhonov
662de5e197 Release 2.4.4
- [API] Add lsquic_alpn2ver() to aid parsing Alt-Svc header.
- [BUGFIX] NULL dereference when H3 frame header would be split.
- [BUGFIX] Do not close fixed-size H3 frame prematurely.
- [BUGFIX] Allow PING frames in IETF mini conn.
- [BUGFIX] Mini conns: don't send any packets after receiving
  CONNECTION_CLOSE.
- [BUGFIX] Client migration: reserve slot for DCID from transport params.
- [BUGFIX] Allow max_early_data_size=0 -- early_data might not be there.
- [BUGFIX] Use an invalid stream number to reset BPT cache (zero is now a
  valid stream number).
- [SPEC] Use FINAL_SIZE_ERROR when FIN mismatch is detected.
- [OPTIMIZATION] Closed connection only gets one chance to send packets.
- [OPTIMIZATION] Flush headers stream before packetizing stream data.
- [OPTIMIZATION] process QPACK encoder STREAM frames immediately.
- Update ls-qpack to v0.10.1.
2019-10-08 08:36:49 -04:00
Dmitri Tikhonov
65728dc5ee Release 2.4.2
- [BUGFIX] H3 framing: fix zero-byte write when space is available
- [BUGFIX] Don't send STREAM frame when incoming unidirectgional stream
  is closed
- [BUGFIX] Cancel all pending writes by stream reset by a GOAWAY
- [BUGFIX] Fix use-after-free in IETF full conn
- [OPTIMIZATION] Wait for session tickets for two seconds and then drop
  SSL object and crypto streams.
2019-09-23 12:00:10 -04:00
Dmitri Tikhonov
92f6e17bdc Release 2.4.0
[FEATURE] QUIC and HTTP/3 Internet Draft 23 support
2019-09-18 11:22:20 -04:00
Dmitri Tikhonov
a6cdaedba5 Release 2.3.1
- [BUGFIX] Fix memory leaks
- [BUGFIX] Fix unit tests
2019-09-13 09:42:22 -04:00
Dmitri Tikhonov
cca2541523 Release 2.3.0
- [FEATURE] BBR congestion control is on by default
- [BUGFIX] BBR app-limited logic
- [BUGFIX] Fix uninitialized warnings in IETF
- [BUGFIX] Update ls-qpack to v0.9.14
- [CLEANUP] Code cleanup
2019-09-12 14:39:50 -04:00
LiteSpeed Tech
5392f7a3b0
Release 2.2.0: server included, ID-22 supported (#76) 2019-09-11 11:27:58 -04:00
Dmitri Tikhonov
8cba36d873 Release 1.21.2
- [OPTIMIZATION] HPACK: use history to improve compression performance
2019-05-13 08:51:39 -04:00
Dmitri Tikhonov
d539a7520f Release 1.21.1
- [BUGFIX] If FIN or RST not received, don't delay stream destruction.
- [OPTIMIZATION] Speed up HPACK encoder by using same hash value to
  search static and dynamic tables.
2019-05-06 09:40:59 -04:00
Dmitri Tikhonov
e5d4bc6d21 Fix a couple of Windows compilation issues 2019-04-12 14:31:08 -04:00
Dmitri Tikhonov
9b4d33c76c Fix a couple of small bugs that crept in in previous commit 2019-04-12 13:44:40 -04:00
Dmitri Tikhonov
55cd0b38b2 Release 1.21.0
[FEATURE] Add qlog log module.
2019-04-12 10:50:45 -04:00
Dmitri Tikhonov
c7d81ce135 Release 1.20.0
[FEATURE] Add support for Q046.
2019-04-01 11:41:55 -04:00
Dmitri Tikhonov
8ca33e0e19 Release 1.19.0
- [FEATURE, API Change] 0-RTT support.  Add function to export 0-RTT
  information; it can be supplied to a subsequent connect() call.
- [FEATURE] Add -0 flag to http_client to exercise 0-RTT support.
- [BUGFIX] Resuscitate the Windows build.
- [BUGFIX] Send HTTP settings (max header list size) if necessary.
- [BUGFIX] Buffered packets can contain ACK frames.
- [BUGFIX] Make packet writeable once all STREAM frames are elided.
- [BUGFIX] Fix potential null dereference when realloc fails.
- cmake: simplify build configuration.
2019-02-04 08:59:11 -05:00
Dmitri Tikhonov
b1af35d6c0 Simplify configuration -- use more cmake functions (#62) 2019-02-01 02:12:06 -05:00
Dmitri Tikhonov
2d296031db Resuscitate Windows build (#61) 2019-01-30 15:28:35 -05:00
Dmitri Tikhonov
4d83f5bd45 Release 1.17.15
- [BUGFIX] http_client: make sure only one read per on_read() callback
  is performed in the header conversion bypass (-B) mode.
- http_client: with -E, assign random priority when stream is created.
- [OPTIMIZATION] On immediate write, place an ACK frame into the first
  buffered packet if an ACK is queued.  This reduces the number of
  standalone ACK packets.
- [OPTIMIZATION] Allow placing more than one STREAM frame from the same
  stream into an outgoing packet.  This change minimizes the number of
  buffered packets required to store several small HTTP messages by
  virtue of allowing more than one STREAM frame from HEADERS stream in
  the same packet.
- [OPTIMIZATION] Flush headers when writing to buffered packets.  This
  causes the headers to be written to the same buffered packet queue,
  thereby improving packet utilization, especially for small HTTP
  messages.
2019-01-21 09:07:02 -05:00
Dmitri Tikhonov
19f667fba5 Release 1.17.14
- [FEATURE] http_client can now collect stats: time to connect, TTFB,
  time to download, requests per seconds, and bandwidth.  See -t flag.

- [BUGFIX] http_client: -B, -K, and -r can be used at the same time.

- [BUGFIX] http_client: do not display cert chain before each request.
  Now this is only done once per connection, if the handshake is
  successful and -a option is given.

- [BUGFIX] Do not wait to dispatch on_close() after reading.  If a
  stream is scheduled to be closed after on_read() callback returns,
  close it immediately instead of waiting until the end of the tick.
  If client creates new request from on_close() event, they will be
  processed in the same tick instead of waiting for the next one.

- [BUGFIX] HEADERS stream is critical: always treat it with highest
  priority.
2019-01-16 15:13:59 -05:00
Dmitri Tikhonov
229fce07a3 Release 1.17.11
Fix strict aliasing warning in when compiling with optimizations
2019-01-03 11:48:45 -05:00
Dmitri Tikhonov
db5f69e349 Fix memory leak in test_frame_rw unit test 2018-10-19 10:12:44 -04:00
Dmitri Tikhonov
1e75f9380e Release 1.17.0
- [API Change] Packet out Memory Interface (PMI) update:
  - Split PMI pool return into pmi_release and pmi_return
  - PMI callbacks take peer_ctx and is_ipv6 arguments
- [BUGFIX] Fix use-after-free when certificate is updated
- Silence gcc warning in optimized mode by performing useless
  initialization
- cmake: use the standard variable CMAKE_BUILD_TYPE instead of
  DEVEL_MODE
2018-10-16 09:03:33 -04:00
Dmitri Tikhonov
14e3680d6b Release 1.14.0
- [API Change] Disable packet sending if full batch cannot be sent
  If lsquic_packets_out_f() cannot send the whole batch, disable
  packet sending until lsquic_engine_send_unsent_packets() is called.
- [BUGFIX] Handle case when STREAM frame does not fit.
- [BUGFIX] Always allow incoming STREAM frames to overlap.  Peers
  may send overlapping STREAM frames even if using versions older
  than Q043.
- Custom header set fixes:
  - set "FIN reached" flag when custom header with FIN flag is
    claimed;
  - do not return custom header set for a reset stream.
2018-09-06 14:05:15 -04:00
Dmitri Tikhonov
3b55e6ae0a 1.13.0: [FEATURE, API Change] HTTP header bypass
Add ability to create custom header set objects via callbacks.
This avoids reading and re-parsing headers from the stream.

See test/http_client.c for example implementation.  (Use -B flag
to turn it on).
2018-08-28 09:59:47 -04:00
Dmitri Tikhonov
6f126d809b 1.12.4: Fix memory leaks and gcc compilation warnings 2018-08-27 13:55:06 -04:00
Dmitri Tikhonov
5f5d395b59 1.12.3: [BUGFIX] Fix duplicate STREAM frame detection 2018-08-22 16:46:31 -04:00
Dmitri Tikhonov
7f2bd84c85 1.12.0: [FEATURE, API Change] Certificate verification 2018-08-17 11:44:54 -04:00
Dmitri Tikhonov
9626cfc25b 1.11.0: [FEATURE] Add support for Q044 2018-08-15 15:06:58 -04:00
Dmitri Tikhonov
ccd741616f Latest changes
- 1.10.1
- [BUGFIX]  process connections after each batch of packets is read
  This avoids a problem of accumulating a very large list of packets
  (possible when speeds are high and socket's receive buffer is large)
  and processing it all at once.
- If glibc is older than 2.17, link with rt.  This is necessary for
  clock_getres(2).
- Add version macros to lsquic.h; remove unnecessary includes.
2018-07-10 11:51:45 -04:00
Dmitri Tikhonov
cd7bc3834d [BUGFIX] allow multiple parallel connections by default
Use the original method of tracking connections by CIDs by default.
If zero-sized CID support is turned on, connections are tracked by
the address.  A new connection is not created if another connection
is using the same network address.
2018-06-13 11:10:28 -04:00
Dmitri Tikhonov
96f77e2060 [FEATURE, API CHANGE] Support zero-sized CIDs in received packets 2018-05-30 00:15:35 -04:00