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.
- Adds CI-only ExUnit test that downloads and runs h2spec
- Correctly handles frame of unknown type
0.18.10 - 2020-02-16
- New option
error_response
forAce.HTTP.Service
.
0.18.9 - 2019-10-30
- Allow the users to specify socket options and opt out of HTTP/1.1 or HTTP2.
- Fix dialyzer warning about
:elixir_errors.warn
on Elixir >= 1.9.0
0.18.8 - 2019-04-29
- HTTP2 connection handles case when peer cleanly closes connection.
0.18.7 - 2019-04-25
- 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
- Support for raxx 1.0.0.
0.18.5 - 2019-03-19
- Correctly handled
te
header when parsing HTTP/2 requests.
0.18.4 - 2019-02-07
- Support for raxx 0.18.0.
0.18.3 - 2019-01-31
- Fixed
Ace.HTTP2.Connection
to handle application data sent as iolist.
0.18.2 - 2019-01-04
- Fix incorrectly displayed warning from
use Raxx.SimpleServer
.
0.18.1 - 2018-11-22
- Both
start_link/1,2
andchild_spec/1
generated byAce.HTTP.Service
are overridable.
0.18.0 - 2018-10-28
use Ace.HTTP.Service
no longer automatically adds a Raxx Server behaviour. Modules making use ofAce.HTTP.Service
should now explicitly addRaxx.Server
orRaxx.SimpleServer
.
0.17.1 - 2018-09-21
- Issue 113 by adding
send_timeout
to sockets.
0.17.0 - 2018-09-12
- Updated to use Raxx
0.16.0
interface.
0.16.8 - 2018-08-30
- Formatter check to travis.
- Dialyzer check to travis.
- HTTP/1 request backpressure.
- Internal updates to use serialization and parsing from Raxx project
- Exit with status
:normal
in case where set_active call is made on closed socket.
0.16.7 - 2018-07-15
- Requests with duplicate headers no longer cause
Elixir.RuntimeError: Headers should not be duplicated
.
0.16.6 - 2018-07-05
Ace.HTTP.Service.count_connections/1
returns a number of connected clients for a given service.
0.16.5 - 2018-06-04
- Handle error case when trying to send data via an already closed connection.
0.16.4 - 2018-04-28
- Arguments to the child_spec of a service are now optional.
0.16.3 - 2018-04-22
- Use
raxx 0.15.1
which adds araw_path
field to requests
0.16.2 - 2018-04-21
- Make sure endpoint process replies to worker when sending complete response so worker exits normally instead of crashing.
0.16.1 - 2018-04-18
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.
Ace.HTTP2.Stream.Reset
undocumented internal module.
0.16.0 - 2018-04-18
- Use
raxx 0.15
which has does not expect query strings to be parsed.
0.15.11 - 2018-03-28
.formatter.exs
file for use with Elixir 1.6+Ace.HTTP1.Parser.parse/2
returns categorized HTTP/2 frame instead of raw frame parts.
Ace.HTTP1.Parser.parse_from_buffer/2
useAce.HTTP1.Parser.parse/2
instead.Ace.HTTP2.Server
undocumented internal module.
0.15.10 - 2018-01-20
- Use
GenServer
behaviour inAce.HTTP2.Connection
to add default handlers. - Ensure Endpoint handles its worker dying when sending chunked response.
0.15.9 - 2018-01-11
__using__/1
macro toAce.HTTP.Service
that definesstart_link
andchild_spec
.
0.15.8 - 2018-01-01
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.
Ace.Governor.Supervisor
is no longer necessary.
- Request has scheme of
:http
when transmitted overtcp
connection. - Worker monitors endpoint and will stop when endpoint stops.
0.15.7 - 2017-12-28
OPTIONS
,TRACE
andCONNECT
method are understood in HTTP/2 requests.
0.15.5 - 2017-11-29
- Ensure worker process terminates when complete response is sent.
0.15.4 - 2017-11-11
- HTTP1.Endpoint sends 500 response when worker process crashes.
- Use
Logger.debug
to print warning about closing keep-alive connections.
0.15.3 - 2017-11-05
- No dependency on
HTTPStatus
.
0.15.2 - 2017-10-29
- Rely on
0.14.x
of raxx.
0.15.1 - 2017-10-25
- Server startup logs include port number when serving via cleartext.
0.15.0 - 2017-10-16
- Rely on
0.13.x
of raxx.
Ace.HTTP2.Service
, instead useAce.HTTP.Service
.
0.14.8 - 2017-10-9
- Upgrade via ALPN to HTTP/2 connections, when using
Ace.HTTP.Service
.
0.14.7 - 2017-10-4
Ace.Application
undocumented internal moduleAce.TCP
undocumented internal moduleAce.TLS
undocumented internal moduleAce.Server
undocumented internal moduleAce.Server.Supervisor
undocumented internal module
- 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
- Workers exit normally when client connection is lost prematurely.
0.14.5 - 2017-09-28
Ace.HTTP.Service
to communicate with HTTP/1 clients, functionality previously provided inace_http
.
0.14.4 - 2017-09-27
- Stream will not queue data to send that is not a binary.
0.14.3 - 2017-09-25
- Fixes made in
0.9.2
and0.9.3
added to lastest.
0.14.2 - 2017-09-19
Ace.HTTP2.ping/2
for checking a connection.
0.14.1 - 2017-09-08
- Client certificate options added to
Ace.HTTP2.Client.start_link
.
0.14.0 - 2017-08-31
- Send any Raxx message using
Ace.HTTP2.send/2
.
- Start services with
{hander, config}
instead of{worker, args}
- All use of
Ace.Request
has been replaced withRaxx.Request
. - All use of
Ace.Response
has been replaced withRaxx.Response
.
Ace.Raxx.Handler
all applications are assumed to be raxx applicationsAce.HTTP2.Client.send_request/2
useAce.HTTP2.send/2
.Ace.HTTP2.Client.send_data/2
useAce.HTTP2.send/2
.Ace.HTTP2.Client.send_trailers/2
useAce.HTTP2.send/2
.Ace.HTTP2.Server.send_request/2
useAce.HTTP2.send/2
.Ace.HTTP2.Server.send_data/2
useAce.HTTP2.send/2
.Ace.HTTP2.Server.send_promise/2
useAce.HTTP2.send/2
.Ace.HTTP2.Server.send_reset/2
server should exit instead.
0.13.1 - 2017-08-26
- 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.
- PushPromise frames do not exceed maximum frame size.
- Continuation frames must follow on same stream.
0.13.0 - 2017-08-23
- Request scheme is atom instead of string.
- Request method is atom instead of string.
0.12.1 - 2017-08-22
- Raxx changed from being an optional dependency
0.9.3 - 2017-08-20
- Discard down messages from unknown monitors.
- Accept request with absolute URL's in request line.
0.12.0 - 2017-08-17
- 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.
- 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 toAce.Raxx.Handler
0.9.2 - 2017-08-4
- Governor to correctly demonitor started servers.
0.11.1 - 2017-08-03
- Client for HTTP/2.0.
0.11.0 - 2017-08-01
- Casting for accepted values for each known setting.
- Flow control for outbound data.
- Creating priority frame requires exclusive value.
- 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
- HTTP/2.0 support via
Ace.HTTP2
0.9.1 - 2017-06-14
- Reduced noise from errors of prematurely closed connections.
0.9.0 - 2017-04-16
- Requires Elixir 1.4 and above,
required applications are now listed as
extra_applications
.
0.8.1 - 2017-04-02
- Warning logged when application module is not using the
Ace.Application
behaviour.
0.8.0 - 2017-03-26
Ace.TLS
for tcp/ssl endpoints, matchingAce.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
- New connection calls
handle_connect/2
notinit/2
- Connection lost calls
handle_disconnect/2
notterminate/2
Ace.TCP
is now the callback module when starting and endpoint, there is noAce.TCP.Endpoint
module anymore.Ace.Governor
now aGenServer
to handle OTP sys calls
Ace.TCP.Server
, nowAce.Server
.Ace.TCP.Server.Supervisor
, nowAce.Server.Supervisor
.Ace.TCP.Governor
, nowAce.Governor
.Ace.TCP.Governor.Supervisor
, nowAce.Governor.Supervisor
.
0.7.1 - 2017-02-13
- Startup information is printed using
Logger
and not directlyIO
.
- Remove warnings about bracket use from Elixir 1.4.
0.7.0 - 2016-10-26
- 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
- Information for new connections is now passed to the server as a map.
0.6.2 - 2016-10-24
- 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 underlyingGenServer
. - 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
Ace.TCP.Endpoint.port/1
will return the port an endpoint is listening too. Required when the port option is set to0
and the port is allocated by the OS.
- The
handle_packet
andhandle_info
callbacks for a server module are able produce a return of the format{:nosend, state}
.
0.6.0 - 2016-10-17
- 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.
Ace.TCP.start/2
usestart_link/2
instead which takes app as the first argument not the second.
0.5.2 - 2016-10-13
- The governors will keeps starting server processes to match demand.
0.5.1 - 2016-10-10
- 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
- How to hande a tcp connection is specified by an application server module.
0.4.0 - 2016-10-06
- System sends welcome message.
- System sends data messages over the socket.
- Starting a server no longer blocks until the connection has been closed.
0.3.0 - 2016-10-04
- Dialyzer for static analysis, with updated contributing instructions.
- Nothing, only bumped version due to incorrect publishing on hex.
0.2.0 - 2016-10-04
- ExUnit test suit and single test case.
- ExDoc for first hex published version.
- Restructured to a mix project. Follow new start up instructions in README.
0.1.1 - 2016-10-03
- Handle socket closed by client.
0.1.0 - 2016-09-18
- The simplest TCP echo server.
- All code exists in a single source file
server.ex
. - Documentation is added to the source code.