-----------
Multicast improvements
~~~~~~~~~~~~~~~~~~~~~~
* Multicast groups are not joined by default any more. Instead, groups and
interfaces on which to join need to be specified explicitly. The previous
mechanism was unreliable, and only joined on one (more or less random)
interface.
* Network interfaces can now be specified in remotes of larger than link-local
scope.
* In udp6, network interface are selected via PKTINFO now. They used to be
selected using the socket address tuple, but that was limited to link-local
addresses, but PKTINFO worked just as well for link-local addresses.
* Remote addresses in udp6 now have a ``netif`` property.
New features
~~~~~~~~~~~~
* The simple6 transport can now indicate the local address when supported by
the platoforrm. This makes it a viable candidate for LwM2M clients as they
often operate using role reversal.
* Servers (including the shipped examples) can now offer OSCORE through the
OSCORE sitewrapper.
Access control is only rudimentary in that the authorization information is
not available in a convenient form yet.
* CoAP over WebSockets is now supported (in client and server role, with and
without TLS). Please note that the default port bound to is not the HTTP
default port but 8683.
* OSCORE group communication is now minimally supported (based on draft version
10). No automated ways of setting up a context are provided yet.
This includes highly experimental support for deterministic requests.
* DTLS: Terminating connections are now handled correctly, and shut down when
unused.
The associated refactoring also reduces the resource usage of DTLS
connections.
Tools updates
~~~~~~~~~~~~~
* aiocoap-client: New options to
* set initial Block1 size (``--payload-initial-szx``), and to
* elide the Uri-Host option from requests to named hosts.
* aiocoap-client: CBOR input now accepts Python literals or JSON automatically,
and can thus produce numeric keys and byte strings.
* aiocoap-client: Preprocessed CBOR output now works for any CBOR-based content
format.
* resource-directory: Updated to draft -25.
* resource-directory: Compatibility mode for LwM2M added.
* resource-directory: Proxying extension implemented. With this, and RD can be
configured to allow access to endpoints behind a firewalls or NAT.
* Example server: Add /whoami resource.
Dependencies
~~~~~~~~~~~~
* The minimum required Python version is now 3.7.
* The cbor library dependency was replaced with the cbor2 library.
* The dependency on the hkdf library was removed.
* The ge25519 library dependency was added to perform key conversion steps necessary for Group OSCORE.
Portability
~~~~~~~~~~~
* Several small adjustments were made to accomodate execution on Windows.
* FreeBSD was added to the list of supported systems (without any need for changes).
Fixes possibly breaking applications
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Some cases of OSError were previously raised in responses. Those are now all
expressed as an aiocoap.error.NetworkError, so that an application only need
to catch aiocoap.error.Error for anything that's expected to go wrong.
The original error cause is available in a chained exception.
* Responses are not deduplicated any more; as a result, less state is kept in
the library.
As a result, separate responses whose ACKs get lost produce an RST the second
time the CON comes. This changes nothing about the client-side handling
(which is complete either way with the first response), but may upset servers
that do not anticipate this allowed behavior.
Minor fixes
~~~~~~~~~~~
* The repr of udp6 addresses now shows all address components.
* Debug information output was increased in several spots.
* The ``loop=`` parameter was removed where it is deprecated by Python 3.8.
* asyncio Futures are created using create_future in some places.
* Binding to port 0 works again.
* The file server's registration at an RD was fixed.
* File server directories can now use block-wise transfer.
* Server errors from rendering exceptions to messages are now caught.
* Notifications now respect the block size limit.
* Several improvements to the test infrastructure.
* Refactoring around request processing internals (PlumbingRequest) alleviated potential memory leaks.
* Update option numbers from draft-ietf-echo-request-tag-10.
* Various proxying fixes and enhancements.
* TLS: Use SNI (Python >= 3.8), set correct hostinfo based on it.
* Internally used NoResponse options on responses are not leaked any more.
* Timeouts from one remote are now correctly propagated to all pending requests.
* Various logging improvements and changes.
* udp6: Show warnings when operating system fails to deliver pktinfo (happens with very old Linux kernels).
* Reduce installation clobber by excluding tests.
* Enhanced error reporting for erroneous ``coap://2001:db8::1/`` style URIs
* Improve OSCORE's shutdown robustness.
* Sending to IPv4 literals now does not send the Uri-Host automatically any more.