Skip to content

Latest commit

 

History

History
568 lines (357 loc) · 17.6 KB

CHANGELOG.md

File metadata and controls

568 lines (357 loc) · 17.6 KB

Change Log

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Current

Added

  • Adds CI-only ExUnit test that downloads and runs h2spec

Fixed

  • Correctly handles frame of unknown type

0.18.10 - 2020-02-16

Added

  • New option error_response for Ace.HTTP.Service.

0.18.9 - 2019-10-30

Changed

  • Allow the users to specify socket options and opt out of HTTP/1.1 or HTTP2.

Fixed

  • Fix dialyzer warning about :elixir_errors.warn on Elixir >= 1.9.0

0.18.8 - 2019-04-29

Fixed

  • HTTP2 connection handles case when peer cleanly closes connection.

0.18.7 - 2019-04-25

Fixed

  • Correctly handle paths beginning with //.
  • GET requests with a body are handled correctly.
  • Unsupported methods are handled and return a 501 status response.

0.18.6 - 2019-04-16

Added

  • Support for raxx 1.0.0.

0.18.5 - 2019-03-19

Fixed

  • Correctly handled te header when parsing HTTP/2 requests.

0.18.4 - 2019-02-07

Added

  • Support for raxx 0.18.0.

0.18.3 - 2019-01-31

Fixed

  • Fixed Ace.HTTP2.Connection to handle application data sent as iolist.

0.18.2 - 2019-01-04

Fixed

  • Fix incorrectly displayed warning from use Raxx.SimpleServer.

0.18.1 - 2018-11-22

Added

  • Both start_link/1,2 and child_spec/1 generated by Ace.HTTP.Service are overridable.

0.18.0 - 2018-10-28

Changed

  • use Ace.HTTP.Service no longer automatically adds a Raxx Server behaviour. Modules making use of Ace.HTTP.Service should now explicitly add Raxx.Server or Raxx.SimpleServer.

0.17.1 - 2018-09-21

Fixed

  • Issue 113 by adding send_timeout to sockets.

0.17.0 - 2018-09-12

Changed

  • Updated to use Raxx 0.16.0 interface.

0.16.8 - 2018-08-30

Added

  • Formatter check to travis.
  • Dialyzer check to travis.
  • HTTP/1 request backpressure.

Changed

  • Internal updates to use serialization and parsing from Raxx project

Fixed

  • Exit with status :normal in case where set_active call is made on closed socket.

0.16.7 - 2018-07-15

Fixed

  • Requests with duplicate headers no longer cause Elixir.RuntimeError: Headers should not be duplicated.

0.16.6 - 2018-07-05

Added

  • Ace.HTTP.Service.count_connections/1 returns a number of connected clients for a given service.

0.16.5 - 2018-06-04

Fixed

  • Handle error case when trying to send data via an already closed connection.

0.16.4 - 2018-04-28

Added

  • Arguments to the child_spec of a service are now optional.

0.16.3 - 2018-04-22

Added

  • Use raxx 0.15.1 which adds a raw_path field to requests

0.16.2 - 2018-04-21

Fixed

  • Make sure endpoint process replies to worker when sending complete response so worker exits normally instead of crashing.

0.16.1 - 2018-04-18

Added

  • Ace.HTTP.Channel to encapsulate information about an exchange within the context of a connection.
  • Ace.HTTP.Worker.start_link/2 workers must be started with a channel in addition to application.
  • Channel struct is added to the process dictionary of a worker, so socket information is available.

Removed

  • Ace.HTTP2.Stream.Reset undocumented internal module.

0.16.0 - 2018-04-18

Changed

  • Use raxx 0.15 which has does not expect query strings to be parsed.

0.15.11 - 2018-03-28

Added

  • .formatter.exs file for use with Elixir 1.6+
  • Ace.HTTP1.Parser.parse/2 returns categorized HTTP/2 frame instead of raw frame parts.

Removed

  • Ace.HTTP1.Parser.parse_from_buffer/2 use Ace.HTTP1.Parser.parse/2 instead.
  • Ace.HTTP2.Server undocumented internal module.

0.15.10 - 2018-01-20

Fixed

  • Use GenServer behaviour in Ace.HTTP2.Connection to add default handlers.
  • Ensure Endpoint handles its worker dying when sending chunked response.

0.15.9 - 2018-01-11

Added

  • __using__/1 macro to Ace.HTTP.Service that defines start_link and child_spec.

0.15.8 - 2018-01-01

Added

  • Ace.HTTP1.Parser extracts functionality to incrementally parse data into parts of a Raxx message.
  • Server module is checked to implement Raxx.Server behaviour when starting a service.
  • Client.stop/1 breaks connection established by a client.
  • Ace.HTTP.Service.child_spec/1 added so services can be added to supervision trees in standard manner.
  • Ace.HTTP.Worker module added to public api.

Removed

  • Ace.Governor.Supervisor is no longer necessary.

Fixed

  • Request has scheme of :http when transmitted over tcp connection.
  • Worker monitors endpoint and will stop when endpoint stops.

