Permalink
Switch branches/tags
Nothing to show
Commits on Apr 10, 2018
  1. CI: run 'apk update'

    ysbaddaden committed Apr 10, 2018
    Otherwise we may try to install old openssl packages that are no
    longer available.
Commits on Nov 16, 2017
  1. CI: don't require make

    ysbaddaden committed Nov 16, 2017
Commits on Nov 15, 2017
Commits on Nov 1, 2017
  1. Fix: TravisCI

    ysbaddaden committed Nov 1, 2017
  2. WIP: HTTP2::Server with HTTP/1 + HTTP/2 support

    ysbaddaden committed Oct 31, 2017
    Drops the previous HTTP::Server transparent hack, and introduces a
    rewritten HTTP2::Server that mimics the HTTP::Server public API,
    with different breaking changes, most notably using HTTP2 namespace.
    
    Most changes should eventually be smoothed out.
  3. Public API delimitation, type annotations and documentation

    ysbaddaden committed Oct 30, 2017
    Defined public/protected/private API limits. Only expose what is
    supposed to be accessed by HTTP2::Connection servers and clients.
    
    Type annotates and documents public methods.
    
    Replaced some `Bytes` allocations (that require HEAP allocations)
    with stack allocated `StaticArray(UInt8, N)` to speed a few things
    up.
Commits on Oct 29, 2017
  1. Update README.md

    ysbaddaden committed Oct 29, 2017
  2. Update README.md

    ysbaddaden committed Oct 29, 2017
  3. Update README.md

    ysbaddaden committed Oct 29, 2017
    Now supports control-flow windows sizes (stream, connection),
    client connections, etc.
    
    Cross-out integration into HTTP::Server and HTTP::Client
    because both may require some drastic changes in how
    they work, and reimplementing HTTP/1 in the light of
    HTTP/2 is interesting (e.g. allow parallel HTTP/2 requests
    in client).
  4. HTTP/2: fixes for client connections

    ysbaddaden committed Oct 29, 2017
    - specify connection type (SERVER or CLIENT);
    - validate request OR response headers;
    - fix Streams to create even (server) or odd (client) stream identifiers;
  5. Fixed regressions

    ysbaddaden committed Oct 29, 2017
    - failed to parse CONTINUATION frames following HEADERS frame;
    - SETTINGS_INITIAL_WINDOW_SIZE doesn't affect the connection window
      size, but only affects streams;
    - Stream#send_data was sending the END_STREAM flag too soon on cut
      DATA frames, when it should only be sent for the last chunk.
Commits on Oct 28, 2017
  1. Refactor Connection#receive + fix outbound control flow

    ysbaddaden committed Oct 28, 2017
    Extract #receive into many small methods.
    
    Fixes Outbound control-flow by respecting the connection window size
    in addition to the stream window size. Also fixes a deadlock when
    resuming a fiber for a stream pending to send data: we must requeue
    the current fiber before resuming another fiber, otherwise the
    current fiber will never be resumed.
Commits on Oct 25, 2017
  1. HTTP::Server: change default logging to INFO.

    ysbaddaden committed Oct 25, 2017
    No need to clutter STDOUT by default; make `h.cr` accept `DEBUG`
    environment variable instead to enable verbose output.
  2. Avoid all 'unhandled exceptions' from h2spec run

    ysbaddaden committed Oct 25, 2017
    They're mostly related to broken IO (EPIPE, ECONNRESET, EOF) or
    pending fibers (e.g. waiting to write data to `stream.data`).
  3. HTTP/2: mark some stream#send methods as protected

    ysbaddaden committed Oct 25, 2017
    Some frame types shouldn't be publicly available, but only
    accessible by the HTTP2 module, otherwise thay may hinder or just
    break the connection. For example: WINDOW_UPDATE, RST_STREAM, or
    changing the stream state.
  4. HTTP/2: fix connection window size for many streams

    ysbaddaden committed Oct 25, 2017
    We must send a WINDOW_UPDATE to stream #0 whenever the connection
    inbound window size grows too small, not send one when a stream
    sends a WINDOW_UPDATE for itself, otherwise multiple streams may
    consume the connection inbound window size, which will never be
    increased, resulting in a deadlock.
    
    To avoid sending WINDOW_UPDATE frames too often, we increase the
    inbound window size by the initial window size (local setting) and
    multiply it by the number of active inbound streams.
Commits on Oct 24, 2017
  1. HTTP/2: incoming control-flow

    ysbaddaden committed Oct 24, 2017
    - Use a circular buffer to buffer incoming DATA frames.
    - Count stream incoming window size and send WINDOW_UPDATE frames
      when buffer is half empty.
    - Count connection incoming window size and send WINDOW_UPDATE on
      stream #0 to increment the connection's window size.
  2. Merge pull request #9 from ysbaddaden/travis-ci

    ysbaddaden committed Oct 24, 2017
    Configure Travis CI
  3. Configure Travis CI [take 1]

    ysbaddaden committed Oct 24, 2017
  4. Fix: dummy logger

    ysbaddaden committed Oct 24, 2017
  5. HTTP/2: support SETTINGS_INITIAL_WINDOW_SIZE changes

    ysbaddaden committed Oct 24, 2017
    The window size of all control-flow streams must be changed when
    SETTINGS_INITIAL_WINDOW_SIZE changes by the difference between the
    previous value and the new value.
    
    Also don't resume pending write fibers if the window size becomes
    negative.
  6. HTTP/2: fix receiving WINDOW UPDATE frames

    ysbaddaden committed Oct 24, 2017
    1. don't increment window size twice
    2. only fail if window size would grow larger than MAXIMUM_WINDOW_SIZE
  7. Syntax in README

    ysbaddaden committed Oct 24, 2017
  8. HTTP/2: PRIORITY frames forward declare streams

    ysbaddaden committed Oct 24, 2017
    Don't mark stream ids as consumed when receiving a PRIORITY frame,
    because a PRIORITY frame may forward declare priority and dependency
    for *upcoming* streams.