Current section

Files

Jump to
ace CHANGELOG.md
Raw

CHANGELOG.md

# Change Log
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## [0.18.9](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.18.8) - 2019-04-29
### Fixed
- HTTP2 connection handles case when peer cleanly closes connection.
## [0.18.7](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.18.6) - 2019-04-16
### Added
- Support for raxx 1.0.0.
## [0.18.5](https://github.com/CrowdHailer/Ace/tree/0.18.5) - 2019-03-19
### Fixed
- Correctly handled `te` header when parsing HTTP/2 requests.
## [0.18.4](https://github.com/CrowdHailer/Ace/tree/0.18.4) - 2019-02-07
### Added
- Support for raxx 0.18.0.
## [0.18.3](https://github.com/CrowdHailer/Ace/tree/0.18.3) - 2019-01-31
### Fixed
- Fixed `Ace.HTTP2.Connection` to handle application data sent as iolist.
## [0.18.2](https://github.com/CrowdHailer/Ace/tree/0.18.2) - 2019-01-04
### Fixed
- Fix incorrectly displayed warning from `use Raxx.SimpleServer`.
## [0.18.1](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.17.1) - 2018-09-21
### Fixed
- Issue [113](https://github.com/CrowdHailer/Ace/issues/113) by adding `send_timeout` to sockets.
## [0.17.0](https://github.com/CrowdHailer/Ace/tree/0.17.0) - 2018-09-12
### Changed
- Updated to use Raxx `0.16.0` interface.
## [0.16.8](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.16.7) - 2018-07-15
### Fixed
- Requests with duplicate headers no longer cause `Elixir.RuntimeError: Headers should not be duplicated`.
## [0.16.6](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.16.5) - 2018-06-04
### Fixed
- Handle error case when trying to send data via an already closed connection.
## [0.16.4](https://github.com/CrowdHailer/Ace/tree/0.16.4) - 2018-04-28
### Added
- Arguments to the child_spec of a service are now optional.
## [0.16.3](https://github.com/CrowdHailer/Ace/tree/0.16.3) - 2018-04-22
### Added
- Use `raxx 0.15.1` which adds a `raw_path` field to requests
## [0.16.2](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.16.0) - 2018-04-18
### Changed
- Use `raxx 0.15` which has does not expect query strings to be parsed.
## [0.15.11](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.15.9) - 2018-01-11
### Added
- `__using__/1` macro to `Ace.HTTP.Service` that defines `start_link` and `child_spec`.
## [0.15.8](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.15.7) - 2017-12-28
### Added
- `OPTIONS`, `TRACE` and `CONNECT` method are understood in HTTP/2 requests.
## [0.15.5](https://github.com/CrowdHailer/Ace/tree/0.15.5) - 2017-11-29
### Fixed
- Ensure worker process terminates when complete response is sent.
## [0.15.4](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.15.3) - 2017-11-05
### Removed
- No dependency on `HTTPStatus`.
## [0.15.2](https://github.com/CrowdHailer/Ace/tree/0.15.2) - 2017-10-29
### Changed
- Rely on `0.14.x` of raxx.
## [0.15.1](https://github.com/CrowdHailer/Ace/tree/0.15.1) - 2017-10-25
### Fixed
- Server startup logs include port number when serving via cleartext.
## [0.15.0](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.14.8) - 2017-10-9
### Added
- Upgrade via ALPN to HTTP/2 connections, when using `Ace.HTTP.Service`.
## [0.14.7](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.14.6) - 2017-09-29
### Fixed
- Workers exit normally when client connection is lost prematurely.
## [0.14.5](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.14.4) - 2017-09-27
### Fixed
- Stream will not queue data to send that is not a binary.
## [0.14.3](https://github.com/CrowdHailer/Ace/tree/0.14.3) - 2017-09-25
### Fixed
- Fixes made in `0.9.2` and `0.9.3` added to lastest.
## [0.14.2](https://github.com/CrowdHailer/Ace/tree/0.14.2) - 2017-09-19
### Added
- `Ace.HTTP2.ping/2` for checking a connection.
## [0.14.1](https://github.com/CrowdHailer/Ace/tree/0.14.1) - 2017-09-08
### Added
- Client certificate options added to `Ace.HTTP2.Client.start_link`.
## [0.14.0](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.13.0) - 2017-08-23
### Changed
- Request scheme is atom instead of string.
- Request method is atom instead of string.
## [0.12.1](https://github.com/CrowdHailer/Ace/tree/0.12.1) - 2017-08-22
### Fixed
- Raxx changed from being an optional dependency
## [0.9.3](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.9.2) - 2017-08-4
### Fixed
- Governor to correctly demonitor started servers.
## [0.11.1](https://github.com/CrowdHailer/Ace/tree/0.11.1) - 2017-08-03
### Added
- Client for HTTP/2.0.
## [0.11.0](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.10.0) - 2017-07-21
### Added
- HTTP/2.0 support via `Ace.HTTP2`
## [0.9.1](https://github.com/CrowdHailer/Ace/tree/0.9.1) - 2017-06-14
### Changed
- Reduced noise from errors of prematurely closed connections.
## [0.9.0](https://github.com/CrowdHailer/Ace/tree/0.9.0) - 2017-04-16
### Changed
- Requires Elixir 1.4 and above,
required applications are now listed as `extra_applications`.
## [0.8.1](https://github.com/CrowdHailer/Ace/tree/0.8.1) - 2017-04-02
### Added
- Warning logged when application module is not using the `Ace.Application` behaviour.
## [0.8.0](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.6.3) - 2016-10-24
### Changed
- Information for new connections is now passed to the server as a map.
## [0.6.2](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.5.2) - 2016-10-13
### Changed
- The governors will keeps starting server processes to match demand.
## [0.5.1](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.5.0) - 2016-10-07
### Added
- How to hande a tcp connection is specified by an application server module.
## [0.4.0](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/tree/0.1.1) - 2016-10-03
### Fixed
- Handle socket closed by client.
## [0.1.0](https://github.com/CrowdHailer/Ace/tree/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](https://github.com/CrowdHailer/Ace/blob/master/server.ex).