0.15.7 - 2017-12-28

Added

  • OPTIONS, TRACE and CONNECT method are understood in HTTP/2 requests.

0.15.5 - 2017-11-29

Fixed

  • Ensure worker process terminates when complete response is sent.

0.15.4 - 2017-11-11

Added

  • HTTP1.Endpoint sends 500 response when worker process crashes.

Changed

  • Use Logger.debug to print warning about closing keep-alive connections.

0.15.3 - 2017-11-05

Removed

  • No dependency on HTTPStatus.

0.15.2 - 2017-10-29

Changed

  • Rely on 0.14.x of raxx.

0.15.1 - 2017-10-25

Fixed

  • Server startup logs include port number when serving via cleartext.

0.15.0 - 2017-10-16

Changed

  • Rely on 0.13.x of raxx.

Removed

  • Ace.HTTP2.Service, instead use Ace.HTTP.Service.

0.14.8 - 2017-10-9

Added

  • Upgrade via ALPN to HTTP/2 connections, when using Ace.HTTP.Service.

0.14.7 - 2017-10-4

Removed

  • Ace.Application undocumented internal module
  • Ace.TCP undocumented internal module
  • Ace.TLS undocumented internal module
  • Ace.Server undocumented internal module
  • Ace.Server.Supervisor undocumented internal module

Fixed

  • Limit forwarded keys to known ssl options only.
  • HTTP/2 connection always sends a Raxx.Trailer to close a stream with data.

0.14.6 - 2017-09-29

Fixed

  • Workers exit normally when client connection is lost prematurely.

0.14.5 - 2017-09-28

Added

  • Ace.HTTP.Service to communicate with HTTP/1 clients, functionality previously provided in ace_http.

0.14.4 - 2017-09-27

Fixed

  • Stream will not queue data to send that is not a binary.

0.14.3 - 2017-09-25

Fixed

  • Fixes made in 0.9.2 and 0.9.3 added to lastest.

0.14.2 - 2017-09-19

Added

  • Ace.HTTP2.ping/2 for checking a connection.

0.14.1 - 2017-09-08

Added

  • Client certificate options added to Ace.HTTP2.Client.start_link.

0.14.0 - 2017-08-31

Added

  • Send any Raxx message using Ace.HTTP2.send/2.

Changed

  • Start services with {hander, config} instead of {worker, args}
  • All use of Ace.Request has been replaced with Raxx.Request.
  • All use of Ace.Response has been replaced with Raxx.Response.

Removed

  • Ace.Raxx.Handler all applications are assumed to be raxx applications
  • Ace.HTTP2.Client.send_request/2 use Ace.HTTP2.send/2.
  • Ace.HTTP2.Client.send_data/2 use Ace.HTTP2.send/2.
  • Ace.HTTP2.Client.send_trailers/2 use Ace.HTTP2.send/2.
  • Ace.HTTP2.Server.send_request/2 use Ace.HTTP2.send/2.
  • Ace.HTTP2.Server.send_data/2 use Ace.HTTP2.send/2.
  • Ace.HTTP2.Server.send_promise/2 use Ace.HTTP2.send/2.
  • Ace.HTTP2.Server.send_reset/2 server should exit instead.

0.13.1 - 2017-08-26

Added

  • Client can start with :enable_push option.
  • Client can start with :max_concurrent_streams option.
  • Server push is only forwarded to client if accepted by client.

Fixed

  • PushPromise frames do not exceed maximum frame size.
  • Continuation frames must follow on same stream.

0.13.0 - 2017-08-23

Changed

  • Request scheme is atom instead of string.
  • Request method is atom instead of string.

0.12.1 - 2017-08-22

Fixed

  • Raxx changed from being an optional dependency

0.9.3 - 2017-08-20

Changed

  • Discard down messages from unknown monitors.
  • Accept request with absolute URL's in request line.

0.12.0 - 2017-08-17

Added

  • Client can fetch an idle stream using Ace.HTTP2.Client.stream/1.
  • Forward stream resets with reason to worker processes.
  • Ace.HTTP2.Client.send_request/2.
  • Ace.HTTP2.Client.send_trailers/2.
  • Ace.HTTP2.Server.send_response/2.
  • Ace.HTTP2.Server.send_reset/2.
  • Inspect protocol implementation for each frame type.

Changed

  • Server receives request object not raw headers.
  • Server sends with response object not raw headers.
  • Client cannot start a stream with request.
  • Ace.HTTP2.Stream.RaxxHandler renamed to Ace.Raxx.Handler

0.9.2 - 2017-08-4

Fixed

  • Governor to correctly demonitor started servers.

0.11.1 - 2017-08-03

Added

  • Client for HTTP/2.0.

0.11.0 - 2017-08-01

Added

  • Casting for accepted values for each known setting.
  • Flow control for outbound data.

Changed

  • Creating priority frame requires exclusive value.

