Commit graph

368 commits

Author SHA1 Message Date
Dmitri Tikhonov
4b332c36d1 Latest changes
- Remove comment: MSPC is obsolete (no code changes)
- Prog: use lsquic_str2ver() when processing -o version flag
- Remove unused CTIM and SRBF transport parameters
- Disable QUIC versions Q037 and Q038 by default
- Fix Windows compilation by including compat header file in lshpack.c
- Address warnings produced by newer versions of gcc
- Future-proof: turn off -Werror
2018-05-04 11:53:50 -04:00
LiteSpeed Tech
5442222fd3
Merge pull request #26 from dtikhonov/201805041530-fix-newer-gcc-warnings
Fix or disable new compiler warnings in gcc 6+ and 7+
2018-05-04 11:36:44 -04:00
Dmitri Tikhonov
802800341c Disable misleading indent warnings in gcc 6+ 2018-05-04 15:32:16 +00:00
Dmitri Tikhonov
818790ed77 Add /* fallthru */ comment to stop gcc 7+ from warning 2018-05-04 15:31:04 +00:00
LiteSpeed Tech
2122997981
Merge pull request #25 from dtikhonov/fix-lshpack-win-breakage
Include vc_compat.h in lshpack.c to fix Windows compilation
2018-05-04 10:57:24 -04:00
Dmitri Tikhonov
075860c94b Include vc_compat.h in lshpack.c to fix Windows compilation 2018-05-04 10:52:04 -04:00
Dmitri Tikhonov
881272bb24 Fix: make lsquic_conn_quic_version() available 2018-05-02 13:55:11 -04:00
Dmitri Tikhonov
bea6482295 Latest changes:
- Switch to using ls-hpack 1.1
- [BUGFIX] Do not ignore stream resets after receiving FIN
2018-05-02 09:42:32 -04:00
Dmitri Tikhonov
bf6b47adbf HPACK: do not allow header block to end with table size update 2018-04-27 14:36:21 -04:00
Dmitri Tikhonov
130d542a00 Fix: conn is tickable if it wants to send a connection-level frame 2018-04-25 11:42:51 -04:00
Dmitri Tikhonov
aa0d8cfff0 Latest changes
- Do not create gap in sent packnos when squeezing delayed
  packets.
- sendctl checks for all unacked bytes, not just retx bytes.
- connections with blocked scheduled packets are not tickable
  for sending.
2018-04-25 10:58:55 -04:00
Dmitri Tikhonov
bdba46fd00 Latest changes:
- Fix busy loop: tickable must make progress.  When connection is
  self-reporting as tickable, it must make progress when ticked.  There
  are two issues:
    1. If there are buffered packets, the connection is only tickable if
       they can be sent out.
    2. A connection is tickable if there are streams on the servicing
       queue.  When the tick occurs, we must service the stream
       independent of whether any packets are sent.
- Fix assertion in pacer which can be incorrect under some
  conditions.
