Commit graph

81 commits

Author SHA1 Message Date
Dmitri Tikhonov
97028223ac Drop support for Q041 2018-05-09 14:43:22 -04:00
Dmitri Tikhonov
052a1c28ad Drop support for versions Q037, Q038, and Q042 2018-05-09 14:01:46 -04:00
Dmitri Tikhonov
d5eb659e46 Update README: version Q043 is now supported 2018-05-09 09:34:48 -04:00
Dmitri Tikhonov
c95974e91b [FEATURE] Add support for Q043 2018-05-09 08:57:43 -04:00
LiteSpeed Tech
d0a7c0c18f
Merge pull request #29 from dtikhonov/201805071630-windowize-client
Merge wincompat/test_common_win.c into test_common.c
2018-05-07 17:09:25 -04:00
Dmitri Tikhonov
3f050ae322 Drop MSVC-specific #pragma by fixing function type 2018-05-07 16:58:14 -04:00
Dmitri Tikhonov
db236e9092 Merge wincompat/test_common_win.c into test_common.c
The macro soup in test_common.c acquired a few more fingernails, but
this is better than maintaining (or, rather, forgetting to maintain)
two versions of the same code.
2018-05-07 16:31:15 -04:00
Dmitri Tikhonov
2a5cd80e91 Fix indentation: this is a better way to address new gcc warnings 2018-05-07 14:30:52 -04:00
LiteSpeed Tech
3b55db2dfb
Merge pull request #27 from dtikhonov/201705062137-fix-win-release
Fix bug in Windows optimized build
2018-05-06 22:31:52 -04:00
Dmitri Tikhonov
7b1586dd81 Fix bug in Windows optimized build 2018-05-06 21:39:19 -04:00
Dmitri Tikhonov
aff2a1d865 Update README and CONTRIBUTORS 2018-05-04 16:24:56 -04:00
Dmitri Tikhonov
518e00b2b2 Version Q041 goes from experimental to deprecated 2018-05-04 15:38:10 -04:00
Dmitri Tikhonov
be4cfad023 [FEATURE] Add support for Q042 2018-05-04 14:00:34 -04:00
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