- Fixed a bug where CoAP downloader retries were not being triggered when exchange was timed out, but the socket was still connected.
- Fixed a bug where CoAP downloader didn't send Empty ACK in separate response
mode at the end of the download and after the last block before calling
anj_coap_downloader_suspend().
- Empty Plain Text and Opaque payloads in Write operations are now processed as zero-length string and byte values instead of being skipped.
- Pinned the GitPython Python package to a specific version, as version 3.1.60 contains a regression.
- Mark
anj_crypto_storage_*API as experimental. - Flags
ANJ_FOTA_WITH_COAPS,ANJ_NET_WITH_DTLS,ANJ_WITH_SECURITYandANJ_WITH_MBEDTLSare now enabled by default to comply with Secure by Default policy. FlagANJ_FOTA_WITH_COAPis now disabled by default. - Removed
ANJ_MBEDTLS_TLS_VERSION.ANJ_MBEDTLS_ALLOWED_CIPHERSUITEShas been replaced with separateANJ_MBEDTLS_ALLOWED_CERT_CIPHERSUITESandANJ_MBEDTLS_ALLOWED_PSK_CIPHERSUITESoptions. - Modified
anj_crypto_storage_*API, all records are now added in a single call. - Removed
anj_dm_security_obj_get_psk()function.
- Added support for certificate-based security in Anjay Lite and the Mbed TLS integration layer.
- Added Trust Store support for certificate-based security.
- Added a retry mechanism in COAP Downloader configured by
anj_coap_downloader_configuration_t::retry_countandanj_coap_downloader_configuration_t::retry_delay. - Added
anj_coap_downloader_suspend()andanj_coap_downloader_resume()API to CoAP Downloader. - New
security.hAPI allows you to retrieve security configuration from the Security Object. - Add
anj_crypto_zeroize()API for securely clearing sensitive data.
- Changed the Bootstrap transaction flow so that a single transaction now covers the entire Bootstrap process. This allows changes made during Bootstrap to be committed only after a successful Bootstrap Finish, instead of committing each LwM2M operation independently.
- Registration Retry attempts now log the total count of attempts.
tools/mbedtls_cache.pyhas been introduced to easily manage different versions and configurations of MbedTLS builds.- Removed usages of attribute((unused)) from the codebase.
- Refactored and streamlined the
anj_crypto_storage_*usage flow.
- Fixed an issue in the Mbed TLS integration related to the close function. When the Connection ID extension was not supported, no new handshake was performed when reconnecting after calling the close function.
- Updated documentation links in README.md.
- Added files necessary for installing pymbedtls (needed for integration tests)
- (commercial version only) Added support for OSCORE with Appendix B2 procedure.
- Internal headers now consistently prefix internal enum and macro symbols with
_ANJ_to avoid public-looking symbol leakage. - Improved and refactored logging to provide more detailed and informative messages.
- Replace all
usleep()uses in examples withnanosleep(). - Improved
anj_core_next_step_time()so that it also reflects delays before scheduled Bootstrap and Registration retry attempts.
- Fixed a bug where the network context was not properly closed and cleaned up after a connection failure during Bootstrap.
- Fixed sending retransmissions after receiving ACK (separate response)
- Fixed a bug that caused an assertion failure when handling a request with an empty token.
- Added Message ID validation for received messages.
- Fixed incorrect handling of a Non-confirmable Execute operation.
- Fixed missing empty ACK for confirmable separate error responses (CoAP 4.xx/5.xx) in the exchange layer.
- Fix a bug that made PSK identity length validation based on
MBEDTLS_PSK_MAX_LENinstead ofANJ_MBEDTLS_PSK_IDENTITY_MAX_LEN
- Removed support for TCP and TLS bindings in NET layer -
ANJ_NET_WITH_TCP,ANJ_COAP_WITH_UDP,ANJ_COAP_WITH_TCPoptions were removed. - Removed
anj_net_shutdownfrom NET layer. - Monotonic time is now the primary clock used for scheduling operations, replacing real-time clock usage across the codebase.
- NTP module for time synchronization.
- (commercial version only) Added default OSCORE Object implementation.
- Added support for canceling observations with CoAP RST message.
- Re-introduced
anj_core_ongoing_operationAPI. - Added
ANJ_OBSERVE_OBSERVATION_CANCEL_ON_TIMEOUToption to control behavior in case of notification timeouts. - Introduced
ANJ_LOG_MICROoption for optimizing footprint of logging withtools/micro_logs_decode.pytool to decode log messages.
- Switch RNG implementation from getrandom() to getentropy() for improved portability.
- Tests structure refactored in order to increase coverage.
- Shorter Send operation payloads due to the use of a common path when encoding messages.
- MbedTLS integration layer sets the correct MTU value.
- MbedTLS is now fetched and compiled only once when calling
make allvia rootCMakeLists.txt.
- Fixed a bug in TLV decoder that incorrectly rejected request with a resource instance specified in the uri-path.
- Fixed handling of Discover requests targeting the root path.
- Fixed incorrect descriptions of return values in callbacks from FOTA.
- Writes to Object Instances now ignore unknown optional Resources, per LwM2M specification.
- Implemented new Time API with distinct clock types:
anj_time_real_t,anj_time_monotonic_t,anj_time_duration_t. - Renamed
anj_dm_res_t::operationfield toanj_dm_res_t::kind. - Renamed
anj_dm_res_operation_ttype toanj_dm_res_kind_t. - Moved
anj/log/log.hheader toanj/log.h. - Removed
anj_core_ongoing_operationAPI. - Removed
anj_dm_bootstrap_cleanupAPI.
- Fixed broken README.md link in integrations documentation
- Changed error codes defined in the
anj_net_api.hto positive values. Returning any positive values from the user Network API implementation, other thanANJ_NET_E*, is prohibited. - New mandatory
anj_net_queue_mode_rx_off_tAPI with example per-binding implementations, includinganj_udp_queue_mode_rx_off()andanj_dtls_queue_mode_rx_off()were added. - Removed
anj_net_reuse_last_port_twith example per-binding implementations. - Changed
anj_dm_transaction_end_tlast argument.
- CoAP Downloader module for large file transfers from CoAP servers, supporting FOTA Pull scenarios.
- Added support for Write-Composite operation.
- Persistence module and mechanism for Security and Server objects store/restore.
- Added
anj/init.hheader to make config includes and option dependency checks more consistent. - Removed unnecessary usages of
ANJ_CONTAINER_OF()in object implementation examples. - Introduce Python tools for downloading object XMLs from OMA registry -
tools/lwm2m_object_registry.pyand generating object stubs -tools/anjay_codegen.py - Implemented responses caching.
- If no confirmable notification is sent for 24 hours, the next notification sent will be confirmable.
- The library now follows the include pattern recommendations from Include What You Use (IWYU) version 0.24 compatible with clang 20.
- Fixed improper handling of LwM2M Server responses in Separate Response mode.
- Updated default value in description of
ANJ_COAP_MAX_OPTIONS_NUMBERoption. - Fixed an issue with calling the observation module API during message exchange handling.
- Corrected the timing for setting the last sent notification timestamp.
- Fixed an issue that allowed server both bootstrap and management to freely read the Security and OSCORE objects.
Initial release.