- cmake: do not turn on address sanitizer if in Travis.
2018-04-23 16:12:38 -04:00
Dmitri Tikhonov
9918a066f1 Point Travis-CI image to correct URI 2018-04-23 15:12:41 -04:00
LiteSpeed Tech
1b0179efcb
Merge pull request #20 from dtikhonov/201804231451-travis
Add Travis-CI support
2018-04-23 15:07:19 -04:00
Dmitri Tikhonov
cfbb176a12 Remove obsolete ci/build_boringssl.sh 2018-04-23 15:03:08 -04:00
Dmitri Tikhonov
1fc8f998cd Add Travis status 2018-04-23 14:54:57 -04:00
Dmitri Tikhonov
db8ac9eead Turn off Analyzer if using Travis -- it breaks all tests for some reason 2018-04-23 14:54:51 -04:00
Dmitri Tikhonov
69ecc99802 Fix up .travis.yml 2018-04-23 14:54:30 -04:00
Alexis La Goutte
11597b8ff0 travis: fix path 2018-04-23 14:54:13 -04:00
Alexis La Goutte
1380259088 Remove depth 2018-04-23 14:54:13 -04:00
Alexis La Goutte
327861087d include boringssl build 2018-04-23 14:54:13 -04:00
Alexis La Goutte
8f498c7ceb debug 2018-04-23 14:54:13 -04:00
Alexis La Goutte
c6b17ae05e Libssl-dev 2018-04-23 14:54:12 -04:00
Alexis La Goutte
42af697e82 Add .travis CI build 2018-04-23 14:54:12 -04:00
LiteSpeed Tech
f5f72ede17
Merge pull request #19 from Kait0/master
Added a Note to EXAMPLES.txt that tells users that google has differe…
2018-04-23 11:16:01 -04:00
Kaito
430169b639 Added a Note to EXAMPLES.txt that tells users that google has different ip-adresses in different regions and that they might have to check the correct one for them. 2018-04-23 16:49:00 +02:00
LiteSpeed Tech
64b2228feb
Merge pull request #14 from dtikhonov/201804201611-fix-windows-gettime
Fix Windows gettimeofday() implementation - were off by 10
2018-04-20 16:14:07 -04:00
Dmitri Tikhonov
560db45b8e Fix Windows gettimeofday() implementation - were off by 10 2018-04-20 16:11:25 -04:00
Dmitri Tikhonov
5296a94ba2 Fix bug in lsquic_engine_connect() exposed by recent changes. 2018-04-20 15:19:44 -04:00
Dmitri Tikhonov
82f3bcef32 Latest changes
- [BUGFIX] Add connection to Tickable Queue on stream write
- cmake: use MSVC variable instead of trying to detect
- engine: improve connection incref/decref logging
- stream: don't ignore errors that may occur on triggered flush
- connection: remove obsolete method
- engine: indicate connection as tickable if previous call went
  over threshold
2018-04-19 13:47:37 -04:00
LiteSpeed Tech
1279d5bfcd
Merge pull request #12 from dtikhonov/201804181037-use-cmake-msvc-env-var
cmake: use MSVC variable instead of trying to detect
2018-04-19 10:46:13 -04:00
LiteSpeed Tech
b0e6c9cbf7
Merge pull request #11 from dtikhonov/201804191030-update-wincompat-api-use
[BUGFIX] Wincompat: use the new APIs (commit e8bd737db4)
2018-04-19 10:45:55 -04:00
Dmitri Tikhonov
46a5b6690f cmake: use MSVC variable instead of trying to detect 2018-04-19 10:37:58 -04:00
Dmitri Tikhonov
6e6a954631 [BUGFIX] Wincompat: use the new APIs (commit e8bd737db4) 2018-04-19 10:31:41 -04:00
Dmitri Tikhonov
e8bd737db4 [API Change, OPTIMIZATION] Only process conns that need to be processed
The API is simplified: do not expose the user code to several
queues.  A "connection queue" is now an internal concept.
The user processes connections using the single function
lsquic_engine_process_conns().  When this function is called,
only those connections are processed that need to be processed.
A connection needs to be processed when:

    1. New incoming packets have been fed to the connection.
    2. User wants to read from a stream that is readable.
    3. User wants to write to a stream that is writeable.
    4. There are buffered packets that can be sent out.  (This
       means that the user wrote to a stream outside of the
       lsquic library callback.)
    5. A control frame (such as BLOCKED) needs to be sent out.
    6. A stream needs to be serviced or delayed stream needs to
       be created.
    7. An alarm rings.
    8. Pacer timer expires.

To achieve this, the library places the connections into two
priority queues (min heaps):

    1. Tickable Queue; and
    2. Advisory Tick Time queue (ATTQ).

Each time lsquic_engine_process_conns() is called, the Tickable
Queue is emptied.  After the connections have been ticked, they are
queried again: if a connection is not being closed, it is placed
either in the Tickable Queue if it is ready to be ticked again or
it is placed in the Advisory Tick Time Queue.  It is assumed that
a connection always has at least one timer set (the idle alarm).

The connections in the Tickable Queue are arranged in the least
recently ticked order.  This lets connections that have been quiet
longer to get their packets scheduled first.

This change means that the library no longer needs to be ticked
periodically.  The user code can query the library when is the
next tick event and schedule it exactly.  When connections are
processed, only the tickable connections are processed, not *all*
the connections.  When there are no tick events, it means that no
timer event is necessary -- only the file descriptor READ event
is active.