Fixed

  • Graceful handling of closed connections.
  • Correctly keep state for multiple connection frames.
  • Discard trailers sent to Raxx handler.
  • Frames of unknown type are discarded.
  • Ignores unknown flags for each frame type.
  • Ignores value of reserved bit in frame head.
  • Ensure only continuation frames can be sent after end_headers is false.
  • Return protocol error for invalid priority frame.
  • Return protocol error for invalid rst_stream frame.
  • Recognise reseting idle stream as a protocol error.
  • Decoding of acked ping frame.
  • Correct error codes for invalid window updates.
  • Handle unknown error code from client.
  • Limit pseudo-headers to those defined in RFC7540.
  • All pseudo-headers must be sent before other headers.
  • Header keys must be lowercase.
  • Pseudo header values cannot be empty.
  • Fix off by one error for maximum size of frames.
  • Return protocol error for header or data sent after a stream reset.
  • Forbid unknown frames to be present in a continuation stream.
  • Treat incorrect content length as protocol error.
  • Trailing header block must end the stream.
  • Protocol error if starting new stream with lower stream_id.
  • Disallow flow control windows from exceeding maximum value.

0.10.0 - 2017-07-21

Added

  • HTTP/2.0 support via Ace.HTTP2

0.9.1 - 2017-06-14

Changed

  • Reduced noise from errors of prematurely closed connections.

0.9.0 - 2017-04-16

Changed

  • Requires Elixir 1.4 and above, required applications are now listed as extra_applications.

0.8.1 - 2017-04-02

Added

  • Warning logged when application module is not using the Ace.Application behaviour.

0.8.0 - 2017-03-26

Added

  • Ace.TLS for tcp/ssl endpoints, matching Ace.TCP function profiles.
  • Ace.Connection to normalise :gen_tcp/:ssl interfaces.
  • Governors can be throttled to zero to drain connections, see Ace.Governor.Supervisor.drain/1

Changed

  • New connection calls handle_connect/2 not init/2
  • Connection lost calls handle_disconnect/2 not terminate/2
  • Ace.TCP is now the callback module when starting and endpoint, there is no Ace.TCP.Endpoint module anymore.
  • Ace.Governor now a GenServer to handle OTP sys calls

Removed

  • Ace.TCP.Server, now Ace.Server.
  • Ace.TCP.Server.Supervisor, now Ace.Server.Supervisor.
  • Ace.TCP.Governor, now Ace.Governor.
  • Ace.TCP.Governor.Supervisor, now Ace.Governor.Supervisor.

0.7.1 - 2017-02-13

Changed

  • Startup information is printed using Logger and not directly IO.

Fixed

  • Remove warnings about bracket use from Elixir 1.4.

0.7.0 - 2016-10-26

Added

  • Support a response with a timeout from server modules. Passed directly to GenServer so integer and :hibernate responses are supported.
  • Support closing the connection from the server side. It is best to reserver server side closing for misbehaving connections.
  • Added callbacks to Ace.TCP.Server so that is can be included as a behaviour.

0.6.3 - 2016-10-24

Changed

  • Information for new connections is now passed to the server as a map.

0.6.2 - 2016-10-24

Added

  • Endpoints can be registered as named processes by passing in a value for the :name option. Possible values for this are the same as for the underlying GenServer.
  • The number of servers simultaneously accepting can now be configured. Pass an integer value to the :acceptors option when starting and endpoint. Default value is 50.

0.6.1 - 2016-10-17

Added

  • Ace.TCP.Endpoint.port/1 will return the port an endpoint is listening too. Required when the port option is set to 0 and the port is allocated by the OS.

Fixed

  • The handle_packet and handle_info callbacks for a server module are able produce a return of the format {:nosend, state}.

0.6.0 - 2016-10-17

Added

  • Collect all processes in an endpoint GenServer so that they can be started as a unit and only the endpoint is linked to the calling process. This allows for endpoints to be added to supervision tree.

Removed

  • Ace.TCP.start/2 use start_link/2 instead which takes app as the first argument not the second.

0.5.2 - 2016-10-13

Changed

  • The governors will keeps starting server processes to match demand.

0.5.1 - 2016-10-10

Changed

  • Send any message that is not TCP related to the handle_info callback, previous only messages that matched {:data, info} where handled.

0.5.0 - 2016-10-07

Added

  • How to hande a tcp connection is specified by an application server module.

0.4.0 - 2016-10-06

Added

  • System sends welcome message.
  • System sends data messages over the socket.

Changed

  • Starting a server no longer blocks until the connection has been closed.

0.3.0 - 2016-10-04

Added

  • Dialyzer for static analysis, with updated contributing instructions.

Changed

  • Nothing, only bumped version due to incorrect publishing on hex.

0.2.0 - 2016-10-04

Added

  • ExUnit test suit and single test case.
  • ExDoc for first hex published version.

Changed

  • Restructured to a mix project. Follow new start up instructions in README.

0.1.1 - 2016-10-03

Fixed

  • Handle socket closed by client.

0.1.0 - 2016-09-18

Added

  • The simplest TCP echo server.
  • All code exists in a single source file server.ex.
  • Documentation is added to the source code.