1.4.2 (2018-01-05)
------------------

* Bugfix for WebSocket protocol when X-Forwarded-For is turned on.


1.4.1 (2018-01-02)
------------------

* Bugfix for a bad merge of HTTPFactory for X-Forwarded-Proto causing Daphne
  to not start.


1.4.0 (2018-01-02)
------------------

* The X-Forwarded-Proto header can now be used to pass along protocol from
  a reverse proxy.

* WebSocket headers are now correctly always passed as bytestrings.


1.3.0 (2017-06-16)
------------------

* Ability to set the websocket connection timeout

* Server no longer reveals the exact Autobahn version number for security

* A few unicode fixes for Python 2/3 compatability

* Stopped logging messages to already-closed connections as ERROR


1.2.0 (2017-04-01)
------------------

* The new process-specific channel support is now implemented, resulting in
  significantly less traffic to your channel backend.

* Native twisted blocking support for channel layers that support it is now
  used. While it is a lot more efficient, it is also sometimes slightly more
  latent; you can disable it using --force-sync.

* Native SSL termination is now correctly reflected in the ASGI-HTTP `scheme`
  key.

* accept: False is now a valid way to deny a connection, as well as close: True.

* HTTP version is now correctly sent as one of "1.0", "1.1" or "2".

* More command line options for websocket timeouts


1.1.0 (2017-03-18)
------------------

* HTTP/2 termination is now supported natively. The Twisted dependency has been
  increased to at least 17.1 as a result; for more information about setting up
  HTTP/2, see the README.

* X-Forwarded-For decoding support understands IPv6 addresses, and picks the
  most remote (leftmost) entry if there are multiple relay hosts.

* Fixed an error where `disconnect` messages would still try and get sent even
  if the client never finished a request.


1.0.3 (2017-02-12)
------------------

* IPv6 addresses are correctly accepted as bind targets on the command line

* Twisted 17.1 compatability fixes for WebSocket receiving/keepalive and
  proxy header detection.


1.0.2 (2017-02-01)
------------------

* The "null" WebSocket origin (including file:// and no value) is now accepted
  by Daphne and passed onto the application to accept/deny.

* Listening on file descriptors works properly again.

* The DeprecationError caused by not passing endpoints into a Server class
  directly is now a warning instead.


1.0.1 (2017-01-09)
------------------

* Endpoint unicode strings now work correctly on Python 2 and Python 3


1.0.0 (2017-01-08)
------------------

* BREAKING CHANGE: Daphne now requires acceptance of WebSocket connections
  before it finishes the socket handshake and relays incoming packets.
  You must upgrade to at least Channels 1.0.0 as well; see
  http://channels.readthedocs.io/en/latest/releases/1.0.0.html for more.

* http.disconnect now has a `path` key

* WebSockets can now be closed with a specific code

* X-Forwarded-For header support; defaults to X-Forwarded-For, override with
  --proxy-headers on the commandline.

* Twisted endpoint description string support with `-e` on the command line
  (allowing for SNI/ACME support, among other things)

* Logging/error verbosity fixes and access log flushes properly


0.15.0 (2016-08-28)
-------------------

* Connections now force-close themselves after pings fail for a certain
  timeframe, controllable via the new --ping-timeout option.

* Badly-formatted websocket response messages now log to console in
  all situations

* Compatability with Twisted 16.3 and up


0.14.3 (2016-07-21)
-------------------

* File descriptors can now be passed on the commandline for process managers
  that pass sockets along like this.

* websocket.disconnect messages now come with a "code" attribute matching the
  WebSocket spec.

* A memory leak in request logging has been fixed.


0.14.2 (2016-07-07)
-------------------

* Marked as incompatible with twisted 16.3 and above until we work out why
  it stops incoming websocket messages working


0.14.1 (2016-07-06)
-------------------

* Consumption of websocket.receive is also now required.


0.14.0 (2016-07-06)
-------------------

* Consumption of websocket.connect is now required (channels 0.16 enforces
  this); getting backpressure on it now results in the socket being
  force closed.


0.13.1 (2016-06-28)
-------------------

* Bad WebSocket handshakes now return 400 and an error messages
  rather than 500 with no content.


0.13.0 (2016-06-22)
-------------------

* Query strings are now sent as bytestrings and the application is responsible
  for decoding. Ensure you're running Channels 0.15 or higher.


0.12.2 (2016-06-21)
-------------------

* Plus signs in query string are now handled by Daphne, not Django-by-mistake.
  Ensure you're running Channels 0.14.3 or higher.

* New --root-path and DAPHNE_ROOT_PATH options for setting root path.


0.12.1 (2016-05-18)
-------------------

* Fixed bug where a non-ASCII byte in URL paths would crash the HTTP parser
  without a response; now returns 400, and hardening in place to catch most
  other errors and return a 500.

* WebSocket header format now matches HTTP header format and the ASGI spec.
  No update needed to channels library, but user code may need updating.


0.12.0 (2016-05-07)
-------------------

* Backpressure on http.request now causes incoming requests to drop with 503.
  Websockets will drop connection/disconnection messages/received frames if
  backpressure is encountered; options are coming soon to instead drop the
  connection if this happens.


0.11.4 (2016-05-04)
-------------------

* Don't try to send TCP host info in message for unix sockets


0.11.3 (2016-04-27)
-------------------

* Don't decode + as a space in URLs


0.11.2 (2016-04-27)
-------------------

* Correctly encode all path params for WebSockets


0.11.1 (2016-04-26)
-------------------

* Fix bugs with WebSocket path parsing under Python 2


0.11.0 (2016-04-26)
-------------------

* HTTP paths and query strings are now pre-decoded before going to ASGI


0.10.3 (2016-04-05)
-------------------

* Error on badly formatted websocket reply messages


0.10.2 (2016-04-03)
-------------------

* Access logging in NCSAish format now printed to stdout, configurable to
  another file using --access-log=filename


0.10.1 (2016-03-29)
-------------------

* WebSockets now close after they've been open for longer than the channel
  layer group expiry (86400 seconds by default for most layers).

* Binding to UNIX sockets is now possible (use the -u argument)

* WebSockets now send keepalive pings if they've had no data for a certain
  amount of time (20 seconds by default, set with --ping-interval)


0.10.0 (2016-03-21)
-------------------

* Multiple cookies are now set correctly

* Follows new ASGI single-response-channel spec for !

* Follows new ASGI header encoding spec for HTTP


0.9.3 (2016-03-08)
------------------

* WebSocket query strings are correctly encoded


0.9.2 (2016-03-02)
------------------

* HTTP requests now time out after a configurable amount of time and return 503
  (default is 2 minutes)


0.9.1 (2016-03-01)
------------------

* Main thread actually idles rather than sitting at 100%

* WebSocket packets have an "order" attribute attached

* WebSocket upgrade header detection is now case insensitive


0.9 (2016-02-21)
----------------

* Signal handlers can now be disabled if you want to run inside a thread
  (e.g. inside Django autoreloader)

* Logging hooks that can be used to allow calling code to show requests
  and other events.

* Headers are now transmitted for websocket.connect

* http.disconnect messages are now sent

* Request handling speed significantly improved 