The following are improvements and simplifications that have
been triggered:

    - Queue of connections with incoming packets is gone.
    - "Pending Read/Write Events" Queue is gone (along with its
      history and progress checks).  This queue has become the
      Tickable Queue.
    - The connection hash no longer needs to track the connection
      insertion order.
2018-04-09 09:39:38 -04:00
Dmitri Tikhonov
eef4f2fcfb Add BUILD-WINDOWS.md -- instruction for building on Windows 2018-04-03 13:40:58 -04:00
Dmitri Tikhonov
10c492f0b6 Update copyright year; add CONTRIBUTORS.txt 2018-04-02 15:17:56 -04:00
Dmitri Tikhonov
da710addee Update CHANGELOG, a few changes 2018-04-02 15:16:01 -04:00
LiteSpeed Tech
34b068c133
Merge pull request #8 from rperper/PlusWindows
Fixes to the previous Windows pull request.
2018-04-02 14:47:12 -04:00
Bob Perper
b5d685fccf Additional Windows Updates 2018-04-02 11:38:44 -04:00
Bob Perper
a4e2468929 Replace some erroneously removed debugging code 2018-03-30 16:38:16 -04:00
Bob Perper
14931b3a86 More Windows updates 2018-03-30 14:53:05 -04:00
Bob Perper
ab5c8df273 More Windows Updates 2018-03-30 14:05:18 -04:00
Bob Perper
b93f59bea2 Initial PlusWindows commit 2018-03-30 10:57:17 -04:00
LiteSpeed Tech
00ee28ce61
Merge pull request #7 from amoldeshpande/master
Windows compilation
2018-03-28 11:53:28 -04:00
Amol Deshpande
5d77f141aa updated to upstream ran all tests again. 2018-03-12 19:56:06 -07:00
Amol Deshpande
461e84d874 compiles in debug/release. tests pass (in debug config at least) 2018-03-12 15:25:01 -07:00
Dmitri Tikhonov
16a9b66aaa Latest changes
- [OPTIMIZATION] Merge series of ACKs if possible

  Parsed single-range ACK frames (that is the majority of frames) are
  saved in the connection and their processing is deferred until the
  connection is ticked.  If several ACKs come in a series between
  adjacent ticks, we check whether the latest ACK is a strict superset
  of the saved ACK.  If it is, the older ACK is not processed.

  If ACK frames can be merged, they are merged and only one of them is
  either processed or saved.

- [OPTIMIZATION] Speed up ACK verification by simplifying send history.

  Never generate a gap in the sent packet number sequence.  This reduces
  the send history to a single number instead of potentially a series of
  packet ranges and thereby speeds up ACK verification.

  By default, detecting a gap in the send history is not fatal: only a
  single warning is generated per connection.  The connection can continue
  to operate even if the ACK verification code is not able to detect some
  inconsistencies.

- [OPTIMIZATION] Rearrange the lsquic_send_ctl struct

  The first part of struct lsquic_send_ctl now consists of members that
  are used in lsquic_send_ctl_got_ack() (in the absense of packet loss,
  which is the normal case).  To speed up reads and writes, we no longer
  try to save space by using 8- and 16-bit integers.  Use regular integer
  width for everything.

- [OPTIMIZATION] Cache size of sent packet.

- [OPTIMIZATION] Keep track of the largest ACKed in packet_out

  Instead of parsing our own ACK frames when packet has been acked,
  use the value saved in the packet_out structure when the ACK frame
  was generated.

- [OPTIMIZATION] Take RTT sampling conditional out of ACK loop

- [OPTIMIZATION] ACK processing: only call clock_gettime() if needed

- [OPTIMIZATION] Several code-level optimizations to ACK processing.

- Fix: http_client: fix -I flag; switch assert() to abort()
2018-03-09 14:17:39 -05:00
Dmitri Tikhonov
0e7c6aad9e Add missed test_cubic.c to the distribution 2018-03-07 18:46:34 -05:00
Dmitri Tikhonov
7fbe101b9c Latest changes
- Fix unit test regression: enable them correctly in cmake.
- Simplify connection has interface
2018-02-28 14:25:21 -05:00