## [0.34.0]
### Added
* Added tests for some of the print utility functions and classes.
* Added the `QNETHERNET_ENABLE_PING_REPLY` macro to disable ICMP echo replies.
* Added a "Requirements" section listing some library requirements to
the README.
* Added a `QNETHERNET_PROVIDE_GNU_VERBOSE_TERMINATE_HANDLER` configuration
option for including our own version of
`__gnu_cxx::__verbose_terminate_handler` for space-saving reasons.
* New `StreamDecorator` class that also does `printf` checking.
* Added `driver_restart_auto_negotiation()` driver function for restarting link
auto-negotiation. This is useful for when EMF brings the link down. A new
"EMF interference mitigation" section was also added to the Readme.
* Added `qindesign::network::util::isBroadcast(ip, localIP, mask)`.
* New `EthernetUDP::destIP()` for getting the destination IP address from
a received packet.
### Changed
* Improved code style and structure.
* Made `NullPrint::availableForWrite()` return `INT_MAX` instead of zero.
* Changed `EthernetUDP::stop()` to not clear the current packet.
* Changed `DNSClient::hostByName()` functions to use a default value of
`QNETHERNET_DEFAULT_DNS_LOOKUP_TIMEOUT` for the timeout parameter.
* Improved _SimplePing_ example to catch DNS lookup errors.
* Changed ping send enable macro to `QNETHERNET_ENABLE_PING_SEND`
from `QNETHERNET_ENABLE_PING`.
* Updated to support C++11 and C11 compilers.
* Improved setting of `errno`.
* Added `printf` checking to `PrintDecorator`.
* Replaced function-like-macros with `static inline` C functions.
* Renamed `QNETHERNET_ENABLE_ALTCP_DEFAULT_FUNCTIONS` macro
to `QNETHERNET_PROVIDE_ALTCP_DEFAULT_FUNCTIONS`.
* `EthernetUDP` and `EthernetFrame` now share some common circular buffer code
in an internal utility class.
* Replaced macros in `EthernetClient` with inline functions.
### Fixed
* Fixed `EthernetUDP` internal packet clear to reset all variables.
* Now keeping any manually-set link UP state sticky so that the driver can
choose not to set it to DOWN.
* Updated _Ping_ and _SimplePing_ examples to work with other systems by
changing use of `elapsedMillis` to `unsigned long` plus calculations.
* Fixed `ConnectionManager::iterateConnections()` calls to not call
`Ethernet.loop()` in the callback because that could potentially invalidate
the iterator. Also added notes about potential iteration invalidation to the
`iterateConnections()` and `iterateListeners()` docs.
* Fixed `EthernetClient` `read()` and `peek()` to return the correct value if
not connected.