Full Code of AVSystem/Anjay for AI

master 3fd991b2dc16 cached
989 files
10.6 MB
2.8M tokens
9534 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (11,293K chars total). Download the full file to get everything.
Repository: AVSystem/Anjay
Branch: master
Commit: 3fd991b2dc16
Files: 989
Total size: 10.6 MB

Directory structure:
gitextract_r4wlvbaj/

├── .dockerignore
├── .github/
│   └── workflows/
│       ├── anjay-tests.yml
│       └── coverity.yml
├── .gitignore
├── .gitmodules
├── CHANGELOG.md
├── CMakeLists.txt
├── CONTRIBUTING.rst
├── Dockerfile
├── Doxyfile.in
├── LICENSE
├── NOTICE
├── README.Windows.md
├── README.md
├── cmake/
│   ├── anjay-config.cmake.in
│   ├── anjay-version.cmake.in
│   ├── requirePython3venv.cmake
│   └── toolchain/
│       └── afl-gcc.cmake
├── demo/
│   ├── CMakeLists.txt
│   ├── advanced_firmware_update.c
│   ├── advanced_firmware_update.h
│   ├── advanced_firmware_update_addimg.c
│   ├── advanced_firmware_update_app.c
│   ├── demo.c
│   ├── demo.h
│   ├── demo_args.c
│   ├── demo_args.h
│   ├── demo_cmds.c
│   ├── demo_cmds.h
│   ├── demo_time.c
│   ├── demo_utils.c
│   ├── demo_utils.h
│   ├── firmware_update.c
│   ├── firmware_update.h
│   ├── lwm2m_gateway.c
│   ├── lwm2m_gateway.h
│   ├── net_traffic_interceptor.c
│   ├── net_traffic_interceptor.h
│   ├── objects/
│   │   ├── apn_conn_profile.c
│   │   ├── binary_app_data_container.c
│   │   ├── cell_connectivity.c
│   │   ├── conn_monitoring.c
│   │   ├── conn_statistics.c
│   │   ├── device.c
│   │   ├── download_diagnostics.c
│   │   ├── event_log.c
│   │   ├── ext_dev_info.c
│   │   ├── gateway_end_devices/
│   │   │   ├── binary_app_data_container.c
│   │   │   ├── binary_app_data_container.h
│   │   │   ├── push_button_object.c
│   │   │   ├── push_button_object.h
│   │   │   ├── temperature_object.c
│   │   │   └── temperature_object.h
│   │   ├── geopoints.c
│   │   ├── ip_ping.c
│   │   ├── ipso_objects.c
│   │   ├── location.c
│   │   ├── portfolio.c
│   │   └── test.c
│   ├── objects.h
│   ├── software_mgmt.c
│   └── software_mgmt.h
├── deps/
│   └── avs_coap/
│       ├── .gitignore
│       ├── CMakeLists.txt
│       ├── Doxyfile.in
│       ├── LICENSE
│       ├── NOTICE
│       ├── README.md
│       ├── cmake/
│       │   ├── AddHeaderSelfSufficiencyTests.cmake
│       │   ├── avs_coap-config.cmake.in
│       │   └── fill-placeholders.cmake
│       ├── devconfig
│       ├── doc/
│       │   ├── CMakeLists.txt
│       │   └── sphinx/
│       │       ├── make.bat
│       │       └── source/
│       │           ├── ErrorHandling.rst
│       │           ├── Fuzzing.rst
│       │           ├── Overview.rst
│       │           ├── _static/
│       │           │   └── theme_overrides.css
│       │           ├── conf.py.in
│       │           └── index.rst
│       ├── examples/
│       │   ├── CMakeLists.txt
│       │   └── async-client/
│       │       ├── CMakeLists.txt
│       │       └── src/
│       │           └── main.c
│       ├── include_public/
│       │   └── avsystem/
│       │       └── coap/
│       │           ├── async.h
│       │           ├── async_client.h
│       │           ├── async_exchange.h
│       │           ├── async_server.h
│       │           ├── avs_coap_config.h.in
│       │           ├── coap.h
│       │           ├── code.h
│       │           ├── ctx.h
│       │           ├── observe.h
│       │           ├── option.h
│       │           ├── streaming.h
│       │           ├── tcp.h
│       │           ├── token.h
│       │           ├── udp.h
│       │           └── writer.h
│       ├── requirements.txt
│       ├── src/
│       │   ├── async/
│       │   │   ├── avs_coap_async_client.c
│       │   │   ├── avs_coap_async_client.h
│       │   │   ├── avs_coap_async_server.c
│       │   │   ├── avs_coap_async_server.h
│       │   │   ├── avs_coap_exchange.c
│       │   │   └── avs_coap_exchange.h
│       │   ├── avs_coap_code_utils.c
│       │   ├── avs_coap_code_utils.h
│       │   ├── avs_coap_common_utils.c
│       │   ├── avs_coap_common_utils.h
│       │   ├── avs_coap_ctx.c
│       │   ├── avs_coap_ctx.h
│       │   ├── avs_coap_ctx_vtable.h
│       │   ├── avs_coap_init.h
│       │   ├── avs_coap_observe.c
│       │   ├── avs_coap_observe.h
│       │   ├── avs_coap_parse_utils.h
│       │   ├── avs_coap_poison.h
│       │   ├── avs_coap_x_log_config.h
│       │   ├── options/
│       │   │   ├── avs_coap_iterator.c
│       │   │   ├── avs_coap_iterator.h
│       │   │   ├── avs_coap_option.c
│       │   │   ├── avs_coap_option.h
│       │   │   ├── avs_coap_options.c
│       │   │   └── avs_coap_options.h
│       │   ├── streaming/
│       │   │   ├── avs_coap_streaming_client.c
│       │   │   ├── avs_coap_streaming_client.h
│       │   │   ├── avs_coap_streaming_server.c
│       │   │   └── avs_coap_streaming_server.h
│       │   ├── tcp/
│       │   │   ├── avs_coap_tcp_ctx.c
│       │   │   ├── avs_coap_tcp_ctx.h
│       │   │   ├── avs_coap_tcp_header.c
│       │   │   ├── avs_coap_tcp_header.h
│       │   │   ├── avs_coap_tcp_msg.c
│       │   │   ├── avs_coap_tcp_msg.h
│       │   │   ├── avs_coap_tcp_pending_requests.c
│       │   │   ├── avs_coap_tcp_pending_requests.h
│       │   │   ├── avs_coap_tcp_signaling.c
│       │   │   ├── avs_coap_tcp_signaling.h
│       │   │   ├── avs_coap_tcp_utils.c
│       │   │   └── avs_coap_tcp_utils.h
│       │   └── udp/
│       │       ├── avs_coap_udp_ctx.c
│       │       ├── avs_coap_udp_ctx.h
│       │       ├── avs_coap_udp_header.h
│       │       ├── avs_coap_udp_msg.c
│       │       ├── avs_coap_udp_msg.h
│       │       ├── avs_coap_udp_msg_cache.c
│       │       ├── avs_coap_udp_msg_cache.h
│       │       ├── avs_coap_udp_tx_params.c
│       │       └── avs_coap_udp_tx_params.h
│       ├── tests/
│       │   ├── fuzz/
│       │   │   ├── CMakeLists.txt
│       │   │   ├── coap_async_api_tcp.c
│       │   │   ├── coap_async_api_udp.c
│       │   │   ├── coap_parse.c
│       │   │   └── input/
│       │   │       ├── coap_async_api_tcp/
│       │   │       │   └── recv_get_send_content
│       │   │       ├── coap_async_api_tcp.hex/
│       │   │       │   └── recv_get_send_content
│       │   │       ├── coap_async_api_udp/
│       │   │       │   ├── recv_get_send_content
│       │   │       │   ├── send_block_put_recv_changed
│       │   │       │   ├── send_get_recv_block_content
│       │   │       │   └── send_get_recv_content
│       │   │       ├── coap_async_api_udp.hex/
│       │   │       │   ├── recv_get_send_content
│       │   │       │   ├── send_block_put_recv_changed
│       │   │       │   ├── send_get_recv_block_content
│       │   │       │   └── send_get_recv_content
│       │   │       ├── coap_parse/
│       │   │       │   └── empty
│       │   │       └── hex-to-fuzz-input.sh
│       │   ├── mock_clock.c
│       │   ├── mock_clock.h
│       │   ├── options/
│       │   │   ├── option.c
│       │   │   └── options.c
│       │   ├── socket.c
│       │   ├── socket.h
│       │   ├── tcp/
│       │   │   ├── async_client.c
│       │   │   ├── async_server.c
│       │   │   ├── csm.c
│       │   │   ├── ctx.c
│       │   │   ├── env.h
│       │   │   ├── header.c
│       │   │   ├── helper_functions.h
│       │   │   ├── payload_escaper.c
│       │   │   ├── requesting.c
│       │   │   ├── responding.c
│       │   │   ├── setsock.c
│       │   │   └── utils.h
│       │   ├── udp/
│       │   │   ├── async_client.c
│       │   │   ├── async_client_with_big_data.c
│       │   │   ├── async_observe.c
│       │   │   ├── async_server.c
│       │   │   ├── big_data.h
│       │   │   ├── fuzzer_cases.c
│       │   │   ├── msg.c
│       │   │   ├── msg_cache.c
│       │   │   ├── setsock.c
│       │   │   ├── streaming_client.c
│       │   │   ├── streaming_observe.c
│       │   │   ├── streaming_server.c
│       │   │   ├── tx_params_mock.h
│       │   │   ├── udp_tx_params.c
│       │   │   └── utils.h
│       │   ├── utils.c
│       │   └── utils.h
│       └── tools/
│           ├── conditional_headers_whitelist.json
│           └── coverage
├── devconfig
├── doc/
│   ├── CMakeLists.txt
│   └── sphinx/
│       ├── extensions/
│       │   ├── builders/
│       │   │   ├── __init__.py
│       │   │   ├── dummy.py
│       │   │   ├── snippet_source_linter.py
│       │   │   └── snippet_source_list_references.py
│       │   ├── file_dirtiness_checker.py
│       │   ├── small_literal.py
│       │   └── snippet_source.py
│       ├── snippet_sources.md5
│       ├── source/
│       │   ├── APIReference.rst
│       │   ├── AdvancedTopics/
│       │   │   ├── AT-AccessControl.rst
│       │   │   ├── AT-AttributeStorage.rst
│       │   │   ├── AT-Bootstrap.rst
│       │   │   ├── AT-CertificateUsage.rst
│       │   │   ├── AT-Certificates.rst
│       │   │   ├── AT-CustomEventLoop.rst
│       │   │   ├── AT-CustomObjects/
│       │   │   │   ├── AT_CO1_SingleInstanceReadOnly.rst
│       │   │   │   ├── AT_CO2_SingleInstanceExecutableAndReadOnly.rst
│       │   │   │   ├── AT_CO3_MultiInstanceReadOnlyFixed.rst
│       │   │   │   ├── AT_CO4_FixedInstanceWritable.rst
│       │   │   │   ├── AT_CO5_MultiInstanceDynamic.rst
│       │   │   │   ├── AT_CO6_MultipleResourceInstances.rst
│       │   │   │   ├── AT_CO7_BootstrapAwareness.rst
│       │   │   │   ├── AT_CO_BootstrapAwareness.rst
│       │   │   │   ├── AT_CO_FixedInstanceWritable.rst
│       │   │   │   ├── AT_CO_MultiInstanceDynamic.rst
│       │   │   │   ├── AT_CO_MultiInstanceReadOnlyFixed.rst
│       │   │   │   ├── AT_CO_MultipleResourceInstances.rst
│       │   │   │   ├── AT_CO_SingleInstanceExecutableAndReadOnly.rst
│       │   │   │   ├── AT_CO_SingleInstanceReadOnly.rst
│       │   │   │   └── Anjay_codegen_note.rst
│       │   │   ├── AT-CustomObjects.rst
│       │   │   ├── AT-EventLoopNotes.rst
│       │   │   ├── AT-IpsoObjects.rst
│       │   │   ├── AT-NetworkErrorHandling.rst
│       │   │   ├── AT-OtherFeatures.rst
│       │   │   ├── AT-Persistence.rst
│       │   │   └── AT-RetransmissionsTimeoutsCaching.rst
│       │   ├── AdvancedTopics.rst
│       │   ├── BasicClient/
│       │   │   ├── BC-Initialization.rst
│       │   │   ├── BC-MandatoryObjects.rst
│       │   │   ├── BC-Notifications.rst
│       │   │   ├── BC-ObjectImplementation.rst
│       │   │   ├── BC-Security.rst
│       │   │   ├── BC-Send.rst
│       │   │   └── BC-ThreadSafety.rst
│       │   ├── BasicClient.rst
│       │   ├── CommercialFeatures/
│       │   │   ├── CF-CorePersistence.rst
│       │   │   ├── CF-CustomHardwareSupport.rst
│       │   │   ├── CF-EST.rst
│       │   │   ├── CF-FSDM.rst
│       │   │   ├── CF-HSM.rst
│       │   │   ├── CF-IoTSAFE.rst
│       │   │   ├── CF-NIDD.rst
│       │   │   ├── CF-OSCORE.rst
│       │   │   ├── CF-SMSBinding.rst
│       │   │   └── CF-SmartCardBootstrap.rst
│       │   ├── CommercialFeatures.rst
│       │   ├── Compiling_client_applications.rst
│       │   ├── FirmwareUpdateTutorial/
│       │   │   ├── FU-AdvancedFirmwareUpdate/
│       │   │   │   ├── FU-AFU-BasicImplementation.rst
│       │   │   │   ├── FU-AFU-Examples.rst
│       │   │   │   ├── FU-AFU-ResourceDefinitions.rst
│       │   │   │   ├── FU-AFU-StateDiagram.rst
│       │   │   │   └── _files/
│       │   │   │       └── 33629.xml
│       │   │   ├── FU-AdvancedFirmwareUpdate.rst
│       │   │   ├── FU-BasicImplementation.rst
│       │   │   ├── FU-DownloadResumption.rst
│       │   │   ├── FU-Introduction.rst
│       │   │   ├── FU-ModesAndProtocols.rst
│       │   │   ├── FU-PoorConnectivity.rst
│       │   │   ├── FU-SecureDownloads.rst
│       │   │   ├── FU1.rst
│       │   │   ├── FU2.rst
│       │   │   ├── FU3.rst
│       │   │   ├── FU4.rst
│       │   │   ├── FU5.rst
│       │   │   └── FU6.rst
│       │   ├── FirmwareUpdateTutorial.rst
│       │   ├── Introduction.rst
│       │   ├── KnownIssues.rst
│       │   ├── LwM2M.rst
│       │   ├── LwM2MGateway/
│       │   │   ├── LwM2MGatewayAPI.rst
│       │   │   ├── LwM2MGatewayIntro.rst
│       │   │   ├── LwM2MGatewayNotifications.rst
│       │   │   └── LwM2MGatewaySend.rst
│       │   ├── LwM2MGateway.rst
│       │   ├── Migrating/
│       │   │   ├── MigratingCustomEntropy.rst
│       │   │   ├── MigratingFromAnjay214.rst
│       │   │   ├── MigratingFromAnjay215.rst
│       │   │   ├── MigratingFromAnjay225.rst
│       │   │   ├── MigratingFromAnjay24.rst
│       │   │   ├── MigratingFromAnjay26.rst
│       │   │   ├── MigratingFromAnjay27.rst
│       │   │   ├── MigratingFromAnjay28.rst
│       │   │   ├── MigratingFromAnjay30.rst
│       │   │   ├── MigratingFromAnjay310.rst
│       │   │   ├── MigratingFromAnjay312.rst
│       │   │   ├── MigratingFromAnjay32.rst
│       │   │   ├── MigratingFromAnjay33.rst
│       │   │   ├── MigratingFromAnjay34.rst
│       │   │   └── MigratingFromAnjay37.rst
│       │   ├── Migrating.rst
│       │   ├── PortingGuideForNonPOSIXPlatforms/
│       │   │   ├── CustomTLS/
│       │   │   │   ├── CustomTLS-CertificatesAdvanced.rst
│       │   │   │   ├── CustomTLS-CertificatesBasic.rst
│       │   │   │   ├── CustomTLS-ConfigFeatures.rst
│       │   │   │   ├── CustomTLS-Minimal.rst
│       │   │   │   ├── CustomTLS-Resumption.rst
│       │   │   │   ├── CustomTLS-Stub.rst
│       │   │   │   └── CustomTLS-TCPSupport.rst
│       │   │   ├── CustomTLS.rst
│       │   │   ├── NetworkingAPI/
│       │   │   │   ├── NetworkingAPI-Bind.rst
│       │   │   │   ├── NetworkingAPI-EventLoopSupport.rst
│       │   │   │   ├── NetworkingAPI-IpStickiness.rst
│       │   │   │   ├── NetworkingAPI-Minimal.rst
│       │   │   │   ├── NetworkingAPI-OtherFeatures.rst
│       │   │   │   ├── NetworkingAPI-RemoteHostPort.rst
│       │   │   │   ├── NetworkingAPI-ShutdownRemoteHostname.rst
│       │   │   │   ├── NetworkingAPI-Stats.rst
│       │   │   │   ├── NetworkingAPI1.rst
│       │   │   │   ├── NetworkingAPI2.rst
│       │   │   │   ├── NetworkingAPI3.rst
│       │   │   │   ├── NetworkingAPI4.rst
│       │   │   │   ├── NetworkingAPI5.rst
│       │   │   │   ├── NetworkingAPI6.rst
│       │   │   │   └── NetworkingAPI7.rst
│       │   │   ├── NetworkingAPI.rst
│       │   │   ├── ThreadingAPI.rst
│       │   │   └── TimeAPI.rst
│       │   ├── PortingGuideForNonPOSIXPlatforms.rst
│       │   ├── Tools/
│       │   │   ├── CliLwM2MServer.rst
│       │   │   ├── FactoryProvisioning.rst
│       │   │   ├── PackagesGenerator.rst
│       │   │   ├── StandaloneObjects.rst
│       │   │   ├── StubGenerator.rst
│       │   │   └── VirtualEnvironments.rst
│       │   ├── Tools.rst
│       │   ├── _static/
│       │   │   └── theme_overrides.css
│       │   ├── _templates/
│       │   │   ├── layout.html
│       │   │   └── searchbox.html
│       │   ├── conf.py.in
│       │   └── index.rst
│       └── source_api/
│           ├── BackToDocumentation.rst
│           ├── _static/
│           │   └── theme_overrides.css
│           ├── _templates/
│           │   ├── layout.html
│           │   └── searchbox.html
│           ├── conf.py.in
│           └── index.rst
├── example_configs/
│   ├── README.md
│   ├── embedded_lwm2m10/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           ├── avs_commons_config.h
│   │           └── lwip-posix-compat.h
│   ├── embedded_lwm2m11/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           ├── avs_commons_config.h
│   │           └── lwip-posix-compat.h
│   ├── embedded_lwm2m12/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           ├── avs_commons_config.h
│   │           └── lwip-posix-compat.h
│   ├── linux_lwm2m10/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           └── avs_commons_config.h
│   ├── linux_lwm2m11/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           └── avs_commons_config.h
│   └── linux_lwm2m12/
│       ├── anjay/
│       │   └── anjay_config.h
│       └── avsystem/
│           ├── coap/
│           │   └── avs_coap_config.h
│           └── commons/
│               └── avs_commons_config.h
├── examples/
│   ├── CMakeLists.txt
│   ├── commercial-features/
│   │   ├── CF-CorePersistence/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-EST/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-EST-PKCS11/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-NIDD/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── nidd_demo_driver.c
│   │   │       └── nidd_demo_driver.h
│   │   ├── CF-OSCORE/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PKCS11/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PSA-PKI/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PSA-PSK/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PSA-bootstrap/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PSA-management/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-SMS/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-SMS-PSK/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-SMS-UDP/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-SmartCardBootstrap/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   └── CMakeLists.txt
│   ├── custom-network/
│   │   ├── CMakeLists.txt
│   │   ├── bind/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   ├── ip-stickiness/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   ├── minimal/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   ├── remote-host-port/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   ├── shutdown-remote-hostname/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   └── stats/
│   │       ├── CMakeLists.txt
│   │       └── src/
│   │           ├── main.c
│   │           └── net_impl.c
│   ├── custom-tls/
│   │   ├── CMakeLists.txt
│   │   ├── certificates-advanced/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── certificates-advanced-fake-dane/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── certificates-basic/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── config-features/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── minimal/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── resumption-buffer/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── resumption-simple/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── stub/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   └── tcp-support/
│   │       ├── CMakeLists.txt
│   │       └── src/
│   │           ├── firmware_update.c
│   │           ├── firmware_update.h
│   │           ├── main.c
│   │           ├── net_impl.c
│   │           ├── time_object.c
│   │           ├── time_object.h
│   │           └── tls_impl.c
│   └── tutorial/
│       ├── AT-AccessControl/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── test_object.c
│       │       └── test_object.h
│       ├── AT-Bootstrap/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-Certificates/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-CustomEventLoop/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-CustomObjects/
│       │   ├── CMakeLists.txt
│       │   ├── bootstrap-awareness/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   ├── multi-instance-dynamic/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       ├── main.c
│       │   │       ├── test_object.c
│       │   │       └── test_object.h
│       │   ├── multi-instance-resources-dynamic/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       ├── main.c
│       │   │       ├── test_object.c
│       │   │       └── test_object.h
│       │   ├── read-only/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   ├── read-only-multiple-fixed/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   ├── read-only-with-executable/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   ├── writable-multiple-fixed/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   └── writable-multiple-fixed-transactional/
│       │       ├── CMakeLists.txt
│       │       └── src/
│       │           └── main.c
│       ├── AT-Downloader/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-IpsoObjects/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-Persistence/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── BC-Initialization/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── BC-MandatoryObjects/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── BC-Notifications/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── time_object.c
│       │       └── time_object.h
│       ├── BC-ObjectImplementation/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── time_object.c
│       │       └── time_object.h
│       ├── BC-Security/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── BC-Send/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── time_object.c
│       │       └── time_object.h
│       ├── BC-ThreadSafety/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── time_object.c
│       │       └── time_object.h
│       ├── CMakeLists.txt
│       ├── LwM2M-Gateway/
│       │   ├── CMakeLists.txt
│       │   ├── end_device.py
│       │   └── src/
│       │       ├── gateway_server.c
│       │       ├── gateway_server.h
│       │       ├── main.c
│       │       ├── temperature_object.c
│       │       └── temperature_object.h
│       └── firmware-update/
│           ├── CMakeLists.txt
│           ├── advanced-firmware-update/
│           │   ├── CMakeLists.txt
│           │   └── src/
│           │       ├── advanced_firmware_update.c
│           │       ├── advanced_firmware_update.h
│           │       ├── main.c
│           │       ├── time_object.c
│           │       └── time_object.h
│           ├── basic-implementation/
│           │   ├── CMakeLists.txt
│           │   └── src/
│           │       ├── firmware_update.c
│           │       ├── firmware_update.h
│           │       ├── main.c
│           │       ├── time_object.c
│           │       └── time_object.h
│           ├── download-resumption/
│           │   ├── CMakeLists.txt
│           │   └── src/
│           │       ├── firmware_update.c
│           │       ├── firmware_update.h
│           │       ├── main.c
│           │       ├── time_object.c
│           │       └── time_object.h
│           └── secure-downloads/
│               ├── CMakeLists.txt
│               └── src/
│                   ├── firmware_update.c
│                   ├── firmware_update.h
│                   ├── main.c
│                   ├── time_object.c
│                   └── time_object.h
├── include_public/
│   └── anjay/
│       ├── access_control.h
│       ├── advanced_fw_update.h
│       ├── anjay.h
│       ├── anjay_config.h.in
│       ├── attr_storage.h
│       ├── core.h
│       ├── dm.h
│       ├── download.h
│       ├── factory_provisioning.h
│       ├── fw_update.h
│       ├── io.h
│       ├── ipso_objects.h
│       ├── ipso_objects_v2.h
│       ├── lwm2m_gateway.h
│       ├── lwm2m_send.h
│       ├── security.h
│       ├── server.h
│       ├── stats.h
│       └── sw_mgmt.h
├── ltoconfig
├── requirements.txt
├── src/
│   ├── anjay_config_log.h
│   ├── anjay_init.h
│   ├── anjay_modules/
│   │   ├── anjay_access_utils.h
│   │   ├── anjay_attr_storage_utils.h
│   │   ├── anjay_bootstrap.h
│   │   ├── anjay_dm_utils.h
│   │   ├── anjay_io_utils.h
│   │   ├── anjay_lwm2m_gateway.h
│   │   ├── anjay_notify.h
│   │   ├── anjay_raw_buffer.h
│   │   ├── anjay_sched.h
│   │   ├── anjay_servers.h
│   │   ├── anjay_time_defs.h
│   │   ├── anjay_utils_core.h
│   │   └── dm/
│   │       ├── anjay_execute.h
│   │       └── anjay_modules.h
│   ├── core/
│   │   ├── anjay_access_utils.c
│   │   ├── anjay_access_utils_private.h
│   │   ├── anjay_bootstrap_core.c
│   │   ├── anjay_bootstrap_core.h
│   │   ├── anjay_core.c
│   │   ├── anjay_core.h
│   │   ├── anjay_dm_core.c
│   │   ├── anjay_dm_core.h
│   │   ├── anjay_downloader.h
│   │   ├── anjay_event_loop.c
│   │   ├── anjay_io_core.c
│   │   ├── anjay_io_core.h
│   │   ├── anjay_io_utils.c
│   │   ├── anjay_lwm2m_send.c
│   │   ├── anjay_lwm2m_send.h
│   │   ├── anjay_notify.c
│   │   ├── anjay_raw_buffer.c
│   │   ├── anjay_servers_inactive.h
│   │   ├── anjay_servers_private.h
│   │   ├── anjay_servers_reload.h
│   │   ├── anjay_servers_utils.c
│   │   ├── anjay_servers_utils.h
│   │   ├── anjay_stats.c
│   │   ├── anjay_stats.h
│   │   ├── anjay_utils_core.c
│   │   ├── anjay_utils_private.h
│   │   ├── attr_storage/
│   │   │   ├── anjay_attr_storage.c
│   │   │   ├── anjay_attr_storage.h
│   │   │   ├── anjay_attr_storage_persistence.c
│   │   │   └── anjay_attr_storage_private.h
│   │   ├── coap/
│   │   │   ├── anjay_content_format.h
│   │   │   └── anjay_msg_details.h
│   │   ├── dm/
│   │   │   ├── anjay_discover.c
│   │   │   ├── anjay_discover.h
│   │   │   ├── anjay_dm_attributes.c
│   │   │   ├── anjay_dm_attributes.h
│   │   │   ├── anjay_dm_create.c
│   │   │   ├── anjay_dm_create.h
│   │   │   ├── anjay_dm_execute.c
│   │   │   ├── anjay_dm_execute.h
│   │   │   ├── anjay_dm_handlers.c
│   │   │   ├── anjay_dm_read.c
│   │   │   ├── anjay_dm_read.h
│   │   │   ├── anjay_dm_write.c
│   │   │   ├── anjay_dm_write.h
│   │   │   ├── anjay_dm_write_attrs.c
│   │   │   ├── anjay_dm_write_attrs.h
│   │   │   ├── anjay_modules.c
│   │   │   ├── anjay_query.c
│   │   │   └── anjay_query.h
│   │   ├── downloader/
│   │   │   ├── anjay_coap.c
│   │   │   ├── anjay_downloader.c
│   │   │   ├── anjay_http.c
│   │   │   └── anjay_private.h
│   │   ├── io/
│   │   │   ├── anjay_base64_out.c
│   │   │   ├── anjay_base64_out.h
│   │   │   ├── anjay_batch_builder.c
│   │   │   ├── anjay_batch_builder.h
│   │   │   ├── anjay_cbor_in.c
│   │   │   ├── anjay_cbor_out.c
│   │   │   ├── anjay_common.c
│   │   │   ├── anjay_common.h
│   │   │   ├── anjay_corelnk.c
│   │   │   ├── anjay_corelnk.h
│   │   │   ├── anjay_dynamic.c
│   │   │   ├── anjay_input_buf.c
│   │   │   ├── anjay_json_encoder.c
│   │   │   ├── anjay_json_like_decoder.c
│   │   │   ├── anjay_json_like_decoder.h
│   │   │   ├── anjay_json_like_decoder_vtable.h
│   │   │   ├── anjay_lwm2m_cbor_in.c
│   │   │   ├── anjay_lwm2m_cbor_out.c
│   │   │   ├── anjay_opaque.c
│   │   │   ├── anjay_output_buf.c
│   │   │   ├── anjay_senml_in.c
│   │   │   ├── anjay_senml_like_encoder.c
│   │   │   ├── anjay_senml_like_encoder.h
│   │   │   ├── anjay_senml_like_encoder_vtable.h
│   │   │   ├── anjay_senml_like_out.c
│   │   │   ├── anjay_text.c
│   │   │   ├── anjay_tlv.h
│   │   │   ├── anjay_tlv_in.c
│   │   │   ├── anjay_tlv_out.c
│   │   │   ├── anjay_vtable.h
│   │   │   ├── cbor/
│   │   │   │   ├── anjay_cbor_encoder_ll.c
│   │   │   │   ├── anjay_cbor_encoder_ll.h
│   │   │   │   ├── anjay_cbor_types.h
│   │   │   │   ├── anjay_json_like_cbor_decoder.c
│   │   │   │   ├── anjay_json_like_cbor_decoder.h
│   │   │   │   └── anjay_senml_cbor_encoder.c
│   │   │   └── json/
│   │   │       ├── anjay_json_decoder.c
│   │   │       └── anjay_json_decoder.h
│   │   ├── observe/
│   │   │   ├── anjay_observe_core.c
│   │   │   ├── anjay_observe_core.h
│   │   │   ├── anjay_observe_internal.h
│   │   │   └── anjay_observe_planning.c
│   │   └── servers/
│   │       ├── anjay_activate.c
│   │       ├── anjay_activate.h
│   │       ├── anjay_connection_ip.c
│   │       ├── anjay_connections.c
│   │       ├── anjay_connections.h
│   │       ├── anjay_connections_internal.h
│   │       ├── anjay_register.c
│   │       ├── anjay_register.h
│   │       ├── anjay_reload.c
│   │       ├── anjay_security.h
│   │       ├── anjay_security_generic.c
│   │       ├── anjay_server_connections.c
│   │       ├── anjay_server_connections.h
│   │       ├── anjay_servers_internal.c
│   │       └── anjay_servers_internal.h
│   └── modules/
│       ├── access_control/
│       │   ├── anjay_access_control_handlers.c
│       │   ├── anjay_access_control_persistence.c
│       │   ├── anjay_mod_access_control.c
│       │   └── anjay_mod_access_control.h
│       ├── advanced_fw_update/
│       │   └── anjay_advanced_fw_update.c
│       ├── factory_provisioning/
│       │   └── anjay_provisioning.c
│       ├── fw_update/
│       │   └── anjay_fw_update.c
│       ├── ipso/
│       │   ├── anjay_ipso_3d_sensor.c
│       │   ├── anjay_ipso_basic_sensor.c
│       │   └── anjay_ipso_button.c
│       ├── ipso_v2/
│       │   ├── anjay_ipso_v2_3d_sensor.c
│       │   └── anjay_ipso_v2_basic_sensor.c
│       ├── lwm2m_gateway/
│       │   └── anjay_lwm2m_gateway.c
│       ├── security/
│       │   ├── anjay_mod_security.c
│       │   ├── anjay_mod_security.h
│       │   ├── anjay_security_persistence.c
│       │   ├── anjay_security_transaction.c
│       │   ├── anjay_security_transaction.h
│       │   ├── anjay_security_utils.c
│       │   └── anjay_security_utils.h
│       ├── server/
│       │   ├── anjay_mod_server.c
│       │   ├── anjay_mod_server.h
│       │   ├── anjay_server_persistence.c
│       │   ├── anjay_server_transaction.c
│       │   ├── anjay_server_transaction.h
│       │   ├── anjay_server_utils.c
│       │   └── anjay_server_utils.h
│       └── sw_mgmt/
│           └── anjay_sw_mgmt.c
├── standalone/
│   ├── security/
│   │   ├── standalone_mod_security.c
│   │   ├── standalone_mod_security.h
│   │   ├── standalone_security.h
│   │   ├── standalone_security_persistence.c
│   │   ├── standalone_security_transaction.c
│   │   ├── standalone_security_transaction.h
│   │   ├── standalone_security_utils.c
│   │   └── standalone_security_utils.h
│   └── server/
│       ├── standalone_mod_server.c
│       ├── standalone_mod_server.h
│       ├── standalone_server.h
│       ├── standalone_server_persistence.c
│       ├── standalone_server_transaction.c
│       ├── standalone_server_transaction.h
│       ├── standalone_server_utils.c
│       └── standalone_server_utils.h
├── tests/
│   ├── codegen/
│   │   ├── CMakeLists.txt
│   │   ├── check_with_object_registry.sh
│   │   └── input/
│   │       ├── execute.xml
│   │       ├── multiple-object.xml
│   │       ├── read.xml
│   │       ├── sanitization.xml
│   │       └── write.xml
│   ├── core/
│   │   ├── access_utils.c
│   │   ├── anjay.c
│   │   ├── attr_storage/
│   │   │   ├── attr_storage.c
│   │   │   ├── attr_storage_test.h
│   │   │   └── persistence.c
│   │   ├── bootstrap.c
│   │   ├── bootstrap_mock.h
│   │   ├── coap/
│   │   │   ├── utils.c
│   │   │   └── utils.h
│   │   ├── dm.c
│   │   ├── downloader/
│   │   │   └── downloader.c
│   │   ├── io/
│   │   │   ├── batch_builder.c
│   │   │   ├── bigdata.h
│   │   │   ├── cbor/
│   │   │   │   ├── cbor_decoder.c
│   │   │   │   └── cbor_encoder.c
│   │   │   ├── cbor_in.c
│   │   │   ├── corelnk.c
│   │   │   ├── dm_batch.c
│   │   │   ├── dynamic.c
│   │   │   ├── json/
│   │   │   │   └── json_decoder.c
│   │   │   ├── json_in.c
│   │   │   ├── lwm2m_cbor_in.c
│   │   │   ├── lwm2m_cbor_out.c
│   │   │   ├── raw_cbor_in.c
│   │   │   ├── senml_cbor_encoder.c
│   │   │   ├── senml_cbor_out.c
│   │   │   ├── senml_in_common.h
│   │   │   ├── senml_json_encoder.c
│   │   │   ├── text.c
│   │   │   ├── tlv_in.c
│   │   │   └── tlv_out.c
│   │   ├── io.c
│   │   ├── lwm2m_send.c
│   │   ├── observe/
│   │   │   ├── observe.c
│   │   │   └── observe_mock.h
│   │   ├── socket_mock.c
│   │   ├── socket_mock.h
│   │   └── utils.c
│   ├── doc/
│   │   └── runtest.py
│   ├── fuzz/
│   │   ├── CMakeLists.txt
│   │   ├── cbor/
│   │   │   └── decoder.c
│   │   └── test_cases/
│   │       ├── cbor_decoder/
│   │       │   ├── boring
│   │       │   └── invalid
│   │       ├── coap_stream/
│   │       │   └── valid_coap_msg
│   │       ├── coap_stream_request/
│   │       │   └── basic
│   │       └── coap_stream_response/
│   │           └── basic
│   ├── integration/
│   │   ├── CMakeLists.txt
│   │   ├── framework/
│   │   │   ├── framework/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── asserts.py
│   │   │   │   ├── create_package.py
│   │   │   │   ├── create_xlsx_test_report.py
│   │   │   │   ├── lwm2m_test.py
│   │   │   │   ├── pretty_test_runner.py
│   │   │   │   ├── serialize_senml_cbor.py
│   │   │   │   ├── test_suite.py
│   │   │   │   └── test_utils.py
│   │   │   └── pyproject.toml
│   │   ├── run_tests.sh.in
│   │   ├── runtest.py
│   │   └── suites/
│   │       ├── __init__.py
│   │       ├── default/
│   │       │   ├── __init__.py
│   │       │   ├── access_control.py
│   │       │   ├── advanced_firmware_update.py
│   │       │   ├── async.py
│   │       │   ├── block_response.py
│   │       │   ├── block_write.py
│   │       │   ├── bootstrap_client.py
│   │       │   ├── bootstrap_discover.py
│   │       │   ├── bootstrap_factory.py
│   │       │   ├── bootstrap_holdoff.py
│   │       │   ├── bootstrap_pack.py
│   │       │   ├── bootstrap_server.py
│   │       │   ├── bootstrap_sync.py
│   │       │   ├── bootstrap_transaction.py
│   │       │   ├── buffer_sizes.py
│   │       │   ├── cbor_encoding.py
│   │       │   ├── cbor_requests.py
│   │       │   ├── client_block_request.py
│   │       │   ├── coap.py
│   │       │   ├── con_attr.py
│   │       │   ├── conn_status_api.py
│   │       │   ├── connection_id.py
│   │       │   ├── crash.py
│   │       │   ├── create.py
│   │       │   ├── critical_opts.py
│   │       │   ├── disable_server.py
│   │       │   ├── discover_depth.py
│   │       │   ├── downloader.py
│   │       │   ├── factory_provisioning.py
│   │       │   ├── firmware_update.py
│   │       │   ├── firmware_update11.py
│   │       │   ├── forbidden_on_register.py
│   │       │   ├── formats.py
│   │       │   ├── hierarchical_cbor_encoding.py
│   │       │   ├── ipso_objects.py
│   │       │   ├── json_encoding.py
│   │       │   ├── json_requests.py
│   │       │   ├── lwm2m_gateway.py
│   │       │   ├── lwm2m_gateway_observe_attributes.py
│   │       │   ├── modify_servers.py
│   │       │   ├── msg_cache.py
│   │       │   ├── notification_timestamps.py
│   │       │   ├── notifications.py
│   │       │   ├── observe_attributes.py
│   │       │   ├── observe_with_attributes.py
│   │       │   ├── offline.py
│   │       │   ├── plaintext_base64.py
│   │       │   ├── port_rebind.py
│   │       │   ├── queue_mode.py
│   │       │   ├── read_composite.py
│   │       │   ├── reboot.py
│   │       │   ├── register.py
│   │       │   ├── request_too_large.py
│   │       │   ├── retransmissions.py
│   │       │   ├── security.py
│   │       │   ├── send.py
│   │       │   ├── senml_json_encoding.py
│   │       │   ├── separate_response.py
│   │       │   ├── software_mgmt.py
│   │       │   ├── ssl_error_api.py
│   │       │   ├── stats.py
│   │       │   ├── test_object.py
│   │       │   ├── time_api.py
│   │       │   ├── unregister.py
│   │       │   ├── update.py
│   │       │   ├── uri_change_reregister.py
│   │       │   └── write_composite.py
│   │       ├── sensitive/
│   │       │   ├── __init__.py
│   │       │   ├── advanced_firmware_update.py
│   │       │   ├── bootstrap_client.py
│   │       │   ├── firmware_update.py
│   │       │   └── update.py
│   │       └── testfest/
│   │           ├── __init__.py
│   │           ├── bootstrap.py
│   │           ├── dm/
│   │           │   ├── __init__.py
│   │           │   ├── advanced_firmware_update.py
│   │           │   ├── connectivity_management.py
│   │           │   ├── connectivity_monitoring.py
│   │           │   ├── connectivity_statistics.py
│   │           │   ├── device.py
│   │           │   ├── firmware_update.py
│   │           │   ├── location.py
│   │           │   ├── portfolio.py
│   │           │   └── utils.py
│   │           ├── management.py
│   │           ├── multi_servers.py
│   │           ├── register.py
│   │           ├── reporting.py
│   │           └── security.py
│   ├── modules/
│   │   ├── access_control/
│   │   │   ├── access_control.c
│   │   │   └── persistence.c
│   │   ├── factory_provisioning/
│   │   │   └── provisioning.c
│   │   ├── lwm2m_gateway/
│   │   │   └── lwm2m_gateway.c
│   │   ├── security/
│   │   │   ├── api.c
│   │   │   └── persistence.c
│   │   └── server/
│   │       ├── api.c
│   │       └── persistence.c
│   └── utils/
│       ├── coap/
│       │   ├── socket.c
│       │   └── socket.h
│       ├── dm.c
│       ├── dm.h
│       ├── mock_clock.c
│       ├── mock_clock.h
│       ├── mock_dm.c
│       ├── mock_dm.h
│       └── utils.h
├── tools/
│   ├── analyze
│   ├── anjay_codegen.py
│   ├── anjay_config_log_tool.py
│   ├── build_doxygen_docs.py
│   ├── build_sphinx_docs.py
│   ├── ci/
│   │   ├── build-docker-images.sh
│   │   ├── rockylinux-9/
│   │   │   └── Dockerfile
│   │   ├── ubuntu-22.04/
│   │   │   └── Dockerfile
│   │   └── ubuntu-24.04/
│   │       └── Dockerfile
│   ├── ci-psa/
│   │   ├── Dockerfile
│   │   └── README.md
│   ├── conditional_headers_whitelist.json
│   ├── coverage
│   ├── find_unused_code.py
│   ├── generate-certs.sh
│   ├── generate_doxygen_config.py
│   ├── lwm2m_object_registry.py
│   ├── markdown-toc.py
│   ├── provisioning-tool/
│   │   ├── configs/
│   │   │   ├── cert_info.json
│   │   │   ├── endpoint_cfg
│   │   │   └── lwm2m_server.json
│   │   ├── factory_prov/
│   │   │   ├── __init__.py
│   │   │   ├── cert_gen.py
│   │   │   └── factory_prov.py
│   │   └── ptool.py
│   ├── symlink-check.sh
│   ├── test-framework-tools/
│   │   ├── .gitignore
│   │   ├── nsh-lwm2m/
│   │   │   ├── cbor_shell.py
│   │   │   ├── nsh_lwm2m.py
│   │   │   └── tlv_shell.py
│   │   ├── pymbedtls/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── cmake/
│   │   │   │   ├── FindMbedTLS.cmake
│   │   │   │   └── QueryPythonForPybind11.cmake
│   │   │   ├── pymbedtls/
│   │   │   │   └── __init__.py
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       ├── common.cpp
│   │   │       ├── common.hpp
│   │   │       ├── context.cpp
│   │   │       ├── context.hpp
│   │   │       ├── pybind11_interop.hpp
│   │   │       ├── pymbedtls.cpp
│   │   │       ├── security.cpp
│   │   │       ├── security.hpp
│   │   │       ├── socket.cpp
│   │   │       └── socket.hpp
│   │   └── tools/
│   │       ├── framework_tools/
│   │       │   ├── __init__.py
│   │       │   ├── coap_file_server.py
│   │       │   └── lwm2m/
│   │       │       ├── __init__.py
│   │       │       ├── coap/
│   │       │       │   ├── __init__.py
│   │       │       │   ├── code.py
│   │       │       │   ├── content_format.py
│   │       │       │   ├── option.py
│   │       │       │   ├── packet.py
│   │       │       │   ├── server.py
│   │       │       │   ├── transport.py
│   │       │       │   ├── type.py
│   │       │       │   └── utils.py
│   │       │       ├── messages.py
│   │       │       ├── objlink.py
│   │       │       ├── path.py
│   │       │       ├── senml_cbor.py
│   │       │       ├── server.py
│   │       │       └── tlv.py
│   │       └── pyproject.toml
│   ├── test_duplicates.py
│   ├── test_ghactions.py
│   └── utils.sh
└── valgrind_test.supp

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
# binaries
*.a
*.so
*.so.*
/demo/demo

# NetBeans Project
nbproject

# IDEA-based IDE project
.idea/

# VSCode
.vscode/

# build configuration autogenerated files
/build
/output
*.swp
CMakeFiles/
CMakeTmp/
CMakeCache.txt
CMakeDoxyfile.in
CMakeDoxygenDefaults.cmake
cmake_install.cmake
install_manifest.txt
_CPack_Packages/
CPackConfig.cmake
CPackSourceConfig.cmake
CTestTestfile.cmake
Testing/
/include_public/anjay/anjay_config.h
posix-config.h
anjay-*.cmake
Doxyfile
/doc/sphinx/source/conf.py
tools/test-framework-tools/pymbedtls/build/

# other
Makefile
*.log
*.gcda
*.gcno
*.gcov
*~
tags
.ycm_extra_conf.py
.ycm_extra_conf.pyc
/tests/codegen/*.c
/tests/codegen/*.cpp
/tests/integration/build
__pycache__/
.gdb_history
*.orig
*.egg-info
*.pyc
/tools/test-framework-tools/pymbedtls*
compile_commands.json

/avs_commons/install
/doc/sphinx/build
/doc/sphinx/html
/doc/doxygen
/doc/sphinx/source/.doctrees
!/doc/sphinx/Makefile

# built tutorials
examples/build


================================================
FILE: .github/workflows/anjay-tests.yml
================================================
# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>
# AVSystem Anjay LwM2M SDK
# All rights reserved.
#
# Licensed under AVSystem Anjay LwM2M Client SDK - Non-Commercial License.
# See the attached LICENSE file for details.

name: Anjay tests
on: [push]
jobs:
  ubuntu2204-compilers-test:
    runs-on: ubuntu-latest
    container: avsystemembedded/anjay-travis:ubuntu-22.04-3.0
    env:
      CC: ${{ matrix.CC }}
      CXX: ${{ matrix.CXX }}
      MEM_CHECK_TOOL: ${{ matrix.MEM_CHECK_TOOL }}
    steps:
      # NOTE: workaround for https://github.com/actions/checkout/issues/760
      - run: git config --global safe.directory '*'
      # NOTE: v2 requires Git 2.18 for submodules, it's not present in the image
      - uses: actions/checkout@v1
        with:
          submodules: recursive
      - run: apt-get update
      - run: apt-get -y install $CC $CXX
      - run: ./devconfig $MEM_CHECK_TOOL --without-analysis -DWITH_VALGRIND_TRACK_ORIGINS=OFF -DWITH_IPV6=OFF
      - run: |
          . /venv/bin/activate
          env CC=gcc LC_ALL=C.UTF-8 make -j
      - run: |
          . /venv/bin/activate
          env CC=gcc LC_ALL=C.UTF-8 make check
    strategy:
      fail-fast: false
      matrix:
        include:
          - CC: gcc-11
            CXX: g++-11
            MEM_CHECK_TOOL: --with-valgrind
          - CC: gcc-12
            CXX: g++-12
            MEM_CHECK_TOOL: --with-valgrind
          - CC: clang-11
            CXX: clang++-11
            MEM_CHECK_TOOL: --with-valgrind
          - CC: clang-12
            CXX: clang++-12
            MEM_CHECK_TOOL: --with-valgrind
          - CC: clang-13
            CXX: clang++-13
            MEM_CHECK_TOOL: --with-valgrind
          - CC: clang-14
            CXX: clang++-14
            MEM_CHECK_TOOL: --without-memcheck # NOTE: workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1758782

  ubuntu2404-compilers-test:
    runs-on: ubuntu-latest
    container: avsystemembedded/anjay-travis:ubuntu-24.04-3.0
    env:
      CC: ${{ matrix.CC }}
      CXX: ${{ matrix.CXX }}
      MEM_CHECK_TOOL: ${{ matrix.MEM_CHECK_TOOL }}
    steps:
      # NOTE: workaround for https://github.com/actions/checkout/issues/760
      - run: git config --global safe.directory '*'
      # NOTE: v2 requires Git 2.18 for submodules, it's not present in the image
      - uses: actions/checkout@v1
        with:
          submodules: recursive
      - run: apt-get update
      - run: apt-get -y install $CC $CXX
      - run: ./devconfig $MEM_CHECK_TOOL --without-analysis -DWITH_VALGRIND_TRACK_ORIGINS=OFF -DWITH_IPV6=OFF
      - run: |
          . /venv/bin/activate
          env CC=gcc LC_ALL=C.UTF-8 make -j
      - run: |
          . /venv/bin/activate
          env CC=gcc LC_ALL=C.UTF-8 make check
    strategy:
      fail-fast: false
      matrix:
        include:
          - CC: gcc-12
            CXX: g++-12
            MEM_CHECK_TOOL: --with-valgrind
          - CC: gcc-13
            CXX: g++-13
            MEM_CHECK_TOOL: --with-valgrind
          - CC: gcc-14
            CXX: g++-14
            MEM_CHECK_TOOL: --with-valgrind
          - CC: clang-17
            CXX: clang++-17
            MEM_CHECK_TOOL: --with-valgrind
          - CC: clang-18
            CXX: clang++-18
            MEM_CHECK_TOOL: --with-valgrind
          - CC: clang-19
            CXX: clang++-19
            MEM_CHECK_TOOL: --with-valgrind

  rockylinux9-compilers-test:
    runs-on: ubuntu-latest
    container: avsystemembedded/anjay-travis:rockylinux-9-3.0
    env:
      CC: ${{ matrix.CC }}
      CXX: ${{ matrix.CXX }}
    steps:
      # NOTE: workaround for https://github.com/actions/checkout/issues/760
      - run: git config --global safe.directory '*'
      # NOTE: v2 requires Git 2.18 for submodules, it's not present in the image
      - uses: actions/checkout@v1
        with:
          submodules: recursive
      - run: dnf update -y --nobest
      - run: dnf install -y $CC
      # Solve issues with EPERM when running dumpcap
      - run: setcap '' $(which dumpcap)
      - run: ./devconfig --with-valgrind --without-analysis -DWITH_VALGRIND_TRACK_ORIGINS=OFF -DWITH_IPV6=OFF
      - run: |
          . /venv/bin/activate
          env CC=gcc LC_ALL=C.UTF-8 make -j
      - run: |
          . /venv/bin/activate
          env CC=gcc LC_ALL=C.UTF-8 make check
    strategy:
      fail-fast: false
      matrix:
        include:
          - CC: gcc
            CXX: g++
          - CC: clang
            CXX: clang++

  macOS-test:
    runs-on: "${{ matrix.RUNNER }}"
    steps:
      # NOTE: v2 requires Git 2.18 for submodules, it's not present in the image
      - uses: actions/checkout@v1
        with:
          submodules: recursive
      - run: brew update
      # NOTE: try the brew install command twice to work around "brew link" errors
      - run: INSTALL_CMD="brew install python3 openssl"; $INSTALL_CMD || $INSTALL_CMD
      # NOTE: Some tests don't pass on mbedTLS 3.6.2 now, so we need to install an older version
      #       Homebrew only specifiers major version of mbedTLS, so let's pin the version to 3.6.0 manually
      - run: curl -f https://raw.githubusercontent.com/Homebrew/homebrew-core/219dabf6cab172fb8b62b4d8598e016e190c3c20/Formula/m/mbedtls.rb > /tmp/mbedtls.rb
      # HACK: New version of homebrew requires us to install a formulae from a tap, create a tap for our mbedTLS.
      # The change in homebrew is intentional and won't be fixed, for more details see: https://github.com/orgs/Homebrew/discussions/6351
      - run: brew tap-new embedded/mbedtls
      - run: |
          TAP_DIR="$(brew --repo embedded/mbedtls)"
          mkdir -p "${TAP_DIR}/Formula"
          cp /tmp/mbedtls.rb "${TAP_DIR}/Formula/mbedtls.rb"
          git -C "${TAP_DIR}" add Formula/mbedtls.rb
          git -C "${TAP_DIR}" -c user.name="CI" -c user.email="ci@example.com" commit -m "Add custom mbedtls formula"
      - run: brew install embedded/mbedtls/mbedtls
      - run: brew pin mbedtls
      # NOTE: The above command may have installed a new version of Python, that's why we launch it weirdly
      # NOTE: We manualy create env since devconfig does not use /usr/bin/env python3
      - run: /usr/bin/env python3 -m venv venv
      - run: env JAVA_HOME="$JAVA_HOME_17_X64" ./devconfig --with-asan --without-analysis --no-examples -DWITH_VALGRIND_TRACK_ORIGINS=OFF -DWITH_IPV6=OFF -DMBEDTLS_ROOT_DIR=/opt/homebrew/opt/mbedtls
      - run: |
          . venv/bin/activate
          LC_ALL=en_US.UTF-8 make -j
      - run: |
          . venv/bin/activate
          LC_ALL=en_US.UTF-8 make check
    strategy:
      fail-fast: false
      matrix:
        include:
          - RUNNER: macos-14
          - RUNNER: macos-15
          - RUNNER: macos-26


================================================
FILE: .github/workflows/coverity.yml
================================================
# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>
# AVSystem Anjay LwM2M SDK
# All rights reserved.
#
# Licensed under AVSystem Anjay LwM2M Client SDK - Non-Commercial License.
# See the attached LICENSE file for details.

name: Coverity
on:
  push:
    branches: [master]
jobs:
  coverity:
    runs-on: ubuntu-latest
    container: avsystemembedded/anjay-travis:ubuntu-22.04-3.0
    env:
      # NOTE: These need to be configured in GitHub Actions GUI
      COVERITY_EMAIL: ${{ secrets.COVERITY_EMAIL }}
      COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
    steps:
      # NOTE: workaround for https://github.com/actions/checkout/issues/760
      - run: git config --global safe.directory '*'
      # NOTE: v2 requires Git 2.18 for submodules, it's not present in the image
      - uses: actions/checkout@v1
        with:
          submodules: recursive
      - run: |
          mkdir -p coverity_tool
          bash -c 'cd coverity_tool && \
              wget https://scan.coverity.com/download/linux64 --post-data "token=$COVERITY_SCAN_TOKEN&project=AVSystem%2FAnjay" -O coverity_tool.tgz && \
              tar xf coverity_tool.tgz'
      - run: ./devconfig --without-analysis -DWITH_NESTED_FUNCTION_MUTEX_LOCKS=OFF -DWITH_IPV6=OFF
      - run: env LC_ALL=C.UTF-8 ./coverity_tool/cov-analysis*/bin/cov-build --dir cov-int make
      - run: tar zcf cov-int.tgz cov-int
      - run: |
          curl --form "token=$COVERITY_SCAN_TOKEN" \
               --form "email=$COVERITY_EMAIL" \
               --form file=@cov-int.tgz \
               --form version=$(git rev-parse HEAD) \
               --form description="" \
               https://scan.coverity.com/builds?project=AVSystem%2FAnjay


================================================
FILE: .gitignore
================================================
# binaries
*.a
*.so
*.so.*
/demo/demo

# NetBeans Project
nbproject

# IDEA-based IDE project
.idea/

# VSCode
.vscode/

# build configuration autogenerated files
/build
/coverage
/output
*.swp
CMakeFiles/
CMakeTmp/
CMakeCache.txt
CMakeDoxyfile.in
CMakeDoxygenDefaults.cmake
cmake_install.cmake
install_manifest.txt
_CPack_Packages/
CPackConfig.cmake
CPackSourceConfig.cmake
CTestTestfile.cmake
Testing/
/include_public/anjay/anjay_config.h
posix-config.h
anjay-*.cmake
Doxyfile
/doc/sphinx/source/conf.py
/doc/sphinx/source_api/api_generated
tests/integration/run_tests.sh

# other
Makefile
*.log
*.gcda
*.gcno
*.gcov
*~
tags
.ycm_extra_conf.py
.ycm_extra_conf.pyc
/tests/codegen/*.c
/tests/codegen/*.cpp
/tests/integration/build
__pycache__/
.gdb_history
*.orig
*.egg-info
*.pyc
*.cache
compile_commands.json

/avs_commons/install
/doc/sphinx/build
/doc/sphinx/html
/doc/doxygen/Doxyfile*
/doc/sphinx/source/.doctrees
!/doc/sphinx/Makefile

# built tutorials
examples/*-build

# Anjay persistence files
*-persistence.dat

# Python venv
/venv/
build/
dist/
*.egg-info/

# py-build-cmake cache
.py-build-cmake_cache


================================================
FILE: .gitmodules
================================================
[submodule "deps/avs_commons"]
	path = deps/avs_commons
	url = https://github.com/AVSystem/avs_commons.git


================================================
FILE: CHANGELOG.md
================================================
# Changelog

## 3.13.1 (April 2nd, 2026)

### Bugfixes

- Tests and documentation corrections


## 3.13.0 (March 31st, 2026)

### Features
- Introduced experimental SSL Error API under `WITH_SSL_ERROR_API` for MbedTLS
  and custom TLS backends
- Implemented FW Update Object v1.1 Resources.
- Introduced support for LwM2M 1.2 features:
  - LwM2M CBOR format,
  - Bootstrap Pack operation,
  - Observation Attributes (carried in Observe, not in Write Attributes)
  - `hqmax` and `edge` attributes (`con` attribute is supported separatley from
    LwM2M 1.2, enabled with `ANJAY_WITH_CON_ATTR`),
  - Discover `depth` parameter,
  - SenML-ETCH CBOR & JSON formats for composite operations,
  - deleting Resource Instances.


## 3.12.0 (January 30th, 2026)

### BREAKING CHANGES

- PEP 668 was adopted. Using Python based tools requires a virtual environment
  and `devconfig` script ensures it's activated.
- Most tools from `tests/integration/framework` were extracted
  into `tools/test-framework-tools` directory which is being installed
  in venv by `devconfig`

### Bugfixes
- Fixed crash in avs_coap when block transfers are disabled and outgoing
  message does not fit into the external output buffer.
- (commercial version only) Fixed a bug that made it impossible to set a Master
  Secret which length was anything other than 16 bytes (OSCORE).
- Fixed avs_coap tests for GCC 15

### Features
- Added traffic interceptor usage to demo application.
- (commercial version only) Made it possible to set the maximum length of the
  Master Secret and Master Salt using the AVS_COAP_OSCORE_MASTER_SECRET_SIZE
  and AVS_COAP_OSCORE_MASTER_SALT_SIZE options, respectively.
- Removed experimental tags from server connection status API, IPSO objects v2
  API, Software Management object API, CoAP Download retry API and
  Confirmable Notification status callback API.

### Improvements
- Reworked the help menu in Anjay Demo.
- (commercial version only) Added support for running PKCS11 integration tests
  with OpenSSL as (D)TLS backend.
- Migrated pymbedtls build system to pyproject.toml.

## 3.11.0 (September 26th, 2025)

### BREAKING CHANGES

- Default value of maximal holdoff time during Bootstrap limited from 120 sec.
  to 20 sec. The limit can still be changed using ANJAY_MAX_HOLDOFF_TIME define.
- If the Server certificate is missing from the Data Model, Anjay falls back to
  PKIX verification, provided that a Trust Store is available, even when the
  certificate usage is set to DANE-TA or DANE-EE.
- avs_commons 5.5.0 that is used by Anjay 3.11.0 stoped passing the trust store
  to Mbed TLS backend for Certificate Usage 2 or 3. For details on how Anjay
  handles Certificate Usage resource refer to
  Anjay Specification -> Advanced Topics -> Certificate Usage.

### Bugfixes

- Updated avs_commons to a version without a PSK-mode vulnerability in the Mbed
  TLS backend where a client configured for PSK could connect to a server that
  did not know the PSK, due to advertising non-PSK key exchange and skipping
  certificate verification. This issue affected only TLS 1.3 connections with
  Mbed TLS versions ≥ 3.6.1.
  For details, see: https://github.com/AVSystem/avs_commons/releases/tag/5.5.0

### Features
- (commercial version only) Added support for configuring OSCORE Object for each
  Security Object in Anjay Demo.

## 3.10.0 (May 28th, 2025)

### Features
- Instruction how to generate packages for Anjay Demo was added to documentation.
- Dropped support for Ubuntu 18.04 and removed tests for it.

### Bugfixes

- Fixed `devconfig` script which was incorrectly setting Anjay version in logs
  to "unknown".
- Added canceling the Register or Update message exchange if it's in progress
  when Server Disable (with resource execution or by API) is called that could
  have led to disabling the server infinitely.

### Improvements

- Unified script for generating packages in integration tests, now it can also
  be used to generate packages for the Software Management object.
- The format of the metadata for packages used in integration tests and the
  demo has been revised to be more unambiguous and unified.
- Added `confirmable_notification_status_cb` handler that is called if
  acknowledgement for confirmable notification is received from the Server or
  some error has occurred.

## 3.9.0 (February 28th, 2025)

### Features

- LwM2M Gateway functionality was added. To see the feature description, API
  documentation and tutorial on its usage, see Anjay docs
- Added a ``coap_downloader_retry_count`` and ``coap_downloader_retry_delay``
  configuration options that allow to resume the CoAP download process in case
  of network errors.

### Improvements

- Extended the functionality of the flag enabling Connection ID to also include
  connections to the file download CoAP server, in addition to the LwM2M server
- Migrated GitHub Actions tests on macOS to the macos-14 runner.
- Refactored test_ghactions.py.
- Added Github Actions test on macOS for the AppleClang.

### Bugfixes

- Ensured that Github Actions tests on macOS actually runs on LLVM installed
  from Homebrew instead of AppleClang.
- Minor fix in the devconfig.

## 3.8.1 (November 13th, 2024)

### Improvements

- Improved the coverage script and switched to lcov.
- In case when the LwM2M server answers with an RST message to a notification
  that is yielding an error value (e.g. failure to read), which effectively
  cancels the notification, Anjay is not infinitely trying to transmit that
  message with error value once again. New behavior is enabled by default, and
  controlled with `WITH_AVS_COAP_OBSERVE_FORCE_CANCEL_ON_UNACKED_ERROR` option
  of `avs_coap`. Existing projects have to opt-in explicitly.
- Added `--nobest` flag to `dnf update` in Rockylinux image preparation for
  tests to solve installation candidates conflicts.

### Bugfixes

- Actually fixed compatibility with Mbed TLS 3.6.
- Fixed compatibility of integration test framework with Mbed TLS versions that
  enabled TLS 1.3, but didn't use `MBEDTLS_USE_PSA_CRYPTO`.
- The -Wformat warning appearing in some compilers has been fixed.
- Fixed LwM2M CBOR parser incorrectly accepting inputs containing empty arrays
  as keys
- Prevent from generating non unique session tokens when the monotonic system
  clock granulation is not fine enough.
- Refactored how timeouts are handled in pymbedtls to be in line with use of
  mbedTLS in avs_commons.

## 3.8.0 (May 28th, 2024)

### BREAKING CHANGES

- Timeout in case of sending a Confirmable Notification does not cancel the
  observation anymore by default.

### Features

- Added a ``connection_error_is_registration_failure`` configuration option that
  allows handling connection errors as Register failures, including the
  automatic retry mechanism
- Added experimental server connection status API.

### Improvements

- (commercial version only) Changed MSISDN matching method in SMS binding
  feature to allow handling messages with Short Codes as originating number

### Bugfixes

- Fixed a corner case in which a connection error during a non-first Register
  attempt could cause uncontrolled infinite retries
- Fixed a bug in demo of Advanced Firmware Update module that prevented
  proper handling of security config for targets other than APP
- Fixed a bug that caused anjay_next_planned_notify_trigger family APIs to
  return an invalid value after canceling observations

## 3.7.0 (February 16th, 2024)

### Features

- Added support for LwM2M 1.2 server object requirement for infinite lifetime
  (lifetime == 0).
- Introduced @experimental and @deprecated Doxygen tags.
- Added experimental IPSO objects v2 API.
- Added experimental Software Management object API.

### Improvements

- Improved integration tests compability and framework stability
- Added support for wget2 for validating links in documentation (for HTTP/2
  support)

### Bugfixes

- Refactored generation of blockwise Confirmable notifications to avoid a
  possible assertion failure; requests for subsequent blocks of such
  notifications are now sent as Piggybacked responses
- Fixed a bug in the documentation of an object definition struct
- (commercial version only) Fixed problems with running some tests on systems
  with Mbed TLS 3.x
- Fixed a few assertion and pointer punning issues regarding calls to IPSO
  objects APIs in erroneous cases
- Prevent from trying to store empty cert/keys on HSM

## 3.6.1 (November 21st, 2023)

### Improvements

- Optimized heap memory usage: SenML CBOR payloads for Send and Notify
  operations are no longer serialized in memory in their entirety unless their
  contents depend on the Access Control object state
- Added a public define for MSISDN string size
- Optimized "Out of memory" logs in favor of a smaller flash memory footprint
- (commercial feature only) Added API for querying Anjay for SSID associated
  with given MSISDN and SMS Trigger resource value

### Bugfixes

- (commercial feature only) Fixes for various bugs that could cause invalid
  memory accesses when restoring data from corrupted core persistence data

## 3.6.0 (October 9th, 2023)

### Features

- Added APIs for setting custom timeouts for downloads performed over CoAP+TCP
  and HTTP, including firmware update downloads
- Added `requirements.txt` file to manage Python dependencies more efficiently

### Improvements

- Clarified documentation on behavior of Firmware Update and Advanced Firmware
  Update modules when ``anjay_fw_update_get_security_config_t`` and
  ``anjay_advanced_fw_update_perform_upgrade_t`` callbacks, respectively, are
  not defined.
- Added compilation flag that disables all composite operations

### Bugfixes

- Updated integration tests so that they pass on macOS
- Fix abort scenario in Advanced Firmware Update module

## 3.5.0 (September 7th, 2023)

### BREAKING CHANGES

- Reversed the order of calling the ``delivery_handler`` callback vs. canceling
  the observation when sending notifications with 4.xx or 5.xx code; this change
  is breaking only for direct users of ``avs_coap`` API

### Features

- Added APIs for suspending and resuming standalone downloads as well as
  Firmware Update and Advanced Firmware Update PULL-mode downloads
- Added standalone versions of the Security and Server object implementations,
  that can be customized by the end users
- Added definitions for common Core Object IDs in the public API
- Removed potentially faulty assertion in code generated by anjay_codegen.py
- (commercial feature only) added ``anjay_sim_bootstrap_calculate_md5()``
  function that allows verification whether SIM Bootstrap data has been changed
  (e.g. as a result of SIM OTA)

### Improvements

- Rewritten Send-based reporting in Advanced Firmware Update in such a way that
  it will now work with custom implementations of the Server object
- Simplified the CoAP downloader implementation so that the
  ``get_remote_hostname`` socket operation is no longer necessary for download
  resumption
- Made handling of initial peer CSM messages in CoAP+TCP asynchronous
- Updated the documentation with more descriptive warnings about functions that
  require extra care to maintain thread safety
- Removed ``const`` qualifier from ``MAKE_URI_PATH()`` compound literal which
  triggers a plausible compiler bug on IAR EWARM v9.30
- Reading SNI from the Security Object for the FOTA download connection

### Bugfixes

- Fixed a critical bug that caused Anjay to crash when sending notifications
  with 4.xx or 5.xx code over TCP
- Fixed a regression introduced in 2.13.0 that prevented the Firmware Update
  and Advanced Firmware Update from compiling without the
  ``ANJAY_WITH_DOWNLOADER`` configuration option enabled
- Fixed a condition where the Register or Update messages could be erroneously
  regenerated when refreshing server connections while already performing a
  Register or Update request
- Fixed a condition where the connection could be erroneously retried
  automatically when a fatal failure was expected
- Decoupled the ``WITH_AVS_COAP_TCP`` and ``ANJAY_WITH_LWM2M11`` configuration
  options so that they can be set independently as intended
- Fixed the ``devconfig`` script and Github Actions configuration for better
  compatibility with building on macOS
- Refactored TCP binding handling in integration tests for more reliability
- Fixed the case where CoAP+TCP Abort message could erroneously be sent multiple
  times
- Loosened some time constraints in Advanced Firmware Update tests
- Fixed supplemental iid sort in Advanced Firmware Update
- Fixed too early restart while performing an upgrade using Advanced Firmware
  Update module in Anjay demo app
- Fixed too early persistence write while performing an upgrade using Advanced
  Firmware Update module in Anjay demo app

## 3.4.1 (June 23rd, 2023)

### Features

- (commercial feature only) New ``sim_bootstrap`` module that implements the
  logic necessary to extract the EF(DODF-bootstrap) file contents from a smart
  card

### Bugfixes

- Fixed a potential crash in case of a specific out-of-memory condition in
  Advanced Firmware Update
- Fixed `anjay_config_log.h` so that all non-binary configuration options are
  properly logged
- Fixed a regression from 3.4.0 that prevented ``nsh_lwm2m.py`` from launching

## 3.4.0 (June 14th, 2023)

### Features

- New APIs for server connection lifecycle management:
  ``anjay_server_schedule_reconnect()`` and ``anjay_schedule_register()``
- New options in ``anjay_configuration_t`` that allow for optional more strict
  LwM2M TS compliance: ``update_immediately_on_dm_change`` and
  ``enable_self_notify``
- Added option to disable auto-closing of the socket when in queue mode.
- `avs_coap_observe_cancel()` is now public API (for direct users of avs_coap)
- Added Advanced Firmware Update as an Anjay module
- Added simplified demo of Advanced Firmware Update with two firmware images
- Added tutorial for Advanced Firmware Update

### Improvements

- Observations are now automatically cancelled if the client needs to send a new
  Register messsage
- Added explicit casts in macros that involve negating an unsigned value, to
  silence warnings generated by some compilers
- Various improvements and refactors of integration tests, to make them run
  faster and more stable
- (commercial feature only) Disabled servers are saved now in Core Persistence,
  which prevents them from registering until the timeout passes with respect to
  the real clock.

### Bugfixes

- Fixed handling of SenML payload that could cause erroneous behavior and memory
  leaks when parsing payloads only containing the Base Name field, without Name
- Fixed error handling in bootstrapper (commercial only) and factory
  provisioning modules so that the changes are properly rolled back in case of
  error
- Fixed assertion error (or 4.05 Method Not Allowed when compiled without
  assertions) when attempting to set the Disable Timeout resource in the Server
  object when the `ANJAY_WITHOUT_DEREGISTER` configuration option is set
- Fixed inequality comparisons on some time values that could cause erroneous
  behavior on platforms with low-resolution system clocks, and updated unit
  tests to not assume a high-resolution clock
- Fixed a problem where `anjay_ongoing_registration_exists()` inconditionally
  returned `true` if any server connection in a "disabled" state existed
- Timeout when sending a Confirmable Notification now cancels the observation,
  as required by RFC 7641
- Removed sending of Release messages when using CoAP+TCP, which fixes the issue
  of erroneously sending them at the beginning after reconnecting a LwM2M
  connection socket
- Fixed the serial port handling code in the sample NIDD driver, to properly
  handle cases where more than one line is received in a single read() call
- Fixed compatibility of integration tests with the current versions of the
  Python cryptography module
- Fixed problems with compiling the library without `WITH_AVS_COAP_BLOCK`
  enabled (contributed by Flonidan A/S)
- Fixed a bug in the pymbedtls library used by tests, that prevented it from
  working in DTLS client mode
- Fixed bug in the "Custom (D)TLS layers" code examples

## 3.3.1 (March 10th, 2023)

### Improvements

- `anjay_disable_server()` and `anjay_disable_server_with_timeout()` can now be
  called on servers that are not enabled as well

### Bugfixes

- Fixed resetting of counter for the Communication Sequence Retry Count resource
- Fixed a regression in 3.2.0 that prevented the bootstrap connection to be
  properly closed if the Bootstrap Server is reconfigured in the new bootstrap
  information and legacy Server-Initiated Bootstrap is disabled

## 3.3.0 (February 21st, 2023)

### Features

- New configuration option, `WITHOUT_MODULE_fw_update_PUSH_MODE` (CMake) / `ANJAY_WITHOUT_MODULE_FW_UPDATE_PUSH_MODE` (header), that allows disabling support for the PUSH mode in the Firmware Update module

### Improvements

- Refactored tests to use `avs_stream_inbuf` instead of `avs_unit_memstream`
- Refactored `anjay_input_ctx_constructor_t` to use only a single pointer for input stream
- Revised support for DTLS Connection ID extension, so that a new handshake is
  not performed if Connection ID is used, unless an error occurs
- Revised example Anjay configurations for embedded builds without CMake to
  optimize compile time and code size

#### Bugfixes

- Fixed a critical regression in 3.2.0 that could cause an assertion failure and use-after-free during Bootstrap Finish if the Bootstrap Server is reconfigured in the new bootstrap information and legacy Server-Initiated Bootstrap is disabled
- Fixed a bug that could cause undefined behavior when reading the Update Delivery Method resource in the Firmware Update object with thread safety enabled but Downloader disabled
- Fixed a bug that prevented notifications from being sent in a timely manner after receiving Reset message cancelling an Observation in response to another confirmable notification
- Fixed a bug that could cause an assertion failure when using `anjay_delete_with_core_persistence()` if a primary server connection failed, but a trigger (SMS) connection is operational
- Fixed the response code of unsuccessful Resource /1/x/9 Bootstrap-Request Trigger execution (e.g. when there is no Bootstrap-Server Account)

## 3.2.1 (December 13th, 2022)

### Improvements

- Added some missing log messages for potential scheduler errors
- Updated the version of pybind11 used by integration tests to 2.10.1

### Bugfixes

- Fixed a regression in 3.2.0 that caused some invalid Writes to be silently ignored without responding with proper error codes
- Fixed compatibility of integration tests with Python 3.11 and the current Github macOS environment

## 3.2.0 (December 7th, 2022)

### BREAKING CHANGES

- Observations are now implicitly canceled when the client's endpoint identity changes (i.e., when the socket is reconnected without a successful DTLS session resumption). This is in line with [RFC 7641](https://datatracker.ietf.org/doc/html/rfc7641#page-22) and LwM2M TS requirements (see [Core 6.4.1](https://www.openmobilealliance.org/release/LightweightM2M/V1_1_1-20190617-A/HTML-Version/OMA-TS-LightweightM2M_Core-V1_1_1-20190617-A.html#6-4-1-0-641-Observe-Operation) and [Transport 6.4.3](https://www.openmobilealliance.org/release/LightweightM2M/V1_1_1-20190617-A/HTML-Version/OMA-TS-LightweightM2M_Transport-V1_1_1-20190617-A.html#6-4-3-0-643-Registration-Interface)), but **may break compatibility with some non-well-behaved servers.**

### Features

- New APIs to access information about the last registration time, next registration update time and last communication with a server time
- Expanded `anjay_resource_observation_status_t` structure so that now `anjay_resource_observation_status()` returns also the number of servers that observe the given Resource (capped at newly introduced `ANJAY_MAX_OBSERVATION_SERVERS_REPORTED_NUMBER`) and their SSIDs

### Improvements

- Migrated GitHub Actions tests from Fedora-36 to RockyLinux-9
- Added compilation flag to enforce Content-Format in Send messages.
- Refactored Firmware Update notification handling and simplified internal module support
- Removed the usage of symbolic links between Python packages to make them usable on Windows
- Key generation in the factory provisioning script has been rewritten to use the cryptography Python module instead of pyOpenSSL
- Factory provisioning script now uses elliptic curve cryptography by default in certificate mode
- `anjay_next_planned_lifecycle_operation()` and `anjay_transport_next_planned_lifecycle_operation()` now properly respect jobs that have been scheduled manually (e.g. `anjay_schedule_registration_update()`)

### Bugfixes

- Fixed a bug that could cause some resources in a Write message to be ignored when they follow a Multiple-Instance Resource entry
- Fixed semantics of Resources 19 and 20 in the Server object, which were mistakenly swapped
  - **NOTE:** The persistence format for the Server object has been reinterpreted so that Resources 19 and 20 remain where they were, without taking semantics into account. This will fix configurations provisioned by Servers but may break configuration persisted just after initially configuring it from code.
- Made sure that `anjay_schedule_registration_update()` forces a single Update request even when followed by `anjay_transport_schedule_reconnect()` or a change of offline mode
- Made sure that notifications are not sent before the Update operation if one has been scheduled
- Made sure that `anjay_transport_schedule_reconnect()` properly reconnects the Bootstrap server connection in all cases
- Made sure that the socket is properly closed when queue mode is enabled, including previously missing cases related to the Send operation and when no CoAP message needs to be sent at all
- Refactored asynchronous server connection management to avoid race conditions that could lead to required actions (e.g. EST requests) not being performed when the calculated delays were not big enough

## 3.1.2 (August 24th, 2022)

### Improvements

- Reduced code size of the Security object implementation
- Updated documentation, readme and examples to mention the new EU IoT Cloud platform
- Migrated GitHub Actions tests to ubuntu-18.04, ubuntu-20.04, ubuntu-22.04, fedora-36 and macos-11

### Bugfixes

- Fixed various compilation warnings
- Fixed dangerous usage of `avs_realloc()` in the event loop implementation

## 3.1.1 (July 22nd, 2022)

### Improvements

- Added `CHANGELOG.md`

### Bugfixes

- Added the missing return in anjay_dm_handlers.c that could cause undefined behavior when `ANJAY_WITH_THREAD_SAFETY` was disabled
- Removed the unused option in the factory provisioning script
- Removed usage of Python 3.6 syntax in tests that caused Github Actions tests to fail
- Added missing notes about the change to (D)TLS version in all migration guides in the documentation
- (commercial feature only) Fixed proper handling of changing the disable_legacy_server_initiated_bootstrap across core persistence cycles

## 3.1.0 (July 6th, 2022)

### BREAKING CHANGES

**Note:** the following changes, while technically breaking, are minor, and should not cause problems in most pratical usages. See also: https://docs.avsystem.com/hubfs/Anjay_Docs/Migrating/MigratingFromAnjay30.html

- Changed error handling semantics of anjay_attr_storage_restore() to match other persistence restore functions
- TLS 1.2 is no longer implicitly set as the default (D)TLS version; the underlying crypto library's default is now used

### Features

- Factory provisioning feature that allows to perform "Factory bootstrap" based on SenML CBOR data stream
- New API: anjay_access_control_set_owner(), allowing to set Owner resource in the Access Control object during the "Factory bootstrap" phase
- New APIs for changing the CoAP transmission parameters, CoAP exchange timeout and DTLS handshake timeouts while the library is running

### Improvements

- Migrated the Observe/Notify subsystem to use the new AVS_SORTED_SET API from avs_commons; this means that avs_rbtree can be disabled, in which case a more lightweight list-based implementation will be used
- Minor code size optimizations in the Server object implementation
- Added documentation for the OSCORE commercial feature
- (D)TLS version can now be set from command line in the demo application

### Bugfixes

- Fixed a bug in anjay_ongoing_registration_exists() that could cause it to always return true if disable_legacy_server_initiated_bootstrap is set to true
- Fixed improper formatting of the payload describing the data model in the Register message during initial negotiation of the LwM2M version
- Fixed handling of persistence format versioning for the Security object, that could cause crashes if Anjay was compiled without LwM2M 1.1 support
- Changed the "Bootstrap on Registration Failure" resource in the Server object to be readable, as specified in LwM2M TS 1.2
- (commercial feature only) Added persistence of runtime LwM2M version in the core persistence feature; previously the client could erroneously use a different LwM2M version than it registered with after core persistence restore

## 3.0.0 (May 18th, 2022)

### BREAKING CHANGES

- Changed license of the free version to AVSystem-5-clause
- Refactored the attr_storage module as a core feature
  - Names of the relevant CMake options and configuration macros have changed
  - anjay_attr_storage_install() has been removed; Attribute Storage is  now always installed if enabled at compilation time
  - Behavior of anjay_attr_storage_restore() has been changed - this function now fails if supplied source stream is empty
- The "con" attribute is now included in anjay_dm_oi_attributes_t, as it has been standardized for LwM2M TS 1.2
- Refactored public headers to consistently use conditional compilation; APIs for disabled features are no longer accessible
- Removed previously deprecated APIs
- avs_commons 5.0 refactor the API for providing PSK credentials. Please refer to the change log there, or the document below for details: https://docs.avsystem.com/hubfs/Anjay_Docs/Migrating/MigratingFromAnjay215.html

### Features

- LwM2M TS 1.1 support and related features are now available in the open source version; the features include:
  - Support for TCP binding
  - Support for SenML JSON, SenML CBOR and raw CBOR content formats
  - Support for the Send operation
  - Possibility for automatically moving security credentials provisioned by the Bootstrap Server or the bootstrapper module onto hardware security engines (note: no hardware security engine implementation is provided in the open source version)
- Security credentials provisioned by the Bootstrap server or bootstrapper module and automatically moved onto hardware security engine can now be marked as "permanent" to prevent them from being removed
- (commercial feature only) Experimental support for some LwM2M TS 1.2 features

### Improvements

- Refactored incoming message handling to make use of the `AVS_NET_SOCKET_HAS_BUFFERED_DATA` feature added in avs_commons 5.0
- Refactored and simplified internal flow of calling data model handlers
- Refactored internal handling of communication state
- Commercial features are now available for separate inclusion, described in the documentation more clearly and feature code examples
- Various improvements in the documentation

## Anjay 2.15.0 (April 8th, 2022)

### Bugfixes

- Fixed some uninitialized variables in IPSO object implementations
- Fixed some compilation warnings in unit tests
- Fixed compatibility of integration tests with OpenSSL 3
- Fixed socket flag handling in tests that were breaking with some versions of Python
- Fixed some obsolete information in Doxygen documentation
- (commercial feature only) Added a validity check for the certificate provisioned via EST; previous code could lead to an assertion failure if the server misbehaved or the system clock was not set correctly

### BREAKING CHANGES

- avs_commons 4.10 contains a refator of PSK security credential handling. Please refer to the change log there, or the document below for details: https://docs.avsystem.com/hubfs/Anjay_Docs/Migrating/MigratingFromAnjay214.html

### Features

- Added a new anjay_event_loop_run_with_error_handling() API that automatically restarts the communication in case of a fatal error
- (commercial version only) Added support for using PSK security credentials located in hardware security engines
- (commercial version only) Added the possibility for automatically moving security credentials provisioned by the Bootstrap Server or the bootstrapper module onto hardware security engines

### Improvements

- Added proper support for object versioning in the object stub generator
- Refactored LOG_VALIDATION_FAILED macros in security and server modules to prevent some compilers to generate code with excessive stack usage
- Stopped using LOG macro in expression context for better compatibility with external logger implementations
- Added support for Mbed TLS 3.1 in the pymbedtls module used in tests

### Bugfixes

- Fixed firmware update protocol support being erroneously reported when a custom TLS layer is used
- Changed default "Minimum Period" attribute value to 0, as mandated by the specification
- Fixed a potential memory leak in fw_update module's cleanup routine
- Fixed the downloader and fw_update modules erroneously passing empty CoAP ETags to the user
- Fixed ETag handling in the firmware update tutorial examples
- Fixed handling of objects with names that contain characters that are invalid for C identifiers in the object stub generator
- Fixed building documentation on newer versions of Sphinx
- Prevented the custom TLS layer from building during testing if the dependencies are not met
- (commercial version only) Fixed the wrong resource being written when updating the TLS/DTLS Alert Code resource
- (commercial version only) Fixed a bug which could cause communication over coaps+tcp to be stalled due to buffering on the TLS layer

Also updates avs_commons to version 4.10.0. For details, see https://github.com/AVSystem/avs_commons/releases/tag/4.10.0

## Anjay 2.14.1 (November 29th, 2021)

### Features

- added custom TLS layer tutorial,
- added possibility to generate code for objects with constant number of instances.

### Improvements

- updated avs_commons to version 4.9.1,
- made avs_coap work with external logger feature,
- expanded code generation docs.

### Bugfixes

- fixed erronous links in documentation,
- removed issues from IPSO objects documentation.

## Anjay 2.14.0 (October 1st, 2021)

### Features

- Added anjay_event_loop_run() and anjay_serve_any() APIs that remove the need to implement the event loop manually in client applications
- Added predefined implementation of some common IPSO object types
- (commercial version only) Support for PSA API for hardware-based security

### Improvements

- Moved mutex locking from anjay_sched_run() to scheduler jobs themselves, so that custom scheduler jobs are properly supported when thread safety is enabled; this is technically a breaking change against 2.13.0, but the 2.13.0 behaviour has been classified as a defect
- Refactored the demo client to use the new event loop API
- Made data types used by anjay_codegen.py more consistent
- Various improvements and updates to the documentation, including new tutorials about thread safety and the new APIs
- Improved integration tests so that they are more deterministic
- Migrated public CI for the open-source version to GitHub Actions

### Bugfixes

- Fixed incorrect behavior of anjay_ongoing_registration_exists() when Server-Initiated Bootstrap was in use (issue #56)
- Fixed some potential race conditions that could cause anjay_get_socket_entries() to return invalid sockets when downloads were in progress
- Fixed obsolete URLs in documentation

Also updates avs_commons to version 4.9.0. For details, see: https://github.com/AVSystem/avs_commons/releases/tag/4.9.0

## Anjay 2.13.0 (July 19th, 2021)

### Features

- Added optional support for thread safety When enabled, all calls to Anjay library functions are protected using built-in mutex, which allows safe integration into multi-threaded applications.

### Improvements

- General improvements when using fw_update module without ANJAY_WITH_DOWNLOADER
- Add option in demo to provide identity and psk as ASCII string

### Bugfixes
- Fixed URL in lwm2m_object_registry.py
- Fix bug in dockerfile with apt-get install change not refreshing apt index

Also updates avs_commons to version 4.8.1. For details, see: https://github.com/AVSystem/avs_commons/releases/tag/4.8.1

## Anjay 2.12.0 (June 30th, 2021)

### Features

- Added extended log handler implementation, it can be enabled in demo by `--alternative-logger` argument.

### Improvements

- Endpoint name and local MSISDN are copied during anjay_new() along with the rest of the parameters.
- Demo now checks if binding mode is compatible with the provided URI.

### Bugfixes

- Fixed the case where the LwM2M server requests a block from the middle.
- Handle fatal CoAP errors during registration, in case of aborted context device will abort registration. (commercial version only)

Also updates avs_commons to version 4.8.0. For details, see: https://github.com/AVSystem/avs_commons/releases/tag/4.8.0

## Anjay 2.11.1 (June 2nd, 2021)

### Features

- Added anjay_send_batch_data_add_current_multiple_ignore_not_found(), a variant of anjay_send_batch_data_add_current_multiple() that does not treat non-existing resources as an error

### Improvements

- Simplifications in JSON serialization code
- Relaxed timeout values in some integration tests
- Added documentation for internal CoAP packet parsing APIs
- (commercial version only) Read-Composite and Observe-Composite responses now make use of the "base name" and "base time" SenML labels
- (commercial version only) Observe response sequence number is now omitted for the TCP transport, as permitted by RFC 8323

### Bugfixes

- Fixed default content-format selection for simple resources if it is not selected by the server and text/plain is disabled at compile time
- (commercial version only) Fixed a critical bug in anjay_send_batch_data_add_current_multiple() that could cause the batch to be in an inconsistent state if the underlying read operation failed
- (commercial version only) Fixed a potential memory leak when restoring observation state in anjay_new_from_core_persistence()

Also updates avs_commons to version 4.7.2. For details, see: https://github.com/AVSystem/avs_commons/releases/tag/4.7.2

## Anjay 2.11.0 (April 29th, 2021)

### Features

- (commercial version only) Added anjay_send_batch_data_add_current_multiple() API for sending multiple resources with the same timestamp
- (commercial version only) "send" command in demo application now supports sending multiple resources at once

### Improvements

- Added documentation for the avs_coap module
- Added tutorial for using the LwM2M Send method (available in commercial version only)
- (commercial version only) Resource Instances can now be created through the Write-Composite operation
- (commercial version only) Made use of Base Name and Base Time labels when generating SenML documents to reduce message size

### Bugfixes

- Enforced decimal base when handling text/plain content format (previously C-style octal and hexadecimal literals were erroneously supported)
- Made anjay_ongoing_registration_exists() work even if non-default implementation of the Server object is in use
- Fixed various compilation warnings
- (commercial version only) Removed erroneous quotes when reporting LwM2M Enabler version in Register requests and Discover responses for LwM2M 1.1
- (commercial version only) Proper checks for attempts to send data from forbidden objects (Security, OSCORE) via anjay_send_batch_data_add_current()
- (commercial version only) Added graceful handling of the case when security information provisioned through EST onto an HSM is not accessible, but necessary to attempt bootstrap

Also updates avs_commons to version 4.7.1. For details, see: https://github.com/AVSystem/avs_commons/releases/tag/4.7.1

## Anjay 2.10.0 (March 19th, 2021)

### Features

- Added additional_tls_config_clb field to anjay_configuration_t that allows for advanced configuration of the TLS backend
- Added possibility to mix NoSec and secured server connections in demo client
- Added pretty-printing of JSON payloads in the NSH testing shell
- (commercial version only) Added APIs to query times of upcoming Register, Update and Notify events
- (commercial version only) Implemented reporting of Short Server ID for the OSCORE object on Bootstrap-Discover, as required by LwM2M 1.1
- (commercial version only) Added support for the Trigger resource in the Server object
- (commercial version only) Added support for the ID Context resource in the OSCORE object

### Improvements

- Refactored _anjay_sync_access_control() to avoid recursion
- Refactored debug logging of CoAP BLOCK options

### Bugfixes

- Fixed the issue where pmax-based notifications were not being scheduled when Notification Storing was disabled
- Fixed semantics of the LwM2M Write operation when writing optional resources that are not supported in the implementation; this behaviour has been clarified between LwM2M TS releases 1.1 and 1.1.1
- Fixed queue-mode server connections superfluously resuming when exiting offline mode if there is no data to be sent
- Fixed potential NULL dereferences in Security, Server, Access Control and OSCORE object implementations
- Fixed potential memory leak in data batch storage module (used by Notify and Send operations)
- More robust state checking in the TLV output module
- Fixed some linting checks (visibility, header and code duplication verification) that were not executing properly as part of "make check" and deduplicated them between subprojects
- Fixed a bug in pymbedtls module that caused integration tests to sometimes freeze indefinitely
- Fixed a bug that prevented lwm2m_decode command in the NSH testing shell from working
- Fixed a problem with building the demo application on Windows
- (commercial version only) Made LwM2M Send operation work properly when the server connection is suspended due to queue mode operation
- (commercial version only) Fixed handling of buffer overflow corner cases in the BG96 driver in the demo application

Also updates avs_commons to version 4.7. For details, see: https://github.com/AVSystem/avs_commons/releases/tag/4.7

## Anjay 2.9.0 (January 18th, 2021)

### BREAKING CHANGES

- Minimum required CMake version is raised to 3.6
- avs_commons 4.6 contains a refactor of avs_net_local_address_for_target_host() that may be breaking for users who maintain their own socket integration code

For more detailed information about breaking changes and how your code needs to be updated, see: https://docs.avsystem.com/hubfs/Anjay_Docs/Migrating/MigratingFromAnjay28.html

### Features

- LwM2M Testing Shell is now included in the open-source version, see https://docs.avsystem.com/hubfs/Anjay_Docs/Tools/CliLwM2MServer.html
- Demo application can now be built even when some of the optional library features (e.g. bootstrap, Access Control, observation support, persistence) are disabled
- A new guide for writing custom socket integration code, and example lightweight implementation: https://docs.avsystem.com/hubfs/Anjay_Docs/PortingGuideForNonPOSIXPlatforms/NetworkingAPI.html

### Improvements

- Improved wording in migration documentation to make usage clearer
- Various improvements to integration tests:
  - Tests that involve restarting the demo process now retain execution logs for each launch
  - Fixed a race condition when handling demo process shutdown
  - (commercial version only) Additional tests for rebuilding client certificate chain
- (commercial version only) CoAP message cache, previously only enabled for UDP, is now also used for SMS and NIDD transports
- (commercial version only) Made closing NIDD connection in the BG96 driver more resilient to errors

### Bugfixes

- Removed some misleading log messages
- (commercial version only) Fixed some dependencies between CMake configuration options so that cmake -DDTLS_BACKEND= . works with default settings

Also updates avs_commons to version 4.6 which, in addition to the breaking change mentioned above, introduces the following changes:

### Improvements

- Additional tests for the avs_stream module

Bugfixes
- Fixed erroneous bounds check in _avs_crypto_get_data_source_definition()
- Made removal of PKCS#11 objects more resilient to errors (relevant mostly for commercial Anjay users)
- Fixed CMake code for importing the libp11 library (relevant mostly for commercial Anjay users)

## Anjay 2.8.0 (November 23rd, 2020)

### BREAKING CHANGES

See below for breaking changes in avs_commons. Note that these are unlikely to affect users that use CMake for building the library, but may require updating configuration headers when using alternative build systems.

For more detailed information about breaking changes and how your code needs to be updated, see: https://docs.avsystem.com/hubfs/Anjay_Docs/Migrating/MigratingFromAnjay27.html

### Features

- Made use of avs_commons' new floating point formatting functions, making it possible to link against libc implementations that don't support printf("%g")
- (commercial version only) Support for Enrollment over Secure Transports (EST-coaps) with key and certificate storage on Hardware Security Modules via avs_commons' OpenSSL engine support
- (commercial version only) Support for certificate chain reconstruction based on trust store when performing (D)TLS handshake - this is especially useful for EST-based security, as certificates provisioned via /est/crts can be used as client certificate chain during handshake

### Improvements

- Better CMake-level dependencies and error handling for compile-time configuration options
- Fixed various compile-time warnings
- Included avs_commons and avs_coap configuration in the TRACE-level configuration report log at initialization time
- Relaxed timeout for Deregister message in integration tests
- Integration test target logs path is now configurable in runtest.py
- Various improvements to documentation and examples:
  - Attribute storage module is now installed in most tutorials, making them more complete
  - https://docs.avsystem.com/hubfs/Anjay_Docs/AdvancedTopics/AT-NetworkErrorHandling.html now mentions retry behavior of the commercial version in LwM2M 1.1
  - API documentation generated by Doxygen now properly includes all commercial-only APIs when run in commercial codebase
  - Updated installation instructions for CentOS that referred to non-existent URLs
  - Updated visual style to match corporate identity

### Bugfixes

- Data model persistence routines can no longer be successfully called during the bootstrap procedure, preventing from persisting potentially invalid data
- Fixed a regression in 2.7.0 that prevented ciphersuite setting from being properly respected for HTTP downloads
- Fixed a bug that could result in an assertion failure when showing demo client's help message
- Fixed a bug in "get_transport" command implementation in demo client
- Fixed erroneous setting of AVS_COMMONS_WITH_AVS_CRYPTO_ADVANCED_FEATURES in example configuration headers
- Removed duplicate file names that could prevent building with some embedded IDEs

Also updates avs_commons to version 4.5 which introduces the following changes:

### BREAKING CHANGES

- Moved URL handling routines to a separate avs_url component
- Implementation of avs_net_validate_ip_address() is no longer required when writing custom socket integration layer
- Hardware Security Module support has been reorganized to allow easier implementation of third-party engines

### Features

- Support for private key generation and removal on Hardware Security Modules via PKCS#11 engine
- Support for storing and removing certificates stored on Hardware Security Modules via PKCS#11 engine
- Support for certificate chain reconstruction based on trust store when performing (D)TLS handshake
- New AVS_DOUBLE_AS_STRING() API and AVS_COMMONS_WITHOUT_FLOAT_FORMAT_SPECIFIERS configuration options, making it possible to stringify floating point numbers on libc implementations that don't support printf("%g")

### Improvements

- Simplified URL hostname validation - it is now somewhat more lenient, but no longer depends on avs_net_validate_ip_address()
- Removed internal usage of avs_net_validate_ip_address() and reimplemented it as an inline function that wraps avs_net_addrinfo_resolve_ex()
- Better CMake-level dependencies and compile-time error handling for compile-time configuration options
- PEM-formatted security objects can now be loaded from buffer in the Mbed TLS backend

### Bugfixes

- Fixed conditional compilation clauses for avs_crypto global initialization
- Additional NULL checks when loading security information
- Removed duplicate file names that could prevent building with some embedded IDEs

## Anjay 2.7.0 (October 15th, 2020)

### BREAKING CHANGES

- Changed signature of anjay_security_config_from_dm() and expected lifetime of anjay_security_config_t; removed anjay_fw_update_load_security_from_dm() compatibility alias

Note: For a more detailed information about breaking changes and how your code needs to be updated, see: https://docs.avsystem.com/hubfs/Anjay_Docs/Migrating/MigratingFromAnjay26.html

### Features

- New anjay_download_set_next_block_offset() API that allows skipping parts of downloads
- (commercial version only) Support for configuring certificate security from external sources during the Factory Bootstrap phase, including initial support for PKCS11-based hardware security
- (commercial version only) Support for TCP in the NSH testing shell

### Bugfixes

- Fixed support for older versions of Mbed TLS
- More graceful error handling in anjay_security_object_add_instance()
- Made the option to disable bootstrap support work again
- Other bug fixes, partially found using fuzz testing

Also updates avs_commons to version 4.4 which introduces the following changes:

### BREAKING CHANGES

- Significant refactor of avs_crypto_security_info_union_t family of types (compatibility aliases are available)

### Features

- Initial support for PKCS11-based hardware security
- New APIs:
  - avs_crypto_certificate_chain_info_array_persistence()
  - avs_crypto_certificate_chain_info_from_engine()
  - avs_crypto_certificate_chain_info_list_persistence()
  - avs_crypto_certificate_chain_info_persist()
  - avs_crypto_cert_revocation_list_info_array_persistence()
  - avs_crypto_cert_revocation_list_info_list_persistence()
  - avs_crypto_cert_revocation_list_info_persist()
  - avs_crypto_private_key_info_copy()
  - avs_crypto_private_key_info_from_engine()
  - avs_crypto_private_key_info_persistence()
  - avs_net_socket_dane_tlsa_array_copy()
  - avs_stream_copy()
  - avs_stream_offset()
- Added scripts simplifying unit test code coverage calculation

## Anjay 2.6.1 (August 31st, 2020)

### Features

- Added documentation for the LwM2M testing shell (NSH) - note that the shell itself is only available in the commercial version

### Improvements

- Refactored security key loading flow

### Bugfixes

- Fixed testing scripts to make them work on macOS and Raspberry Pi OS again
- Added __odr_asan to the list of permitted symbols so that "make check" succeeds when the library is built with AddressSanitizer enabled
- (applicable to commercial version only) Fixed a bug in anjay_server_object_set_lifetime() that could lead to sending the Update message twice afterwards

Also updates avs_commons to version 4.3.1 which introduces the following changes:

### Improvements

- Replaced the test PKCS#7 file in unit tests with a more modern one, that can be loaded properly with newest releases of Mbed TLS

### Bugfixes

- Made the library compile again with Mbed TLS configured without CRL support or without file system support
- Fixed some testing code to make it work on macOS and Raspberry Pi OS again
- Added __odr_asan to the list of permitted symbols so that "make check" succeeds when the library is built with AddressSanitizer enabled

## Anjay 2.6.0 (August 25th, 2020)

### Features

- Added compile-time option to disable plaintext and TLV format support
- Added compile-time option to disable usage of the Deregister message
- Added support for DANE TLSA entries for downloads
- Added support for Security and Server (and OSCORE in commercial version) persistence to the demo client
- (commercial version only) More complete support for Enrollment over Secure Transports (EST-coaps), including:
  - Support for /est/sren and /est/crts operations
  - Persistence of EST data
  - Support for application/pkcs7-mime;smime-type=certs-only content format
- (commercial version only) Implemented OSCORE object persistence
- (commercial version only) Support for Matching Type and Certificate Usage Resources in the LwM2M Security object
- (commercial version only) LwM2M Security object Resources that has previously been only supported through Bootstrap Write, are now also exposed through anjay_security_instance_t

### Improvements

- Anjay can now be used on platforms that do not support handling 64-bit integers through printf() and scanf()
- Stricter command line option parsing in the demo client
- Improved help message formatting in the demo client
- (commercial version only) Various improvements to TLV and CBOR handling in the nsh tool

### Bugfixes

- Fixed a bug that could lead to a blocking receive with infinite timeout when DTLS is in use and handshake messages had to be retransmitted
  - NOTE: This, strictly speaking, introduces a BREAKING CHANGE in semantics of `anjay_serve()` and `avs_coap_*_handle_incoming_packet()` - as they no longer wait for the first message to arrive, but handle it in a non-blocking manner. However, this should not matter in practice if recommended patterns of these functions' usage are followed, and in the worst case scenario it may cause poorly written event loop code to behave as a busy loop, but it should not prevent the code from working.
- Stricter parsing of TLV payloads
- Fixed calculation of block size when resuming CoAP downloads which did not use the ETag option
- Made tests related to X.509 certificate mode pass with the OpenSSL backend
- More graceful error handling in downloader when required callbacks are not passed
- Fixed various compilation warnings
- (commercial version only) Fixed a bug that could lead to crash if offline mode was toggled during same-socket CoAP download and another LwM2M exchange was also scheduled
- (commercial version only) Fixed CMake option dependencies for the EST feature

Also updates avs_commons to version 4.3 which introduces the following changes:

### Features

- Improved trust store handling, including:
  - Support for configuring usage of system-wide trust store
  - Support for trusted certificate arrays and lists in addition to single entries
  - Support for CRLs
- Support for DANE TLSA entries
- Support for loading certs-only PKCS#7 files
- New avs_crypto_client_cert_expiration_date() API
- Removed dtls_echo_server tool that has been unused since version 4.1

### Bugfixes

- Fixed a bug that prevented compiling avs_commons without TLS support
- Fixed missing error handling in avs_persistence_sized_buffer()
- Fixed a bug in safe_add_int64_t() that could cause a crash if the result of addition was INT64_MIN
- Fixed various compilation warnings

## Anjay 2.5.0 (July 14th, 2020)

### Features

- Updated AvsCommons to 4.2.1
- Added new API for etag allocation
- (commercial version only) Added initial support for Enrollment Over Secure Transport (EST)

### Bugfixes

- Fixed segfault in CoAP downloads caused by cancellation in the middle of the transfer
- Fixed building tests on CentOS
- Fixed compilation when WITH_ANJAY_LOGS=OFF is used
- Fixed handling of transactional LwM2M Write
- (commercial version only) Fixed download suspension for downloads over shared socket

## Anjay 2.4.4 (July 1st, 2020)

### Features

- Updated avs_commons to version 4.2.0
- (commercial version) Added API for run-time Lifetime management

### Bugfixes

- (commercial version) Fixed corner case handling of Last Bootstrapped Resource

## Anjay 2.4.3 (June 25th, 2020)

### Improvements

- Added workarounds for non-deterministic operation of time-sensitive integration tests

### Bugfixes

- Fixed a critical bug in error handling of notification sending
- Fixed some bugs in Docker and Travis integration
- (commercial version only) Fixed a bug in `anjay_transport_*()` functions that prevented them from working correctly with NIDD transport

## Anjay 2.4.2 (June 17th, 2020)

### Features

- (commercial version only) Implemented NIDD MTU management, allowing to configure maximum message size to be sent, and the maximum message to be received
- (commercial version only) Added binding mode deduction from URI scheme to demo client

### Improvements

- Added Dockerfile to simplify compiling & launching Anjay demo client on various systems
- Improved error reporting when executing Registration Update Trigger

### Bugfixes

- Fixed incorrect condition in time_object_notify in tutorials' code
- Fixed compilation issues of pymbedtls on newer GCC versions
- Fixed compilation of the demo client on Windows

## Anjay 2.4.1 (May 29th, 2020)

- NOTE: The endpoint name and server URI arguments to the demo client are now mandatory

### Improvements

- Fixed various compilation warnings in certain configurations
- Updated documentation, readme and examples to mention the new Try Anjay platform
- Added some missing information in "Porting guide for non-POSIX platforms" documentation article
- Additional script for testing Docker configurations used by Travis locally

### Bugfixes

- Updated avs_commons to version 4.1.3, with more fixes in CMake scripts for corner cases when searching for mbed TLSa, and fix for allowing compilation on platforms that define macros that conflict with avs_log verbosity levels (DEBUG, ERROR etc.)
- Removed the .clang-format file that relied on features specific to an unpublished custom fork of clang-format

## Anjay 2.4a (May 22nd, 2020)

Updated avs_commons to version 4.1.2, which fixes interoperability problem with CMake versions older than 3.11.

## Anjay 2.4 (May 21st, 2020)

### Features

- Added anjay_ongoing_registration_exists() API
- Added anjay_server_get_ssids() API for the default implementation of the Server object
- Made offline mode configurable independently per transport (UDP, TCP; in commercial version also SMS and NIDD) and respected by downloads (including firmware update)
- Network integration layer (in commercial version, also SMS and NIDD drivers) may now use avs_errno(AVS_ENODEV) as a special error condition that will NOT trigger connection reset
- (commercial version only) Added avs_send_deferrable() API
- (commercial version only) Support for reporting State and Result changes using LwM2M Send messages in the fw_update module
- (commercial version only) Ability to perform CoAP(S) downloads (including firmware update) over the same socket that is already used for LwM2M communication. In particular, this allows downloads over SMS and NIDD.

### Improvements

- fw_update module now allows reset of the state machine during download
- Ability to report successful firmware update without reboot through the fw_update module is now officially supported
- (commercial verison only) OSCORE implementation now properly supports kid_ctx negotiation as specified by RFC 8613 Appendix B.2
- (commercial version only) Improvements to NIDD handling, to make sure that different packet size limits may be used for incoming and outgoing messages (NOTE: For the commercial version, this includes BREAKING CHANGES)

### Bugfixes

- Made some payload processing errors (including text/plain base64 decoding errors) return 4.00 Bad Request properly instead of 5.00 Internal Server Error
- The default Disable timeout in the default implementation of the Server object is now 86400 as mandated by the spec instead of infinity
- (commercial version only) Fixed a bug in timeout handling that sometimes caused the bg96_nidd driver to report spurious errors

Also updates avs_commons to version 4.1.1, which includes the following changes:

### Bugfixes

- Fixed a bug in CMake scripts that caused link errors when using statically linked versions of mbed TLS
 ## Anjay 2.3a (May 15th, 2020)
 BREAKING CHANGES:
- Removed usages of the ssize_t type. APIs in both Anjay and avs_commons that had it in public signatures have been redesigned
- (commercial version only) Retry mechanisms described in LwM2M TS 1.1.1, section 6.2.1.2 are now used by default, which changes the default registration retry policy
- Updated avs_commons to version 4.1, with the following breaking changes:
  - Renamed public header files for better uniqueness
  - Redesigned socket creation and in-place decoration APIs, including the addition of a requirement to provide PRNG context
  - Renamed some public configuration macros, to unify with the updated compile-time configuration pattern
  - Removed the legacy avs_coap component (the version used by Anjay 1.x)
  - Removed the mbed TLS custom entropy initializer pattern in favor of the new PRNG framework

Note: For a more detailed information about breaking changes and how your code needs to be fixed, see https://docs.avsystem.com/hubfs/Anjay_Docs/Migrating/MigratingFromAnjay225.html

### Features

- Changed project structure, configuration headers and updated build system, so that building the library without using CMake is now officially supported
- Allowed public access to Anjay's scheduler using anjay_get_scheduler()
- Code generator now allows omitting some of the resources during generation
- (commercial version only) Added support for some of the retry mechanisms described in LwM2M TS 1.1.1, including the following resources:
  - Bootstrap on Registration Failure
  - Communication Retry Count
  - Communication Retry Timer
  - Communication Sequence Delay Timer
  - Communication Sequence Retry Count
- (commercial version only) SMS driver API is now public, allowing for custom driver implementation

### Improvements

- Major overhaul of documentation, including new tutorials for data model and firmware update implementation, as well as guides for migration from both Anjay 1.16 and 2.2
- Cryptographically secure PRNG is now used whenever possible for generation of CoAP tokens and initial message IDs
- Improvements to code generator:
  - Refactored the generated code so that programmatic instantiation of Object Instances is now easier
  - Code generated in C++ mode is now more object-oriented and idiomatic
- Thanks to all compile-time configuration now being accessible via a public header, the demo client can now be compiled even when some optional features are disabled
- Removed some unused code from the open source version

### Bugfixes

- Fixed a problem that could occur while reconnecting to a server, if the host's local address was switching between IPv4 and IPv6
- Fixed behavior of anjay_exit_offline() when called immediately after anjay_enter_offline()
- disable_legacy_server_initiated_bootstrap is now properly respected when reconnecting after a connectivity failure
- anjay_get_string() and anjay_execute_get_arg_value() now report buffer underruns more reliably
- Added missing HTTP download timeout logic
- Errors from the socket's send() method are now properly propagated through the CoAP layer
- Fixed fatal errors that could occur during some specific CoAP error conditions, including during attempts to silently ignore incoming packets
- Fixes to minor issues found by Coverity
- Fixed working on platforms where malloc/calloc returns NULL when 0 bytes is requested
- Fixed compatibility with some embedded compilers
- Fixed interoperability with servers that use Uri-Path: '' to represent empty query path, as it seems to be permitted by the CoAP RFC
- Fixed error codes used by the Portfolio object in the demo client
- Minor fixes in integration testing framework
- (commercial version only) Added missing support of LwM2M 1.1-specific resources of the Server object to its persistence functions
- (commercial version only) Fixed various bugs in the bootstrapper module
- (commercial version only) Additional verification of NIDD URLs
- (commercial version only) More robust error handling in demo client's NIDD driver

Also updates avs_commons to version 4.1, which includes the following changes, in addition to those mentioned above as "breaking changes"


### Features

- Building without CMake is now officially supported
- Added idiomatic C++ wrapper for AVS_LIST
- New API for cryptographically safe PRNGs in avs_crypto
- File-based streams and default log handler can now be disabled at compile time

### Bugfixes

- Fixed a bug in the default socket implementation that prevented compiling on platforms without the IP_TOS socket option support
- Fixed improper parsing of empty host in URLs
- Some previously missed log messages now properly respect WITH_AVS_MICRO_LOGS
- Fixed a bug in netbuf stream's error handling

## Anjay 2.2.5 (February 7th, 2020)

### Bugfixes

- Updated avs_commons to version 4.0.3, which includes:
  - Fix for scope of avs_net_mbedtls_entropy_init() declaration in deps.h
  - Fix that prevented net_impl.c from compiling when IP_TOS is not available

## Anjay 2.2.4 (January 30th, 2020)

### Bugfixes

- Fixed bugs that caused problems with compilation on macOS and Travis
- avs_commons 4.0.2 include a fix to TLS backend data loader unit tests

### Features

- Added support for "micro logs", removing most of log strings to save space, while retaining all the information useful for debugging
- avs_commons 4.0.2 include support for proper RFC 6125-compliant validation of certificates against hostnames in the OpenSSL backend


## Anjay 2.2.3 (January 17th, 2020)

### Bugfixes

- Fixed error in CoAP message ID assignment when a CoAP request was being sent from a response handler

### Features

- Added anjay_resource_observation_status() API to the open source version
- Added --server-public-key-file to the demo application

## Anjay 2.2.2 (December 20th, 2019)

### Bugfixes

- Fixed an assertion failure on Cancel Observe arriving while sending a confirmable notification

### Improvements

- Minor workarounds for various compiler warnings
- Fixed unnecessary building of CoAP library test targets

Also updates avs_commons to version 4.0.1, which includes the following changes:

### Bugfixes

- Prevented certificate-based ciphersuites from being sent in Client Hello when PSK is used over the OpenSSL backend

### Features

- Introduced "micro log" feature and AVS_DISPOSABLE_LOG() macro

## Anjay 2.2.1 (December 6th, 2019)

This release synchronizes the open-source version of Anjay with the commercial branch, that has been in development since September 2018. Versions 2.0.0 (June 14th, 2019) through 2.2.0 have only been released to commercial customers.

Note that the commercial version includes extensive support for LwM2M TS 1.1 features. These are not available in the open-source version and not described in this changelog.

### BREAKING CHANGES

- Redesigned data model APIs
  - Replaced instance_it and instance_present handlers with list_instances
  - Simplified the instance_create API
    - IIDs for Create are always assigned by Anjay - user code no longer needs to allocate IDs
    - Removed the SSID argument
  - Replaced supported_rids field, resource_present, resource_it and resource_operations handlers with list_resources
  - Redesigned handling of Multiple-Instance Resources:
    - Old APIs for resource arrays are no longer available
    - Read and write handlers now take additional Resource Instance ID argument
    - Removed resource_dim handler
    - Introduced new resource_reset and list_resource_instances handlers
- Renamed various types, in particular those related to LwM2M Attributes
- Disallowed 65535 for all levels of IDs, as mandated in LwM2M TS 1.1
- Changed custom objects in demo client to use Object IDs from the range of Bulk Objects Reserved by AVSystem
  - Additional minor changes to the Test object semantics
- It is now not possible to build both static and shared versions of Anjay as part of the same build
- Heavily refactored error handling; some public APIs may require use of avs_error_t instead of plain integer error codes
- Removed stubs of commercial-only APIs from the open source version

### Features

- Entirely rewritten CoAP implementation
- Register, Update, Request Bootstrap and confirmable Notify messages are now sent asynchronously and do not block other functionality
- Notifications in JSON format now include timestamps
- Added setting to prefer hierarchical Content-Format even when reading simple resources, to improve interoperability with certain server implementations
- Added support for DTLS Connection ID extension if using a development version of mbed TLS that supports it
- Added ability to configure (D)TLS ciphersuites
- Added support for epmin and epmax attributes, specified in LwM2M TS 1.1
- Moved most of the Access Control mechanism logic from the access_control module (i.e., object implementation) to Anjay core
- Changed `anjay_execute_get_*()` error codes to ANJAY_ERR constants so that they can be safely propagated by DM handler callbacks
- Added generating notifications when Access Control object changes
- New revision of persistent format of the Server object implementation, with redesigned handling of Binding resource
- Improvements to demo client:
  - Notifications in Device object now work properly in the demo client
  - Demo client now supports different binding modes for different servers
  - Support for more resources in the Cellular Connectivity object
  - Support for Event Log object
  - Support for BinaryAppDataContainer object
- Added script and build target for finding unused code

### Improvements

- Improvements to logging:
  - Made it easier to compile Anjay without any logs
  - Made some log messages more descriptive
  - Tweaked log levels for better manageability
- More robust downloader module, including improvements to HTTP ETag handling
- Allowed Accept option in all incoming requests, for better interoperability with certain server implementations
- Removed internal scheduler implementation, migrated to avs_sched from avs_commons
- Made use of stack-allocated avs_persistence contexts
- Refactored handling of server connections and data in Security and Server objects to be more in line with OMA guidelines
- Refactored CMake scripts to make use of CMake 3 features
- Extracted parts of dm_core.c to separate files
- Improvements to internal symbol naming scheme
- Simplified a lot of internal APIs, including I/O contexts and DM path handling
- Various cleanups and improvements of Python-based integration test code

### Bugfixes

- Added missing protocol version in responses to Bootstrap Discover on an object path
- Various minor bugfixes

Also updates avs_commons to version 4.0.0, which includes the following changes:

### Breaking changes

- Removed ignoring context feature from avs_persistence
- Refactored error handling, introducing the new avs_error_t concept
- Renamed avs_stream_abstract_t to avs_stream_t
- Renamed avs_net_abstract_socket_t to avs_net_socket_t

### Features

- avs_net
  - Added support for Server Name Identification (D)TLS extension when using OpenSSL, and ability to enable or disable it explicitly
  - Added support for DTLS Connection ID extension if using a development version of mbed TLS that supports it
  - Added possibility to use custom mbed TLS entropy pool configuration
  - Added ability to configure (D)TLS ciphersuites
  - Added propagation of (D)TLS handshake alert codes to user code
  - Implemented accept() call for UDP sockets
  - Added avs_url_parse_lenient function and separate validation functions
- avs_stream
  - Added avs_stream_membuf_take_ownership function
  - Added avs_stream_membuf_reserve function
- avs_utils
  - Added avs_unhexlify function
- avs_algorithm
  - Refactored base64 to support alternate alphabets and padding settings
- avs_unit
  - Added support for and_then callbacks in mock sockets

### Improvements

- Made logs render "..." at the end if truncated
- Improved compatibility with various platforms, including Zephyr
- Improved structure of CMake stage configuration, removed unused definitions
- Reformatted entire codebase

### Bugfixes

- Added extern "C" clauses missing in some files, added regression testing for that, fixed some other C++ incompatibilities
- Fixed some improperly propagated error cases in HTTP client
- Fixed problems with avs_net sockets not working for localhost if no non-loopback network interfaces are available
- Fixed some potential NULL dereferences, assertion errors and various other fixes

## Anjay 1.16 (September 12th, 2019)

### Features

- Added anjay_fw_update_set_result API for changing Firmware Update Result at runtime

### Improvements

- Make Travis tests a bit faster by no longer using --track-origins=yes Valgrind argument, and also using pre-built Docker images

### Bugfixes

- Disabled stdin buffering in demo application. Fixes occasional hangs in Python tests
- Updated usages of deprecated `avs_persistence_*` functions
- Added mbedx509 to pymbedtls dependencies
- Fixed issues found by Coverity scan

## Anjay 1.15.5 (April 24th, 2019)

### Bug fixes

- Updated avs_commons to 3.10.0, which includes a fix that drastically (one order of magnitude in some cases) changes the result of `avs_coap_exchange_lifetime()`. Previously the results were not in line with RFC7252 requirements.

### Improvements

- The client will no longer wait indefinitely for Bootstrap Finish, but rather for an interval of at most EXCHANGE_LIFETIME seconds since last Bootstrap Interface operation.

## Anjay 1.15.4 (April 19th, 2019)

### Bugfixes

- Fixed bug that caused Anjay fw_update module `perform_upgrade` handler to be called more than once in some cases

### Improvements

- Anjay CMakeLists.txt does not use `${PROJECT_NAME}` anymore, improving compatibility with projects that include it as sources

## Anjay 1.15.3a (April 5th, 2019)

### Improvements

- Documented retransmission parameters configuration in chapter "Retransmissions, timeouts & response caching"

## Anjay 1.15.3 (April 3rd, 2019)

### Bugfixes

- Fixed some issues found by Coverity scan
- Upgraded avs_commons to version 3.9.1, which includes:
  - Fix of usage of select() on platforms that do not support poll()
  - Added new `AVS_RESCHED_*` APIs

## Anjay 1.15.2 (March 25th, 2019)

### Improvements

- Use https:// URI instead of git:// for avs_commons submodule. This allows fetching the submodule without setting up SSH keys. Fixes [#23](https://github.com/AVSystem/Anjay/issues/23)

## Anjay 1.15.1 (February 19th, 2019)

### Improvements

- Anjay will never attempt to send Register/Update from anjay_delete any more. It used to happen when that message was scheduled to be sent at a time that happened to pass between last anjay_sched_run and anjay_delete calls.

## Anjay 1.15 (February 14th, 2019)

### BREAKING CHANGES

- Updated avs_commons library to 3.9, which extracts an avs_stream_net library to break a dependency cycle between components. Applications that do not use CMake need to manually add libavs_stream_net.a to the linker command line.

### Bugfixes

- PUT/POST requests with an Accept: CoAP option are no longer rejected as invalid.
- Fixed a bug in HTTPS downloader that caused the download to hang indefinitely if the internal buffer of TLS socket is larger than 4KB and downloaded data length module TLS socket buffer size is larger than 4KB.
- Aborting HTTP(S) downloads no longer waits for the whole transfer to complete.

## Anjay 1.14.2 (January 29th, 2019)

### Bugfixes

- Fixed NULL pointer dereference in log messages displayed when an unknown attribute with no value is passed to Write-Attributes

## Anjay 1.14.1 (January 22nd, 2019)

### Features

- Added command line flag to the demo client that disables use of stdin

### Improvements

- Removed some code duplicated with avs_commons
- Fixed some minor issues found by scan-build 7
- Simplified flow of code for Register, Update and Request Bootstrap operations
- Reformatted example code

### Bugfixes

- Fixed a bug that prevented attempt to retry DTLS handshake after failed Request Bootstrap operation in some scenarios when Server-Initiated Bootstrap is enabled
- Fixed misleading, erroneous log message for when receiving CoAP messages time out
- Fixed the documentation URL test randomly failing on some machines

## Anjay 1.14.0 (December 4th, 2018)

### Improvements

- Added anjay_configuration_t::stored_notification_limit configuration option for limiting the maximum number of notifications stored when the client is offline.

## Anjay 1.13.1 (October 8th, 2018)

### Improvements

- Fixed compilation warnings caused by unused variables / mismatching printf format specifiers

## Anjay 1.13.0 (October 4th, 2018)

### Breaking changes

- anjay_configuration_t::max_icmp_failures field has been removed.
- Changed the way connection errors are handled. Connections are now NOT automatically retried in most of the cases. Please refer to the documentation (Advanced tutorial -> Network error handling) for a summary of the new semantics.

### Improvements

- Extensive refactor of the server connection handling subsystem.
- Added timeout for the documentation URL check.
- Prevented integration tests from running concurrently on Travis.

### Bugfixes

- Fixed behaviour when the attributes are set so that pmax < pmin.
- Fixed a bug that caused Discover operation on the Security object to erroneously work instead of causing 4.01 Unauthorized error as mandated by the spec.
- Fixed compilation warnings on various compilers.
- Upgraded avs_commons to version 3.8.2, which includes:
  - Fixes for proper propagation of avs_stream_close() errors.
  - Fixes for external library dependency checking.
  - Fixes for various compilation warnings.
  - Improved logs from the IP address stringification code.

## Anjay 1.12.1 (September 21st, 2018)

Update avs_commons to 3.8.1

## Anjay 1.12.0 (September 21st, 2018)

### Breaking changes

- Updated AvsCommons to 3.8.0, which requires CMake 3.4.0 or higher. This means that Anjay requires CMake 3.4.0 or higher as well.
- Running tests requires grequests (https://github.com/kennethreitz/grequests) now

### Features

- Allowed configuration of UDP DTLS Handshake transmission parameters by anjay_configuration_t::udp_dtls_hs_tx_params field
- Allowed configuration of firmware download CoAP transmission parameters by anjay_fw_update_handlers_t::get_coap_tx_params handler implemented by the user
- Added sequence diagrams for library operations in documentation chapter "4.4. A few notes on general usage"

### Improvements

- Reformatted the entire codebase with clang-format
- Added more tests verifying demo client's behavior in situations with network connectivity issues
- Explained in the demo application why file descriptors other than 0, 1, 2, are being closed

### Bugfixes

- Fixed the cause of "could not stringify socket address" error

## Anjay 1.11.0 (September 4th, 2018)

### Breaking changes

- `Removed ANJAY_BINDING_*` constants. Whenever used, they should now be replaced with plain c-strings, as follows:
  * `ANJAY_BINDING_U` -> `"U"`,
  * `ANJAY_BINDING_S` -> `"S"`,
  * `ANJAY_BINDING_US` -> `"US"`,
  * `ANJAY_BINDING_UQ` -> `"UQ"`,
  * `ANJAY_BINDING_SQ` -> `"SQ"`,
  * `ANJAY_BINDING_UQS` -> `"UQS"`,
  * `ANJAY_BINDING_NONE` -> `""`

### Features

- Implemented anjay_attr_storage_purge(), to allow cleaning up Attribute Storage data without recreating a whole client instance
- Implemented anjay_access_control_purge(), anjay_access_control_is_modified(), to allow better control over persistence
- Updated avs_commons to version 3.7.1

### Bugfixes

- Fixed implementation of bytes resources in demo test object code
- Added missing header in attr_storage.h

### Improvements

- Added support for multiple object versions in lwm2m_object_registry.py script
- Added some previously missing optional packages to README.md, required to run integration tests
- Improved performance of integration tests
- Improved documentation of internal server-related APIs
- Improved unit tests API, specifically added macros that help building CoAP messages without the knowledge of exact packet encoding

## Anjay 1.10.4 (July 30th, 2018)

### Features

- Added a configuration option that allows disabling Server-Initiated Bootstrap

### Bugfixes

- Very short HTTP downloads now do not hang forever when the server does not close the TCP connection

### Improvements

- Refactored management of bootstrap backoff state
- Add tests for client behavior after receiving 4.03 Forbidden in response to Register request

## Anjay 1.10.3a (July 19th, 2018)

### Fixes

- Fixed Travis build

## Anjay 1.10.3 (July 19th, 2018)

### Fixes

- Fixed warning about uninitialized retval when compiling in SW4STM32

### Improvements

- Added validation of URLs in documentation
- Added multiple test cases

## Anjay 1.10.2 (July 10th, 2018)

### Features

- Updated AvsComons to version 3.6.2 which includes:
  * a more restrictive approach to symbols from POSIX or C standard library that should not be used in embedded environments
  * a fix of compilation on ARMCC
  * a fix of compile time warning on IAR

### Fixes

- Fixed client behavior when received a 4.03 Forbidden on LwM2M Register
- Fixed outdated reference to the LwM2M Specification in the documentation

### Improvements

- Added more tests verifying client behavior in different scenarios

## Anjay 1.10.1 (June 29th, 2018)

### Fixes

- Updated avs_commons to 3.6.1 - fixes compatibility issues in tests.

## Anjay 1.10.0 (June 28th, 2018)

### Features

- Updated avs_commons to 3.6.0, which includes:
  * an abstraction layer over allocator routines, making it possible for the user to provide custom allocation/deallocation functions to be used by AvsCommons,
  * removal of ``AVS_LIST_CONFIG_ALLOC/FREE`` (they are now replaced with calls to ``avs_calloc()`` and ``avs_free()`` respectively),
  * removal of use of all ``time()`` calls,
  * removal of use of variable length array language feature,
  * default socket implementation refactor to use a nonblocking socket API,
  * ``avs_compat_threading`` module, implementing necessary synchronization primitives used across AvsCommons such as mutexes,
  * ``avs_cleanup_global_state()`` method, allowing to (optionally) free any global state implicitly instantiated in AvsCommons,
  * various compatibility fixes for FreeBSD.

- Prevented ``anjay_schedule_reconnect()`` from sending Updates when they are not necessary,

- Introduced an API (``anjay_get_socket_entries()``) allowing to obtain different kinds of sockets used by Anjay.

### Improvements

- Removed all uses of ``malloc()/calloc()/realloc()/free()`` in favor of AvsCommons' memory layer abstraction,
- Removed all occurrences of ``time()``,
- Removed all uses of variable length arrays,
- Improved non-GNU compilers compatibility,
- Fixed multiple typos in documentation,
- Fixed LwM2M-level error reporting for some LwM2M requests with unexpected payloads/content-formats (sane error codes are now returned instead of Internal Server Error),
- Various compatibility fixes for FreeBSD.

### Fixes

- Made bind address family depend on resolved numeric address rather than domain name,
- Fixed project compilation when ``WITH_AVS_PERSISTENCE`` is disabled.

## Anjay 1.9.3 (May 29th, 2018)

### Improvements

- Updated avs_commons to 3.4.3
- AVS_ASSERT and AVS_UNREACHABLE macros are now used for assertions that contain string literals. This prevents some compilers from emitting warnings about constant expressions being used in asserts.

## Anjay 1.9.2 (May 28th, 2018)

### Features

- Updated avs_commons to 3.4.2 including various compatibility improvements
- Added preliminary Windows support

### Bugfixes

- Fixed many different casts between incompatible function types found by gcc 8.1
- Fixed compile errors caused by some (perfectly valid) CMake option configurations

### Improvements

- Improved documentation of anjay_fw_update_perform_upgrade_t
- Improved compatibility with compilers without typeof() support

## Anjay 1.9.1 (May 17th, 2018)

### Bugfixes

- Fixed searching for scan-build ("make analyze" target) on Ubuntu 18.04
- Prevented sending superfluous notifications before cleaning up the library

Also updates avs_commons to version 3.4.1, which includes the following changes:

### Bugfixes

- Fixed bug in avs_http that prevented digest authentication from working
- Fixed conditional compilation bugs in avs_net that made it impossible to disable certain features
- Fixed bugs in avs_net unit tests that prevented them from passing on systems without JDK installed and when ran as root

### Improvements

- Simplified TLS session persistence logic (removed dependency on mbed TLS session cache)
- Fixed compilation warnings on mbed TLS >= 2.7
- Worked around false positive warnings from scan-build 6.0

## Anjay 1.9.0 (May 11th, 2018)

### Features

* anjay_notify_instances_changed() are now automatically called when manipulating pre-implemented Security and Server objects via module API
* (commercial version only) Added support for persistence of server registration and notification state, designed for devices with aggressive power saving
* (commercial version only) Added minimal CoAP file server to the command-line test server application

### Improvements

* BREAKING API CHANGE: Security and Server object implementation modules no longer expose the anjay_dm_object_def_t pointer directly.
* anjay_schedule_reconnect() now also reconnects downloads started using anjay_download()
* Notifications with non-success message codes are now always sent as Confirmable messages to ensure consistency with server-side state
* Integration tests now can be easily launched under rr for easier debugging
* Added various informative log messages
* Moved persistence subsystem to avs_commons and migrated to it
* Fixed various compilation warnings and compatibility with different compilers
* Major internal codebase refactoring, including:
  * Saner scheduler function signatures
  * Changed registration expiration time to use realtime clock instead of the monotonic one, which improves compatibility with sleep mode scenarios
  * Better hermetization of Observe handling implementation
  * Simplification and better hermetization of server connection handling
  * Reorganization of Registration Interface implementation
* (commercial version only) More flexible management of commercial features during packaging

Also updates avs_commons to version 3.4.0, which includes the following changes:

### Features

* Moved persistence subsystem from Anjay and improved upon it:
  * Added support for persisting additional integer types
  * Added support for persisting containers with variable size elements
  * Added ability to check the type of persistence context

### Improvements

* BREAKING API CHANGE: Changed TLS session resumption API so that it is now serialized to and deserialized from user-provided buffer
* BREAKING API CHANGE: Simplified certificate and key configuration API
  * Note that this change dropped support for some libraries that implement "fake" OpenSSL API
* Refactored avs_log() so that compiler will always parse TRACE-level logs, even if code generation for them is disabled
* Fixed various compilation warnings and compatibility with different compilers
* Fixed warnings when compiling with mbed TLS 2.3 and newer

### Bugfixes

* Fixed critical bugs in CoAP option handling:
  * Potential integer overflow
  * Erroneous operation on big-endian machines
* Added various missing NULL checks

## Anjay 1.8.2 (March 14th, 2018)

### Improvements

- Added X.509 certificate support to pymbedtls Python module.
- Made `BINDING_MODE_AS_STR` `const`.
- Changed type of the buffer size argument of `anjay_execute_get_arg_value` to unsigned size_t.
- Added a note on using LwIP socket integration layer to "Porting guide for non-POSIX platforms".
- Added debug logs in instance validators for Security and Server LwM2M objects.
- Added proper notifications for "Last Execute Arguments" resource of the Test Object in demo client.
- Disabled Coverity scan on Travis. This avoids marking the build as failing despite all tests passing - Coverity service is "down for maintenance" since 2018-02-20, and there seems to be no information on when will it be up again.

### Bugfixes

- Fixed `anjay_schedule_reconnect` behavior when called after the client gives up on reaching a LwM2M server. Previously, only a single reconnection attempt was attempted in such case, regardless of the `max_icmp_failures` configuration option.
- Fixed compilation errors on compilers that do not support typeof.

## Anjay 1.8.1 (February 28th, 2018)

### Bugfixes

- Fixed infinite loop of Register retransmissions when LwM2M Server ignores Updates and Client attempts to re-register
- Fixed nested links in README.md

## Anjay 1.8.0 (February 21st, 2018)

### Features

- Added get_security_info() handler to fw_update module, enabling configuration of security information for PULL-mode downloads over encrypted channels
- Added anjay_fw_update_load_security_from_dm() which allows to match security information from the Security object based on URI

### Bugfixes

- fw_update module will no longer connect to any HTTPS or CoAPS URI without authentication

## Anjay 1.7.3 (February 16th, 2018)

### Features

- anjay_codegen is now able to generate C++ code

### Improvements

- Updated timeouts in integration tests which should improve test result stability
- Added log when security mode does not match server URI

## Anjay 1.7.2 (February 12th, 2018)

### Bugfixes

- Fix anjay_all_connections_failed(). It is no longer returning true if no LwM2M Servers are configured.

## Anjay 1.7.1 (February 12th, 2018)

### Bugfixes

- Skip retransmission loop in case of DTLS handshake timeout. DTLS packet retransmissions are handled within avs_net_socket_connect anyway, so there is no point in applying yet another exponential backoff loop.

## Anjay 1.7.0 (February 12th, 2018)

### Breaking changes

- Reverted anjay_server_unreachable_handler_t as it has been found that using the handler correctly is close to being impossible.

- Anjay no longer attempts to reach LwM2M Servers indefinitely. Maximum number of retries is now configured via anjay_configuration_t::max_icmp_failures, and by default is set to 7.

### Features

- Introduced anjay_all_connections_failed() method, allowing the user to check if Anjay already gave up on trying to reach LwM2M Servers.

### Improvements

- Downgrade log level in _anjay_dm_foreach_instance() to TRACE.

## Anjay 1.6.1 (January 29th, 2018)

### Features

- Added anjay_server_unreachable_handler_t, that may be implemented by the user to control behavior of Anjay when it failed to connect to the LwM2M Server
- Added new demo command line option "--server-unreachable-action" to be able to present the aforementioned handler in action
- Added new demo command "enable-server" to enable Server of specified SSID
- Added anjay_disable_server_with_timeout()

### Improvements

- Improved compatibility with CMake 2.8.12

### Bugfixes

- Fixed Update interval: when lifetime is larger than `2*MAX_TRANSMIT_WAIT`, Update is now sent at `lifetime-MAX_TRANSMIT_WAIT` instead of `lifetime/2`
- Fixed demo command line parsing functions
- Fixed Travis problems and configuration on CentOS

## Anjay 1.6.0 (January 8th, 2018)

### Breaking changes

- Replaced time_t with int32_t for period Attributes; fixes compatibility with platforms that have unsigned time_t

### Improvements

- Removed useless symlinks that caused problems on Windows
- Fixed usage of errno constants that are defined by avs_commons compatibility layer; fixes compatibility with platforms that don't declare sane errno constants
- Improved compatibility with CMake 2.8 and CentOS

### Other

- anjay_persistence_time() is now deprecated

## Anjay 1.5.2 (December 11th, 2017)

### Bugfixes

- Fixed flow of flushing unsent notifications
- Bug fixes in avs_commons, including:
  - Fixed undefined behavior in CoAP message cache
  - Fixed compatibility with compilers that don't support either stdatomic.h or GCC-style `__sync_*` builtins
  - Prevented CoAP back-off timer randomization from occasionally using negative numbers
  - Fixed minor error handling problems
  - Fixed link commands for TinyDTLS interoperability

### Improvements

- Added WITH_TEST CMake flag
- Improved compatibility with BSD operating systems
- Improvements in avs_commons, including:
  - Fixed interoperability with HTTP servers that unexpectedly close connection

## Anjay 1.5.1 (November 27th, 2017)

### Features

- Support HTTP download resumption

### Bugfixes

- Fix some race conditions in integration tests that revealed themselves on slow machines
- Fix anjay_download() retrying download forever even in case of terminal failures
- Fix Firmware Update resetting by a null-byte Write
- Stop scheduling useless LwM2M Updates to the Bootstrap Server

### Improvements

- Test Firmware Update "not enough storage" scenario over CoAP
- Test Firmware Update "connection lost during download" scenario over CoAP

## Anjay 1.5.0 (November 20th, 2017)

### Features

- Extracted Firmware Update logic to a separate module so that the end user have to implement device-specific firmware updating logic only
- Implemented API for firmware update resumption
- Implemented stub of the portfolio object (in demo client) required for the OMA TestFest 2017
- Added support for DTLS session resumption as well as register-after-reconnect semantics
- Added object versioning support
- Added support for LwM2M Server URIs with Uri-Path and Uri-Query

### Bugfixes

- Fixed travis builds on macOS
- Fixed a few misleading statements in the documentation
- Fixed anjay_codegen.py handling of Multiple Instance Resources
- Fixed Content-Format for responses on Bootstrap Discover request
- Fixed Write (replace) on Device object instance in demo client

### Improvements

- Added more tests covering OMA TestFest 2017 test cases
- Allowed configuring Security/Server IIDs from command line in demo
- Allowed Bootstrap Delete on "/"
- Added support for re-bootstrapping after failed registrations
- Added anjay_server/security_object_is_modified simiar to anjay_attr_storage_is_modified
- Updated porting guide
- Replaced Internal Server Error responses with more specific error codes in a few places

### Other

- Relaxed validator of Update location path, due to specification being unclear (see: https://github.com/OpenMobileAlliance/OMA_LwM2M_for_Developers/issues/230)

## Anjay 1.4.1 (October 16th, 2017)

### Features

- Added CMake option `WITH_STATIC_DEPS_LINKED` that forces direct linkage of the library dependencies into the final target library
- Migrated to a new time API implemented in avs_commons
- Removed dependency on wget completely and used built-in downloader instead

### Bugfixes

- Fixed symbol visibility checks

### Improvements

- Renamed a few files to improve compatibility with various IDEs that do not handle files with non-unique naming across the entire project
- Lowered severity of some log messages that were actually not that critical
- Published example output from anjay_codegen.py script in the documentation

## Anjay 1.4.0 (September 8th, 2017)

### Features

- New tools: lwm2m_object_registry.py and anjay_codegen.py, that allow automatic generation of object implementation stubs from LwM2M object definition XMLs
- anjay_download() now supports HTTP(S), using the client from avs_commons
- New APIs for querying Anjay's network traffic statistics
- New APIs in attr_storage for direct attribute manipulation:
  - anjay_attr_storage_set_object_attrs()
  - anjay_attr_storage_set_instance_attrs()
  - anjay_attr_storage_set_resource_attrs()
- CoAP implementation base has been refactored and moved to avs_commons, so that it can now be used standalone; Anjay code has been refactored accordingly

### Bugfixes

- Fixed a bug that prevented anjay_get_string() from working as documented when the buffer was too short
- Fixed conformance with RFC 7252 when sending error responses on observed resources (previously the Observe header was erroneously included)
- Fixed various minor bugs found through static code analysis and compilation on various platforms

### Improvements

- POSIX dependencies are now better isolated to ease porting onto non-POSIX platforms
- Added more documentation, including:
  - New tutorial page (BT4) with general notes on library usage
  - Porting guide for non-POSIX platforms
- Removed some superfluous log messages

## Anjay 1.3.3 (July 27th, 2017)

### Features

- Implemented anjay_download() API for asynchronous CoAP(S) downloads
- Added anjay_download example code
- Added support for CoAP firmware download in demo application

### Bugfixes

- Fixed Register/Update transport when changing Binding
- Fixed lt/gt/st semantics according to https://github.com/OpenMobileAlliance/OMA_LwM2M_for_Developers/issues/191
- Fixed handling of unrelated BLOCK2 requests during a block-wise Read
- Disallowed Write-Attributes requests if the server does not have Read access rights
- Fixed build instructions for OS X in README

### Improvements

- Added packet capture in Python tests
- Added compilation instructions for Android
- Made missing scan-build a fatal error if static analysis was enabled with a CMake flag
- Integrated Coverity scan with Travis build
- Allowed configuration of CoAP transmission parameters in anjay_new()

## Anjay 1.3.2 (July 13th, 2017)

### Features

- Added custom Attribute "con" that may be used to enforce sending Confirmable Notifications for observed entities.

- Added new chapter of the Tutorial about Executable Resources.

- Added documentation subsection about relation LwM2M Discover and Attribute Storage.

### Improvements

- Removed dependency to Boost.Python in tests, and migrated to pybind11 instead (included as a submodule).

- Implemented sending Update after Lifetime Resource has changed (https://github.com/OpenMobileAlliance/OMA_LwM2M_for_Developers/issues/185)

- Implemented proper Bootstrap Server Account purge logic (https://github.com/OpenMobileAlliance/OMA_LwM2M_for_Developers/issues/195)

- Improved handling of CoAP Ping messages - they no longer produce error messages in the logs.

- Documented `ANJAY_ERR_*` constants.

- Added more NULL-assertions in the example demo client.

- Enabled scan-build in make check by default.

- Bumped all copyright years.

### Bugfixes

- Fixed dead URLs in the documentation.

- Fixed segfault when Bootstrap Discover was performed on a non-existing Object.

- Fixed various minor issues found by the static analysis tools.

- Fixed various compilation issues when compiled on older Android platforms.

## Anjay 1.3.1 (June 22nd, 2017)

### Features

- Added `confirmable_notifications` field to `anjay_configuration_t`, enabling the client to only send LwM2M Notify as CoAP Confirmable messages.
- Added retransmission detection using message cache with fixed size, configurable at library initialization.
- Added Custom Object/Notifications tutorial with example client.
- Added documentation page explaining message cache purpose and usage.

### Improvements

- Added support for Write on Instance with superfluous TLV instance header. Anjay used to reject such requests as malformed.
- Implemented ETS test 204 (Read with Accept: JSON).
- Made attribute parsing stricter. Unknown or duplicate attributes now cause Bad Request responses
- Splitted `anjay.h` header into smaller ones. Note: `anjay.h` now includes all other headers, so no changes to user code are required.

### Bugfixes

- Fixed problem with duplicate request aborting block-wise Read responses.
- Prevented tests from failing if Sphinx is not installed.
- Fixed ConnectivityMonitoring.APN type to Multiple Resource. Fixes issue #10.
- Fixed semantics of `lt` and `gt` attributes to match draft-ietf-core-dynlink document.
- Fixed build issue when configuring build with -DWITH_BOOTSTRAP=OFF CMake option.
- Fixed compilation warnings in relase builds.

## Anjay 1.3.0 (May 26th, 2017)

### Features

* Added initial output-only support for JSON Content-Format
* Added support for SMS-related Resources in security module
* Refactored code to facilitate support for SMS Binding
  * Actual SMS Binding support now implemented in the commercial version

### Improvements

* BREAKING API CHANGE: Replaced rid_bound and resource_supported handler with statically declared list of supported resources
* Improved handling of DTLS backends in build system
* 5.03 Service Unavailable is now sent instead of Reset when an unexpected request arrives while waiting for a response to Register or Update
* Improvements in demo client:
  * Fixed Firmware Update object state machine
  * Added default Access Control entries

### Bugfixes

* Fixed sending errnoeus 2.31 Continue if the last block payload chunk trigerred an error
* Relaxed invariants for Client-Initiated Bootstrap as per https://github.com/OpenMobileAlliance/OMA_LwM2M_for_Developers/issues/164
* Prevented sending Object Instance list in Update messages if only changes are in the Security object
* Fixed various bugs in access_control module

### Other

* Fixed in-code version numbers

## Anjay 1.2.1 (April 10th, 2017)

### Features

* Added automatic Update after object (de)register

### Bugfix

* Fixed potential access violation in anjay_attr_storage_restore()

## Anjay 1.2.0 (April 3rd, 2017)

### Features

* Added new API: anjay_unregister_object()

### Improvements

* Added new constant: ANJAY_ERR_SERVICE_UNAVAILABLE
* Made documentation linter work better when the MD5 file is broken
* Refactored anjay_dm_object_def_t, introduced anjay_dm_handlers_t
* Refactored attr_storage so that object wrapping is no longer necessary
* Fixed Travis configuration and added macOS build
* Refactored access_control implementation, simplified API
* Removed the on_register object handler

## Anjay 1.1.1 (March 14th, 2017)

### Features

* Added API to specify configuration for CoAP sockets, including overriding path MTU
* Added support for new DTLS backend: tinydtls

### Improvements

* When CoAP logic is blocked on BLOCK processing, 5.03 is now sent as response to unrelated requests
* Anjay can now be compiled and run on macOS
* Updated compliance to the released 1.0 specification
* Added actual reconnection of sockets when using queue mode

### Bugfixes

* Fixes to various issues found using static analysis
* Fixed compliance issues with handling Bootstrap-Server Account Timeout
* Removed automatic instantiation of Access Control object instances, as per https://github.com/OpenMobileAlliance/OMA_LwM2M_for_Developers/issues/192
* Fixed handling of integration test dependencies in CMake files
* Workaroud for bug in mbed TLS, see https://github.com/Mbed-TLS/mbedtls/issues/843

## Anjay 1.1.0 (February 22nd, 2017)

### Features

* Demo client loads certificates from files
* Added Bootstrap Awareness tutorial
* Added Access Control tutorial
* Added DTLS tutorial
* Refactored Attribute handling to meet current LwM2M standard requirements
* Improved out of source build support
* Improved test coverage

### Bugfixes

* Fixed coverage script
* Fixed fuzz tests compilation & running on some configurations
* Fixed mbedTLS detection in integration tests
* Fixed a case where mismatched Resource ID was accepted in the TLV payload
* Fixed compilation of tests under gcc-4.6
* Fixed detection of the required python version

### Other

* Added missing license headers
* Lowered loglevel of some less important messages
* Refactored some of the macros and replaced them with real C code
* Replaced all "LWM2M" with "LwM2M"
* Other minor fixes

## Anjay 1.0.0 (February 8th, 2017)

Initial release.


================================================
FILE: CMakeLists.txt
================================================
# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>
# AVSystem Anjay LwM2M SDK
# All rights reserved.
#
# Licensed under AVSystem Anjay LwM2M Client SDK - Non-Commercial License.
# See the attached LICENSE file for details.

cmake_minimum_required(VERSION 3.16)

project(anjay C)
set(ANJAY_VERSION "23f4cd115" CACHE STRING "Anjay library version")
set(ANJAY_BINARY_VERSION 1.0.0)

set(ANJAY_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(ANJAY_BUILD_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/output")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${ANJAY_BUILD_OUTPUT_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${ANJAY_BUILD_OUTPUT_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${ANJAY_BUILD_OUTPUT_DIR}/lib")

set(CMAKE_USE_RELATIVE_PATHS TRUE)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

include(CheckFunctionExists)

if(WITH_DEMO OR WITH_INTEGRATION_TESTS)
    # ensure Python venv is active
    include(cmake/requirePython3venv.cmake)
endif()

# On Linux, one needs to link libdl to use dlsym(). On BSD, it is not necessary,
# and even harmful, since libdl does not exist.
set(CMAKE_REQUIRED_INCLUDES "dlfcn.h")
foreach(lib "" dl)
    message(STATUS "Looking for dlsym() in library: ${lib}")
    set(CMAKE_REQUIRED_LIBRARIES ${lib})

    # check_function_exists caches its result; make sure the check is
    # actually repeated for each lib
    unset(HAVE_DLSYM CACHE)
    check_function_exists(dlsym HAVE_DLSYM)
    set(CMAKE_REQUIRED_LIBRARIES)

    if(HAVE_DLSYM)
        set(DETECTED_DLSYM_LIBRARY "${lib}" CACHE STRING "" FORCE)
        break()
    endif()
endforeach()
set(CMAKE_REQUIRED_INCLUDES)
set(DLSYM_LIBRARY "${DETECTED_DLSYM_LIBRARY}" CACHE STRING "Name of the library containing dlsym() symbol")

include(CMakeDependentOption)

# compilation flags
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_EXTENSIONS OFF)

option(WITH_EXTRA_WARNINGS "Enable extra compilation warnings" OFF)
if(WITH_EXTRA_WARNINGS)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -Wall -Wextra -Winit-self -Wmissing-declarations -Wc++-compat -Wsign-conversion -Wconversion -Wcast-qual -Wvla -Wno-variadic-macros -Wno-long-long -Wshadow")
    if(CMAKE_C_COMPILER_ID MATCHES "GNU")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wjump-misses-init")
    endif()
endif()

include(${CMAKE_CURRENT_LIST_DIR}/deps/avs_commons/cmake/PosixFeatures.cmake)

option(WITH_LIBRARY_SHARED "Compile Anjay as shared library" "${UNIX}")
if(WITH_LIBRARY_SHARED)
    # It is not possible to create a shared library if -fPIC is not enabled for
    # either Anjay or any of its dependencies.
    set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()

################# TUNABLES #####################################################

set(MAX_PK_OR_IDENTITY_SIZE 2048 CACHE STRING
    "Maximum supported size (in bytes) of 'PK or Identity' Resource in Security object.")
set(MAX_SECRET_KEY_SIZE 256 CACHE STRING
    "Maximum supported size (in bytes) of 'Secret Key' Resource in Security object.")

# Following options refer to the payload of plaintext-encoded CoAP packets.
set(MAX_DOUBLE_STRING_SIZE 512 CACHE STRING
    "Maximum supported length (in characters) of a string that can be parsed as a double-precision float value, including trailing nullbyte.")

# CoAP guarantees that Uri-Path/Uri-Query/Location-Path/Location-Query option
# values are at most 255 characters long, so default values will work for all
# CoAP requests. Reducing these values is discouraged.
set(MAX_URI_SEGMENT_SIZE 256 CACHE STRING
    "Maximum supported length (in characters) of a single Uri-Path/Location-Path CoAP option value, including trailing nullbyte.")
set(MAX_URI_QUERY_SEGMENT_SIZE 256 CACHE STRING
    "Maximum supported length (in characters) of a single Uri-Query CoAP option value, including trailing nullbyte.")

set(DTLS_SESSION_BUFFER_SIZE 1024 CACHE STRING
    "Size of the buffer that caches DTLS session information for resumption support.")

set(MAX_OBSERVATION_SERVERS_REPORTED_NUMBER 0 CACHE STRING
    "Maximum number of servers observing a given Resource listed by anjay_resource_observation_status() function.")

set(ANJAY_DEFAULT_SEND_FORMAT AVS_COAP_FORMAT_NONE CACHE STRING
    "Default value of Content-Format used in Send messages. Value AVS_COAP_FORMAT_NONE(65535) means no default value.")

set(MAX_HOLDOFF_TIME 20 CACHE STRING
    "Upper limit for the Hold Off Time for the Bootstrap connection.")

################# FEATURES THAT REQUIRE LIBRARY CONFIGURATION ##################

option(WITH_AVS_PERSISTENCE "Enable support for persisting objects data" ON)

option(WITH_BOOTSTRAP "Enable LwM2M Bootstrap Interface support" ON)
option(WITHOUT_TLV "Disable support for TLV content format" OFF)
option(WITH_DOWNLOADER "Enable support for downloader API" ON)
cmake_dependent_option(WITH_HTTP_DOWNLOAD "Enable support for HTTP(S) downloads" OFF "WITH_DOWNLOADER" OFF)
option(WITH_LWM2M11 "Enable support for LwM2M 1.1" ON)
cmake_dependent_option(WITH_LWM2M12 "Enable support for LwM2M 1.2 features" ON "WITH_LWM2M11" OFF)
# NOTE: WITH_EST is moved below due to dependencies

set(THREAD_SAFETY_DEFAULT OFF)
if(WIN32 OR UNIX)
    set(THREAD_SAFETY_DEFAULT ON)
endif()

option(WITH_THREAD_SAFETY "Enable guarding of all accesses to anjay_t with a mutex" "${THREAD_SAFETY_DEFAULT}")

################# LIBRARIES ####################################################

# avs_commons required components.
set(AVS_COMMONS_COMPONENTS algorithm crypto list buffer net sched stream stream_net url utils compat_threading)
if(WITH_HTTP_DOWNLOAD)
    list(APPEND AVS_COMMONS_COMPONENTS http)
endif()
if(WITH_AVS_PERSISTENCE)
    list(APPEND AVS_COMMONS_COMPONENTS persistence)
endif()
if(WITH_MODULE_sim_bootstrap)
    list(APPEND AVS_COMMONS_COMPONENTS stream_md5)
endif()
if(NOT DEFINED WITH_AVS_RBTREE OR WITH_AVS_RBTREE)
    set(WITH_AVS_RBTREE ON CACHE INTERNAL "")
endif()

set(AVS_COMMONS_LIBRARIES)
foreach(_component ${AVS_COMMONS_COMPONENTS})
    string(TOUPPER ${_component} _component_uppercase)

    # Enable compilation of each component.
    set(WITH_AVS_${_component_uppercase} ON CACHE INTERNAL "")

    # And mark it as a weak dependency.
    list(APPEND AVS_COMMONS_LIBRARIES avs_${_component})
endforeach()

option(WITH_LOCAL_AVS_COMMONS "Use locally installed avs_commons libraries" OFF)

if(WITH_LOCAL_AVS_COMMONS)
    # WITH_TEST is also defined in Commons
    # it defaults to ON there, but if we have external avs_commons, let's better not depend on avs_unit by default
    cmake_dependent_option(WITH_TEST "Enable Anjay tests" OFF WITH_AVS_UNIT OFF)
    if(WITH_TEST)
        set(AVS_COMMONS_COMPONENTS ${AVS_COMMONS_COMPONENTS} unit)

        find_program(VALGRIND_EXECUTABLE valgrind)
        cmake_dependent_option(WITH_VALGRIND "Enable usage of valgrind during unit tests" OFF "VALGRIND_EXECUTABLE" OFF)
    endif()
    find_package(avs_commons COMPONENTS ${AVS_COMMONS_COMPONENTS} REQUIRED)

    function(read_avs_commons_compile_time_option OPTION_NAME)
        file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/avs_commons_check.c
             "#include <avsystem/commons/avs_commons_config.h>\nint main() {\n#ifndef ${OPTION_NAME}\nint error[-1];\n#endif\nreturn 0; }\n")
        get_target_property(INCLUDE_DIRS avs_utils INTERFACE_INCLUDE_DIRECTORIES)
        try_compile(OPTION_VALUE
                    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp
                    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/avs_commons_check.c
                    CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${INCLUDE_DIRS}")
        set(${OPTION_NAME} ${OPTION_VALUE} CACHE INTERNAL "")
    endfunction()

    read_avs_commons_compile_time_option(AVS_COMMONS_HAVE_VISIBILITY)
    read_avs_commons_compile_time_option(AVS_COMMONS_STREAM_WITH_FILE)
    set(WITH_AVS_STREAM_FILE "${AVS_COMMONS_STREAM_WITH_FILE}")
    read_avs_commons_compile_time_option(AVS_COMMONS_SCHED_THREAD_SAFE)
    set(WITH_SCHEDULER_THREAD_SAFE "${AVS_COMMONS_SCHED_THREAD_SAFE}")
    read_avs_commons_compile_time_option(AVS_COMMONS_NET_WITH_POSIX_AVS_SOCKET)
    set(WITH_POSIX_AVS_SOCKET "${AVS_COMMONS_NET_WITH_POSIX_AVS_SOCKET}")
else()
    set(_DTLS_BACKENDS "mbedtls" "openssl" "tinydtls" "custom")
    set(DTLS_BACKEND "mbedtls" CACHE STRING "DTLS backend to use; possible values: <empty> ${_DTLS_BACKENDS}")

    # Reset enabled backends first, to avoid issues with CMakeCache
    set(WITH_CUSTOM_TLS OFF CACHE INTERNAL "")
    set(WITH_MBEDTLS OFF CACHE INTERNAL "")
    set(WITH_OPENSSL OFF CACHE INTERNAL "")
    set(WITH_TINYDTLS OFF CACHE INTERNAL "")

    string(TOLOWER "${DTLS_BACKEND}" _DTLS_BACKEND_LOWERCASE)
    if(_DTLS_BACKEND_LOWERCASE STREQUAL "mbedtls")
        set(WITH_MBEDTLS ON CACHE INTERNAL "")
    elseif(_DTLS_BACKEND_LOWERCASE STREQUAL "openssl")
        set(OPENSSL_CUSTOM_CIPHERS_ENABLED ON CACHE INTERNAL "")
        set(WITH_OPENSSL ON CACHE INTERNAL "")
        set(WITH_OPENSSL_CUSTOM_CIPHERS "ECDHE-ECDSA-AES128-CCM8:PSK-AES128-CCM8" CACHE INTERNAL "")
    elseif(_DTLS_BACKEND_LOWERCASE STREQUAL "tinydtls")
        set(WITH_TINYDTLS ON CACHE INTERNAL "")
    elseif(_DTLS_BACKEND_LOWERCASE STREQUAL "custom")
        set(WITH_CUSTOM_TLS ON CACHE INTERNAL "")
    elseif(NOT _DTLS_BACKEND_LOWERCASE STREQUAL "")
        message(FATAL_ERROR "Unsupported DTLS backend: ${_DTLS_BACKEND_LOWERCASE}; possible values: ${_DTLS_BACKENDS}")
    endif()

    message(STATUS "DTLS backend: ${_DTLS_BACKEND_LOWERCASE}")

    if(WITH_MBEDTLS OR WITH_CUSTOM_TLS)
        set(SSL_ERROR_API_DEFAULT ON)
    else()
        set(SSL_ERROR_API_DEFAULT OFF)
    endif()
endif()

option(WITH_AVS_COAP_TCP "Enable CoAP over TCP support" "${WITH_LWM2M11}")
option(WITH_CONN_STATUS_API "Enable support for the experimental anjay_get_server_connection_status() API and related callback." ON)
option(WITH_SSL_ERROR_API "Enable support for the experimental server SSL error callback." "${SSL_ERROR_API_DEFAULT}")



set(ENABLE_ADVANCED_CRYPTO OFF)

option(WITH_AVS_LOG "Enable logging support" ON)

if(NOT WITH_LOCAL_AVS_COMMONS)
    set(WITH_SCHEDULER_THREAD_SAFE "${WITH_THREAD_SAFETY}" CACHE INTERNAL "")
    set(WITH_AVS_CRYPTO_ADVANCED_FEATURES ${ENABLE_ADVANCED_CRYPTO} CACHE INTERNAL "")

    add_subdirectory(deps/avs_commons)
endif()

option(WITH_LOCAL_AVS_COAP "Use locally installed avs_coap library" OFF)
if(WITH_LOCAL_AVS_COAP)
    find_package(avs_coap REQUIRED)

    function(read_avs_coap_compile_time_option OPTION_NAME)
        file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/avs_coap_check.c
             "#include <avsystem/coap/avs_coap_config.h>\nint main() {\n#ifndef ${OPTION_NAME}\nint error[-1];\n#endif\nreturn 0; }\n")
        get_target_property(INCLUDE_DIRS avs_coap INTERFACE_INCLUDE_DIRECTORIES)
        try_compile(OPTION_VALUE
                    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp
                    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/avs_coap_check.c
                    CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${INCLUDE_DIRS}")
        set(${OPTION_NAME} ${OPTION_VALUE} CACHE INTERNAL "")
    endfunction()

    read_avs_coap_compile_time_option(WITH_AVS_COAP_UDP)
    read_avs_coap_compile_time_option(WITH_AVS_COAP_TCP)
    read_avs_coap_compile_time_option(WITH_AVS_COAP_OBSERVE)
    read_avs_coap_compile_time_option(WITH_AVS_COAP_BLOCK)
    read_avs_coap_compile_time_option(WITH_AVS_COAP_STREAMING_API)
else()
    add_subdirectory(deps/avs_coap)
endif()

if(NOT WITH_AVS_COAP_STREAMING_API)
    message(FATAL_ERROR "avs_coap streaming API is required, but disabled")
endif()

if(WITH_AVS_LOG)
    list(APPEND AVS_COMMONS_LIBRARIES avs_log)
endif()

################# FEATURES #####################################################

option(WITH_ACCESS_CONTROL "Enable core support for Access Control mechanism" ON)
option(WITH_DISCOVER "Enable support for LwM2M Discover operation" ON)
cmake_dependent_option(WITH_OBSERVE "Enable support for Information Reporting interface (Observe)" ON "WITH_AVS_COAP_OBSERVE" OFF)
cmake_dependent_option(WITH_CON_ATTR "Enable support for the Confirmable Notification attribute" "${WITH_LWM2M12}" WITH_OBSERVE OFF)
option(WITH_LEGACY_CONTENT_FORMAT_SUPPORT
       "Enable support for pre-LwM2M 1.0 CoAP Content-Format values (1541-1543)" OFF)
option(WITH_LWM2M_JSON "Enable support for LwM2M 1.0 JSON (output only)" ON)
option(WITHOUT_PLAINTEXT "Disable support for Plain Text content format" OFF)
option(WITHOUT_DEREGISTER "Disable use of the Deregister message" OFF)
option(WITHOUT_IP_STICKINESS "Disable support for IP stickiness" OFF)
option(WITHOUT_COMPOSITE_OPERATIONS "Disable composite operations" OFF)
cmake_dependent_option(WITH_SENML_JSON "Enable support for SenML JSON content format" ON WITH_LWM2M11 OFF)
cmake_dependent_option(WITH_CBOR "Enable support for CBOR and SenML CBOR content formats" ON WITH_LWM2M11 OFF)
cmake_dependent_option(WITH_LWM2M_GATEWAY "Enable support /25 LwM2M Gateway Object" OFF "WITH_LWM2M11;NOT WITH_CORE_PERSISTENCE" OFF)
cmake_dependent_option(WITH_BOOTSTRAP_PACK "Enable LwM2M Bootstrap-Pack support" ON "WITH_LWM2M12;WITH_BOOTSTRAP;WITH_CBOR OR WITH_SENML_JSON" OFF)
cmake_dependent_option(WITH_SEND "Enable support for LwM2M 1.1 Send operation" ON "WITH_CBOR OR WITH_SENML_JSON" OFF)
cmake_dependent_option(WITH_OBSERVATION_ATTRIBUTES "Enable support for Observation Attributes" ON "WITH_OBSERVE;WITH_LWM2M12" OFF)
option(WITHOUT_QUEUE_MODE_AUTOCLOSE "Disable automatic closing of server connection sockets after MAX_TRANSMIT_WAIT of inactivity" OFF)

cmake_dependent_option(WITH_OBSERVATION_STATUS "Enable support for anjay_resource_observation_status() API" ON "WITH_OBSERVE" OFF)
cmake_dependent_option(WITH_COAP_DOWNLOAD "Enable support for CoAP(S) downloads" ON WITH_DOWNLOADER OFF)

cmake_dependent_option(WITH_ANJAY_LOGS "Enable logging support" ON WITH_AVS_LOG OFF)
cmake_dependent_option(WITH_ANJAY_TRACE_LOGS "Enable logging support" ON "WITH_ANJAY_LOGS;NOT EXTERNAL_LOG_LEVELS_HEADER" OFF)

cmake_dependent_option(AVS_LOG_WITH_TRACE "Enable TRACE level logging" OFF WITH_AVS_LOG OFF)
cmake_dependent_option(WITH_INTERNAL_LOGS "Enable logging from inside AVSystem Commons libraries" ON WITH_AVS_LOG OFF)
cmake_dependent_option(WITH_INTERNAL_TRACE "Enable TRACE-level logs inside AVSystem Commons libraries" ON AVS_LOG_WITH_TRACE OFF)

option(WITH_NET_STATS "Enable measuring amount of LwM2M traffic" ON)

option(WITH_COMMUNICATION_TIMESTAMP_API "Enable communication timestamps" ON)

option(WITH_EVENT_LOOP "Enable default implementation of the event loop" "${WITH_POSIX_AVS_SOCKET}")

if(DEFINED WITH_MODULE_attr_storage)
    message(FATAL_ERROR "WITH_MODULE_attr_storage has been removed since Anjay 3.0. Please use WITH_ATTR_STORAGE instead.")
endif()

cmake_dependent_option(WITH_ATTR_STORAGE "Enable automatic attribute storage" ON WITH_AVS_PERSISTENCE OFF)

option(WITH_SECURITY_STRUCTURED "Enable support for avs_crypto types in the data model" ON)

# ANJAY_MUTEX_LOCK() variant based on nested functions
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/nested_funcs.c"
     "int main() { int nested(void) { return 0; } return nested(); }")
try_compile(HAVE_NESTED_FUNCTIONS
            "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp"
            "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/CMakeTmp/nested_funcs.c")

set(WITH_NESTED_FUNCTION_MUTEX_LOCKS_DEFAULT OFF)
if(WITH_EXTRA_WARNINGS AND NOT CMAKE_BUILD_TYPE MATCHES "Rel")
    set(WITH_NESTED_FUNCTION_MUTEX_LOCKS_DEFAULT ON)
endif()

cmake_dependent_option(WITH_NESTED_FUNCTION_MUTEX_LOCKS
                       "Enable mutex locking variant based on nested functions (provides more compiler warnings)"
                       "${WITH_NESTED_FUNCTION_MUTEX_LOCKS_DEFAULT}" "WITH_THREAD_SAFETY;HAVE_NESTED_FUNCTIONS;AVS_COMMONS_HAVE_PRAGMA_DIAGNOSTIC" OFF)

# This option is not exposed in anjay_config.h,
# as it is basically useless outside of development of the Anjay library itself
if(WITH_NESTED_FUNCTION_MUTEX_LOCKS)
    add_definitions(-DANJAY_WITH_NESTED_FUNCTION_MUTEX_LOCKS)
endif()

################# MODULES ######################################################


cmake_dependent_option(WITH_MODULE_access_control "Access control object implementation module" ON WITH_ACCESS_CONTROL OFF)
option(WITH_MODULE_ipso_objects "Generic implementation of certain kinds of IPSO objects" ON)
option(WITH_MODULE_ipso_objects_v2 "Experimental generic implementation of certain kinds of IPSO objects" ON)
option(WITH_MODULE_security "Security object module" ON)
option(WITH_MODULE_server "Server object module" ON)
option(WITH_MODULE_fw_update "Firmware Update object module" ON)
cmake_dependent_option(WITHOUT_MODULE_fw_update_PUSH_MODE
                       "Disable support for PUSH mode Firmware Update"
                       OFF "WITH_MODULE_fw_update;WITH_DOWNLOADER" OFF)
cmake_dependent_option(WITH_MODULE_fw_update_v11_resources
                       "Enable support for optional resources in Firmware Update object that were added in LwM2M 1.1"
                       OFF "WITH_LWM2M11" OFF)
cmake_dependent_option(WITH_MODULE_factory_provisioning "Factory provisioning module" ON "WITH_BOOTSTRAP;WITH_CBOR" OFF)
option(WITH_MODULE_advanced_fw_update "Advanced Firmware Update object module" OFF)
option(WITH_MODULE_sw_mgmt "Software Management object module" OFF)

################# CODE #########################################################

add_library(anjay
            include_public/anjay/access_control.h
            include_public/anjay/advanced_fw_update.h
            include_public/anjay/anjay.h
            include_public/anjay/attr_storage.h
            include_public/anjay/core.h
            include_public/anjay/dm.h
            include_public/anjay/download.h
            include_public/anjay/factory_provisioning.h
            include_public/anjay/fw_update.h
            include_public/anjay/io.h
            include_public/anjay/ipso_objects.h
            include_public/anjay/ipso_objects_v2.h
            include_public/anjay/lwm2m_gateway.h
            include_public/anjay/lwm2m_send.h
            include_public/anjay/security.h
            include_public/anjay/server.h
            include_public/anjay/stats.h
            include_public/anjay/sw_mgmt.h
            src/anjay_config_log.h
            src/anjay_init.h
            src/anjay_modules/anjay_access_utils.h
            src/anjay_modules/anjay_bootstrap.h
            src/anjay_modules/anjay_dm_utils.h
            src/anjay_modules/anjay_io_utils.h
            src/anjay_modules/anjay_notify.h
            src/anjay_modules/anjay_raw_buffer.h
            src/anjay_modules/anjay_sched.h
            src/anjay_modules/anjay_servers.h
            src/anjay_modules/anjay_time_defs.h
            src/anjay_modules/anjay_utils_core.h
            src/anjay_modules/dm/anjay_execute.h
            src/anjay_modules/dm/anjay_modules.h
            src/core/anjay_access_utils.c
            src/core/anjay_access_utils_private.h
            src/core/anjay_bootstrap_core.c
            src/core/anjay_bootstrap_core.h
            src/core/anjay_core.c
            src/core/anjay_core.h
            src/core/anjay_dm_core.c
            src/core/anjay_dm_core.h
            src/core/anjay_downloader.h
            src/core/anjay_event_loop.c
            src/core/anjay_io_core.c
            src/core/anjay_io_core.h
            src/core/anjay_io_utils.c
            src/core/anjay_lwm2m_send.c
            src/core/anjay_lwm2m_send.h
            src/core/anjay_notify.c
            src/core/anjay_raw_buffer.c
            src/core/anjay_servers_inactive.h
            src/core/anjay_servers_private.h
            src/core/anjay_servers_reload.h
            src/core/anjay_servers_utils.c
            src/core/anjay_servers_utils.h
            src/core/anjay_stats.c
            src/core/anjay_stats.h
            src/core/anjay_utils_core.c
            src/core/anjay_utils_private.h
            src/core/attr_storage/anjay_attr_storage.h
            src/core/attr_storage/anjay_attr_storage_persistence.c
            src/core/attr_storage/anjay_attr_storage_private.h
            src/core/attr_storage/anjay_attr_storage.c
            src/core/coap/anjay_content_format.h
            src/core/coap/anjay_msg_details.h
            src/core/dm/anjay_discover.c
            src/core/dm/anjay_discover.h
            src/core/dm/anjay_dm_attributes.c
            src/core/dm/anjay_dm_attributes.h
            src/core/dm/anjay_dm_create.c
            src/core/dm/anjay_dm_create.h
            src/core/dm/anjay_dm_execute.c
            src/core/dm/anjay_dm_execute.h
            src/core/dm/anjay_dm_handlers.c
            src/core/dm/anjay_dm_read.c
            src/core/dm/anjay_dm_read.h
            src/core/dm/anjay_dm_write_attrs.c
            src/core/dm/anjay_dm_write_attrs.h
            src/core/dm/anjay_dm_write.c
            src/core/dm/anjay_dm_write.h
            src/core/dm/anjay_modules.c
            src/core/dm/anjay_query.c
            src/core/dm/anjay_query.h
            src/core/downloader/anjay_coap.c
            src/core/downloader/anjay_downloader.c
            src/core/downloader/anjay_http.c
            src/core/downloader/anjay_private.h
            src/core/io/anjay_base64_out.c
            src/core/io/anjay_base64_out.h
            src/core/io/anjay_batch_builder.c
            src/core/io/anjay_batch_builder.h
            src/core/io/anjay_cbor_in.c
            src/core/io/anjay_cbor_out.c
            src/core/io/anjay_common.c
            src/core/io/anjay_common.h
            src/core/io/anjay_corelnk.c
            src/core/io/anjay_corelnk.h
            src/core/io/anjay_dynamic.c
            src/core/io/anjay_input_buf.c
            src/core/io/anjay_json_encoder.c
            src/core/io/anjay_json_like_decoder.c
            src/core/io/anjay_json_like_decoder.h
            src/core/io/anjay_json_like_decoder_vtable.h
            src/core/io/anjay_lwm2m_cbor_in.c
            src/core/io/anjay_lwm2m_cbor_out.c
            src/core/io/anjay_opaque.c
            src/core/io/anjay_output_buf.c
            src/core/io/anjay_senml_in.c
            src/core/io/anjay_senml_like_encoder.c
            src/core/io/anjay_senml_like_encoder.h
            src/core/io/anjay_senml_like_encoder_vtable.h
            src/core/io/anjay_senml_like_out.c
            src/core/io/anjay_text.c
            src/core/io/anjay_tlv.h
            src/core/io/anjay_tlv_in.c
            src/core/io/anjay_tlv_out.c
            src/core/io/anjay_vtable.h
            src/core/io/cbor/anjay_cbor_encoder_ll.c
            src/core/io/cbor/anjay_cbor_encoder_ll.h
            src/core/io/cbor/anjay_cbor_types.h
            src/core/io/cbor/anjay_json_like_cbor_decoder.c
            src/core/io/cbor/anjay_json_like_cbor_decoder.h
            src/core/io/cbor/anjay_senml_cbor_encoder.c
            src/core/io/json/anjay_json_decoder.c
            src/core/io/json/anjay_json_decoder.h
            src/core/observe/anjay_observe_core.c
            src/core/observe/anjay_observe_core.h
            src/core/observe/anjay_observe_internal.h
            src/core/observe/anjay_observe_planning.c
            src/core/servers/anjay_activate.c
            src/core/servers/anjay_activate.h
            src/core/servers/anjay_connection_ip.c
            src/core/servers/anjay_connections.c
            src/core/servers/anjay_connections.h
            src/core/servers/anjay_connections_internal.h
            src/core/servers/anjay_register.c
            src/core/servers/anjay_register.h
            src/core/servers/anjay_reload.c
            src/core/servers/anjay_security_generic.c
            src/core/servers/anjay_security.h
            src/core/servers/anjay_server_connections.c
            src/core/servers/anjay_server_connections.h
            src/core/servers/anjay_servers_internal.c
            src/core/servers/anjay_servers_internal.h
            src/modules/access_control/anjay_access_control_handlers.c
            src/modules/access_control/anjay_access_control_persistence.c
            src/modules/access_control/anjay_mod_access_control.c
            src/modules/access_control/anjay_mod_access_control.h
            src/modules/advanced_fw_update/anjay_advanced_fw_update.c
            src/modules/factory_provisioning/anjay_provisioning.c
            src/modules/fw_update/anjay_fw_update.c
            src/modules/ipso/anjay_ipso_3d_sensor.c
            src/modules/ipso/anjay_ipso_basic_sensor.c
            src/modules/ipso/anjay_ipso_button.c
            src/modules/ipso_v2/anjay_ipso_v2_3d_sensor.c
            src/modules/ipso_v2/anjay_ipso_v2_basic_sensor.c
            src/modules/lwm2m_gateway/anjay_lwm2m_gateway.c
            src/modules/security/anjay_mod_security.c
            src/modules/security/anjay_mod_security.h
            src/modules/security/anjay_security_persistence.c
            src/modules/security/anjay_security_transaction.c
            src/modules/security/anjay_security_transaction.h
            src/modules/security/anjay_security_utils.c
            src/modules/security/anjay_security_utils.h
            src/modules/server/anjay_mod_server.c
            src/modules/server/anjay_mod_server.h
            src/modules/server/anjay_server_persistence.c
            src/modules/server/anjay_server_transaction.c
            src/modules/server/anjay_server_transaction.h
            src/modules/server/anjay_server_utils.c
            src/modules/server/anjay_server_utils.h
            src/modules/sw_mgmt/anjay_sw_mgmt.c
            )

target_include_directories(anjay PUBLIC
                           $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include_public>
                           $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include_public>
                           $<INSTALL_INTERFACE:include>)
target_include_directories(anjay PRIVATE
                           $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>)
target_link_libraries(anjay PUBLIC avs_coap ${AVS_COMMONS_LIBRARIES})
set_property(TARGET anjay APPEND PROPERTY COMPILE_DEFINITIONS "ANJAY_VERSION=\"${ANJAY_VERSION}\"")

################# LINK #########################################################

set(ANJAY_WITH_ACCESS_CONTROL "${WITH_ACCESS_CONTROL}")
set(ANJAY_WITH_ATTR_STORAGE "${WITH_ATTR_STORAGE}")
set(ANJAY_WITH_BOOTSTRAP "${WITH_BOOTSTRAP}")
set(ANJAY_WITH_BOOTSTRAP_PACK "${WITH_BOOTSTRAP_PACK}")
set(ANJAY_WITH_COAP_DOWNLOAD "${WITH_COAP_DOWNLOAD}")
set(ANJAY_WITH_CON_ATTR "${WITH_CON_ATTR}")
set(ANJAY_WITH_DISCOVER "${WITH_DISCOVER}")
set(ANJAY_WITH_DOWNLOADER "${WITH_DOWNLOADER}")
set(ANJAY_WITH_HTTP_DOWNLOAD "${WITH_HTTP_DOWNLOAD}")
set(ANJAY_WITH_LEGACY_CONTENT_FORMAT_SUPPORT "${WITH_LEGACY_CONTENT_FORMAT_SUPPORT}")
set(ANJAY_WITH_LOGS "${WITH_ANJAY_LOGS}")
set(ANJAY_WITH_LWM2M_JSON "${WITH_LWM2M_JSON}")
set(ANJAY_WITHOUT_TLV "${WITHOUT_TLV}")
set(ANJAY_WITHOUT_PLAINTEXT "${WITHOUT_PLAINTEXT}")
set(ANJAY_WITHOUT_DEREGISTER "${WITHOUT_DEREGISTER}")
set(ANJAY_WITHOUT_IP_STICKINESS "${WITHOUT_IP_STICKINESS}")
set(ANJAY_WITHOUT_COMPOSITE_OPERATIONS "${WITHOUT_COMPOSITE_OPERATIONS}")
set(ANJAY_WITH_MODULE_ACCESS_CONTROL "${WITH_MODULE_access_control}")
set(ANJAY_WITH_MODULE_IPSO_OBJECTS "${WITH_MODULE_ipso_objects}")
set(ANJAY_WITH_MODULE_IPSO_OBJECTS_V2 "${WITH_MODULE_ipso_objects_v2}")
set(ANJAY_WITH_MODULE_FW_UPDATE "${WITH_MODULE_fw_update}")
set(ANJAY_WITH_MODULE_FW_UPDATE_V11_RESOURCES "${WITH_MODULE_fw_update_v11_resources}")
set(ANJAY_WITH_MODULE_ADVANCED_FW_UPDATE "${WITH_MODULE_advanced_fw_update}")
set(ANJAY_WITHOUT_MODULE_FW_UPDATE_PUSH_MODE "${WITHOUT_MODULE_fw_update_PUSH_MODE}")
set(ANJAY_WITH_MODULE_SECURITY "${WITH_MODULE_security}")
set(ANJAY_WITH_MODULE_SERVER "${WITH_MODULE_server}")
set(ANJAY_WITH_MODULE_SW_MGMT "${WITH_MODULE_sw_mgmt}")
set(ANJAY_WITH_NET_STATS "${WITH_NET_STATS}")
set(ANJAY_WITH_COMMUNICATION_TIMESTAMP_API "${WITH_COMMUNICATION_TIMESTAMP_API}")
set(ANJAY_WITH_EVENT_LOOP "${WITH_EVENT_LOOP}")
set(ANJAY_WITH_OBSERVATION_STATUS "${WITH_OBSERVATION_STATUS}")
set(ANJAY_WITH_OBSERVE "${WITH_OBSERVE}")
set(ANJAY_WITH_THREAD_SAFETY "${WITH_THREAD_SAFETY}")
set(ANJAY_WITH_TRACE_LOGS "${WITH_ANJAY_TRACE_LOGS}")
set(ANJAY_WITH_MODULE_FACTORY_PROVISIONING "${WITH_MODULE_factory_provisioning}")

set(ANJAY_WITH_CBOR "${WITH_CBOR}")
set(ANJAY_WITH_LWM2M11 "${WITH_LWM2M11}")
set(ANJAY_WITH_LWM2M12 "${WITH_LWM2M12}")
set(ANJAY_WITH_OBSERVATION_ATTRIBUTES "${WITH_OBSERVATION_ATTRIBUTES}")
set(ANJAY_WITH_SECURITY_STRUCTURED "${WITH_SECURITY_STRUCTURED}")
set(ANJAY_WITH_SEND "${WITH_SEND}")
set(ANJAY_WITH_SENML_JSON "${WITH_SENML_JSON}")
set(ANJAY_WITHOUT_QUEUE_MODE_AUTOCLOSE "${WITHOUT_QUEUE_MODE_AUTOCLOSE}")
set(ANJAY_WITH_CONN_STATUS_API "${WITH_CONN_STATUS_API}")
set(ANJAY_WITH_SSL_ERROR_API "${WITH_SSL_ERROR_API}")
set(ANJAY_WITH_LWM2M_GATEWAY "${WITH_LWM2M_GATEWAY}")

configure_file(include_public/anjay/anjay_config.h.in
               include_public/anjay/anjay_config.h)

if(BUILD_SHARED_LIBS)
    set_target_properties(anjay PROPERTIES
                          VERSION ${ANJAY_BINARY_VERSION})
    if(AVS_COMMONS_HAVE_VISIBILITY)
        get_property(LINK_FLAGS TARGET anjay PROPERTY LINK_FLAGS)
        set_property(TARGET anjay PROPERTY LINK_FLAGS "${LINK_FLAGS} -Wl,--exclude-libs,ALL")
    endif()
    if(APPLE)
        get_property(LINK_FLAGS TARGET anjay PROPERTY LINK_FLAGS)
        set_property(TARGET anjay PROPERTY LINK_FLAGS "${LINK_FLAGS} -Wl,-undefined,dynamic_lookup")
    endif()
endif()

################# DEMO #########################################################

set(DEMO_DEPENDENCIES
    WITH_AVS_LOG
    WITH_EVENT_LOOP
    # WITH_SCHEDULER_THREAD_SAFE
    WITH_MODULE_security
    WITH_MODULE_server)

cmake_dependent_option(WITH_DEMO "Compile DEMO applications" ON "${DEMO_DEPENDENCIES}" OFF)

if(WITH_DEMO)
    find_program(OPENSSL_EXECUTABLE openssl)
    if(OPENSSL_EXECUTABLE)
        if(NOT EXISTS "${ANJAY_BUILD_OUTPUT_DIR}/certs/client.crt.der")
            execute_process(COMMAND
                            env bash
                            "${CMAKE_CURRENT_SOURCE_DIR}/tools/generate-certs.sh"
                            "${ANJAY_BUILD_OUTPUT_DIR}/certs"
                            RESULT_VARIABLE RES)
            if(NOT ${RES} EQUAL 0)
                message(FATAL_ERROR "could not generate SSL certificates")
            endif()
        endif()
    elseif(WITH_AVS_UNIT)
        message(FATAL_ERROR "OpenSSL command line utility is required for unit tests")
    endif()

    add_subdirectory(demo)
endif()

################# TEST ########################################################

cmake_dependent_option(WITH_INTEGRATION_TESTS "Enable integration tests" OFF "WITH_TEST;WITH_DEMO" OFF)

if(WITH_TEST)
    enable_testing()

    add_custom_target(check)
    add_custom_target(anjay_unit_check)
    add_dependencies(check anjay_unit_check)

    # anjay_test
    add_executable(anjay_test EXCLUDE_FROM_ALL
                   $<TARGET_PROPERTY:anjay,SOURCES>
                   tests/core/coap/utils.c
                   tests/core/coap/utils.h
                   tests/core/bootstrap_mock.h
                   tests/core/io/bigdata.h
                   tests/core/observe/observe_mock.h
                   tests/core/socket_mock.c
                   tests/core/socket_mock.h
                   tests/utils/dm.c
                   tests/utils/dm.h
                   tests/utils/mock_clock.c
                   tests/utils/mock_clock.h
                   tests/utils/mock_dm.c
                   tests/utils/mock_dm.h
                   tests/utils/utils.h
                   tests/utils/coap/socket.h
                   tests/utils/coap/socket.c)
    if(WITH_SENML_JSON)
        target_sources(anjay_test PRIVATE tests/core/io/senml_json_encoder.c)
    endif()
    if(WITH_CBOR)
        target_sources(anjay_test PRIVATE tests/core/io/senml_cbor_encoder.c)
    endif()
    if(WITH_SEND)
        target_sources(anjay_test PRIVATE tests/core/lwm2m_send.c)
    endif()
    if(WITH_MODULE_factory_provisioning)
        target_sources(anjay_test PRIVATE tests/modules/factory_provisioning/provisioning.c)
    endif()
    target_include_directories(anjay_test PRIVATE
                               "${CMAKE_CURRENT_SOURCE_DIR}"
                               $<TARGET_PROPERTY:anjay,INCLUDE_DIRECTORIES>)
    target_link_libraries(anjay_test PRIVATE avs_unit avs_coap_for_tests ${AVS_COMMONS_LIBRARIES})

    if(NOT HAVE_DLSYM AND NOT DLSYM_LIBRARY)
        message(FATAL_ERROR "dlsym() is required for tests, but its definition "
                "could not be found; either use -DDLSYM_LIBRARY to select the "
                "library or disable tests")
    elseif(DLSYM_LIBRARY)
        target_link_libraries(anjay_test PRIVATE ${DLSYM_LIBRARY})
    endif()
    set_property(TARGET anjay_test APPEND PROPERTY COMPILE_DEFINITIONS
                 ANJAY_TEST
                 "ANJAY_BIN_DIR=\"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}\"")

    target_compile_options(anjay_test PRIVATE -Wno-overlength-strings -Wno-vla -Wno-c++-compat)
    if(CMAKE_C_COMPILER_ID MATCHES "GNU")
        target_compile_options(anjay_test PRIVATE -Wno-jump-misses-init)
        if(CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8)
            target_compile_options(anjay_test PRIVATE -Wno-missing-field-initializers -Wno-uninitialized -Wno-unused-value)
        else()
            # before GCC 4.8 there was no -Wpedantic, only -pedantic; and no way to disable it
            target_compile_options(anjay_test PRIVATE -Wno-pedantic)
        endif()
    endif()

    if(WITH_VALGRIND)
        set(VALGRIND ${VALGRIND_EXECUTABLE} --leak-check=full --track-origins=yes -q --error-exitcode=63 --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/valgrind_test.supp)
    endif()

    if(VALGRIND)
        set(VALGRIND_LOG ${VALGRIND} --log-file=${ANJAY_BUILD_OUTPUT_DIR}/VALGRIND.anjay_test.log)
    else()
        set(VALGRIND_LOG)
    endif()

    add_test(NAME anjay_test
             WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
             COMMAND ${VALGRIND_LOG} $<TARGET_FILE:anjay_test>)

    add_custom_target(anjay_check COMMAND ${CMAKE_CTEST_COMMAND} -R "^anjay_test$$" -V DEPENDS anjay_test)
    add_dependencies(anjay_unit_check anjay_check)

    if(TARGET avs_commons_check)
        add_dependencies(check avs_commons_check)
    endif()
    # TODO T2192: rename to avs_coap after migration
    if(TARGET avs_coap_check)
        add_dependencies(check avs_coap_check)
    endif()

    # Source validation
    get_target_property(ANJAY_SOURCES anjay SOURCES)
    set(ABSOLUTE_HEADERS)
    foreach(F ${ANJAY_SOURCES})
        add_test(NAME test_anjay_${F}_visibility
                 COMMAND deps/avs_commons/test_visibility.py ${F}
                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
        add_test(NAME test_anjay_${F}_headers
                 COMMAND deps/avs_commons/test_headers.py ${F} tools/conditional_headers_whitelist.json
                 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
        if(F MATCHES [.]h$)
            list(APPEND ABSOLUTE_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/${F}")
        endif()
    endforeach()

    add_custom_target(visibility_check COMMAND ${CMAKE_CTEST_COMMAND} -R "'^test_anjay_.*_visibility$$'")
    add_dependencies(anjay_unit_check visibility_check)

    add_custom_target(headers_check COMMAND ${CMAKE_CTEST_COMMAND} -R "'^test_anjay_.*_headers$$'")
    add_dependencies(anjay_unit_check headers_check)

    add_test(NAME test_function_duplicates COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/test_duplicates.py ${ABSOLUTE_HEADERS})
    add_test(NAME test_markdown_toc COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/markdown-toc.py --check "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
    add_test(NAME test_config_log COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/anjay_config_log_tool.py validate)

    add_custom_target(function_duplicates_check COMMAND ${CMAKE_CTEST_COMMAND} -V -R "'^test_function_duplicates$$'")

    add_custom_target(toc_check COMMAND ${CMAKE_CTEST_COMMAND} -V -R "'^test_markdown_toc$$'")

    add_custom_target(config_log_check COMMAND ${CMAKE_CTEST_COMMAND} -V -R "'^test_config_log$$'")

    add_dependencies(anjay_unit_check
                     function_duplicates_check
                     toc_check
                     config_log_check)


    # Symbol validation
    add_custom_target(symbols_check COMMAND ${CMAKE_CTEST_COMMAND} -R "'^test_.*_symbols$$'" --output-on-failure)

    if(BUILD_SHARED_LIBS)
        add_test(NAME test_so_symbols COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/test_symbols.sh $<TARGET_FILE:anjay> anjay_ ANJAY_ "__odr_asan[.]")
    else()
        add_test(NAME test_a_symbols COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/test_symbols.sh $<TARGET_FILE:anjay> anjay_ ANJAY_ _anjay_ _ANJAY_ "__odr_asan[.]")
    endif()
    add_dependencies(symbols_check anjay)
    add_dependencies(anjay_unit_check symbols_check)

    add_custom_target(anjay_extern_c_check COMMAND
                      "${CMAKE_CURRENT_SOURCE_DIR}/deps/avs_commons/tools/check_extern_c.py" --path "${CMAKE_CURRENT_SOURCE_DIR}")
    add_dependencies(anjay_unit_check anjay_extern_c_check)

    add_custom_target(anjay_filename_check
                      COMMAND ! find src -name "'*.[ch]'" | sed -e "'s|^.*/||'" | grep -v "'^anjay_'"
                      COMMAND ! find src -name "'*.[ch]'" | sed -e "'s|^.*/||'" | sort | uniq -c | grep -v "'^ *1 '"
                      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
    add_dependencies(anjay_check anjay_filename_check)

    add_custom_target(symlink_check COMMAND
                      "${CMAKE_CURRENT_SOURCE_DIR}/tools/symlink-check.sh")
    add_dependencies(anjay_check symlink_check)

    # Unit tests
    include(ProcessorCount)
    ProcessorCount(ANJAY_DEFAULT_NPROC)

    set(NPROC "${ANJAY_DEFAULT_NPROC}" CACHE STRING "Number of threads for multi-threaded build/test operations")

    add_subdirectory(tests/codegen)

    if(WITH_INTEGRATION_TESTS)
        set(TEST_RERUNS 3 CACHE STRING "Maximal number of times we try to rerun each testsuite")
        option(TEST_KEEP_SUCCESS_LOGS "Store all logs from test cases, even if no error happened" ON)
        add_subdirectory(tests/integration)
    endif()
else(WITH_TEST)
    macro(add_anjay_test NAME)
    endmacro()
endif(WITH_TEST)

################# FUZZ TESTING #################################################

add_subdirectory(tests/fuzz)

if(WITH_DOCS)
    add_subdirectory(doc)
endif()

################# STATIC ANALYSIS ##############################################

cmake_dependent_option(WITH_STATIC_ANALYSIS "Perform static analysis of the codebase on `make check`" OFF WITH_TEST OFF)
if(WITH_STATIC_ANALYSIS)
    find_program(SCAN_BUILD_BINARY scan-build)
    if(NOT SCAN_BUILD_BINARY)
        # some systems only have scan-build-x.y, where x.y is the version of LLVM
        # let's try that
        find_program(CLANG_BINARY clang)
        if(CLANG_BINARY)
            avs_temp_name(_fname)
            file(WRITE ${_fname} "__clang_major__ __clang_minor__")
            execute_process(COMMAND "${CLANG_BINARY}" -E -P -x c ${_fname}
                            OUTPUT_VARIABLE CLANG_VERSION_OUTPUT
                            OUTPUT_STRIP_TRAILING_WHITESPACE)
            file(REMOVE ${_fname})
            string(REPLACE " " "." CLANG_VERSION_OUTPUT "${CLANG_VERSION_OUTPUT}")
            find_program(SCAN_BUILD_BINARY "scan-build-${CLANG_VERSION_OUTPUT}")
        endif()
    endif()
    if(NOT SCAN_BUILD_BINARY)
        message(FATAL_ERROR "scan-build not found; specify path with -DSCAN_BUILD_BINARY or disable static analysis with -DWITH_STATIC_ANALYSIS=OFF")
    else()
        add_custom_target(analyze
                          COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/analyze"
                                  --output-dir "${CMAKE_CURRENT_BINARY_DIR}/static-analysis"
                                  --scan-build "${SCAN_BUILD_BINARY}")
        add_dependencies(check analyze)
    endif()
endif()

cmake_dependent_option(WITH_FIND_UNUSED_CODE "Check for unused symbols on `make check`" ON "WITH_TEST;UNIX;NOT APPLE" OFF)
if(WITH_FIND_UNUSED_CODE)
    add_custom_target(find_unused_code
                      COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/find_unused_code.py"
                              # avs_commons global cleanup functions
                              --ignore-symbol "^_avs_.*_cleanup_global.*_state$$"
                              # hardware crypto PSK support
                              --ignore-symbol "^_avs_crypto_mbedtls_engine_load_psk_\\(identity\\|key\\)$$"
                              # gcc internals
                              --ignore-object ".*/crtbegin.o"
                              # external libraries
                              --ignore-file "^/usr/lib/.*$$")
    add_dependencies(check find_unused_code)
endif()

option(WITH_EXAMPLES "Compile and test examples" ON)
if(WITH_EXAMPLES)
    add_subdirectory(examples)
endif()

################# INSTALL ######################################################

# libraries
install(TARGETS anjay EXPORT anjay-targets DESTINATION lib)

install(FILES
        "${CMAKE_CURRENT_BINARY_DIR}/include_public/anjay/anjay_config.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/anjay.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/core.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/dm.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/download.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/io.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/stats.h"
        DESTINATION include/anjay)
if(WITH_ATTR_STORAGE)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/attr_storage.h"
            DESTINATION include/anjay)
endif()
if(WITH_SEND)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/lwm2m_send.h"
            DESTINATION include/anjay)
endif()
if(WITH_LWM2M_GATEWAY)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/lwm2m_gateway.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_access_control)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/access_control.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_ipso_objects)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/ipso_objects.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_ipso_objects_v2)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/ipso_objects_v2.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_fw_update)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/fw_update.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_advanced_fw_update)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/advanced_fw_update.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_security)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/security.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_server)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/server.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_factory_provisioning)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/factory_provisioning.h"
            DESTINATION include/anjay)
endif()
if(WITH_MODULE_sw_mgmt)
    install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include_public/anjay/sw_mgmt.h"
            DESTINATION include/anjay)
endif()

# install CMake package
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/anjay-config.cmake.in
               ${ANJAY_BUILD_OUTPUT_DIR}/cmake/anjay-config.cmake
               @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/anjay-version.cmake.in
               ${ANJAY_BUILD_OUTPUT_DIR}/cmake/anjay-version.cmake
               @ONLY)

install(EXPORT anjay-targets DESTINATION lib/anjay)
install(FILES
        ${ANJAY_BUILD_OUTPUT_DIR}/cmake/anjay-config.cmake
        ${ANJAY_BUILD_OUTPUT_DIR}/cmake/anjay-version.cmake
        DESTINATION lib/anjay)


================================================
FILE: CONTRIBUTING.rst
================================================
..
   Copyright 2017-2026 AVSystem <avsystem@avsystem.com>
   AVSystem Anjay LwM2M SDK
   All rights reserved.

   Licensed under AVSystem Anjay LwM2M Client SDK - Non-Commercial License.
   See the attached LICENSE file for details.

Contributing to Anjay
=====================

Thank you for considering contributing to Anjay!

Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved.

Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests.


Reporting issues
----------------

**If you find a security vulnerability, do NOT open an issue!** Please email `opensource@avsystem.com <mailto:opensource@avsystem.com>`_ instead. We will address the issue as soon as possible and will give you an estimate for when we have a fix and release available for an eventual public disclosure.

Use GitHub issue tracker for reporting other bugs. A great bug report should include:

- Affected library version.
- Platform information:

  - processor architecture,
  - operating system,
  - compiler version.
- Minimal code example or a list of steps required to reproduce the bug.
- In case of run-time errors, logs from ``strace``, ``valgrind`` and PCAP network traffic dumps are greatly appreciated.


Feature requests
----------------

If you think some feature is missing, or that something can be improved, do not hesitate to suggest how we can make it better! When doing that, use GitHub issue tracker to post a description of the feature and some explanation why you need it.


Code contributions
------------------

If you never submitted a pull request before, take a look at `this fantastic tutorial <https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github>`_.

#. Fork the project.
#. Work on your contribution - follow guidelines described below.
#. Push changes to your fork.
#. Make sure all ``make check`` tests still pass.
#. `Create a pull request <https://help.github.com/articles/creating-a-pull-request-from-a-fork/>`_.
#. Wait for someone from Anjay team to review your contribution and give feedback.


Code style
^^^^^^^^^^

All code should be fully C99-compliant and compile without warnings under ``gcc`` and ``clang``. Enable extra warnings by using ``cmake -DWITH_EXTRA_WARNINGS=ON`` or ``devconfig`` script. Compiling and testing the code on multiple architectures (e.g. 32/64-bit x86, ARM, MIPS) is not required, but welcome.


General guidelines
``````````````````
- Do not use GNU extensions.
- Use ``UPPER_CASE`` for constants and ``snake_case`` in all other cases.
- Prefer ``static`` functions. Use ``_anjay_`` prefix for private functions shared between translation units and ``anjay_`` prefix for types and public functions.
- Do not use global variables. Only constants are allowed in global scope.
- When using bitfields, make sure they are not saved to persistent storage nor sent over the network - their memory layout is implementation-defined, making them non-portable.
- Avoid recursion - when writing code for an embedded platform, it is important to determine a hard limit on the stack space used by a program.
- Include license information at the top of each file you add.
- Use visibility macros defined in ``anjay_init.h`` to prevent internal symbols from being exported when using a GCC-compatible compiler. See `Visibility macros`_ section for examples.


Visibility macros
`````````````````
- Public header files (``.h`` files inside ``include_public/`` directories): no visibility macros.
- Private header files (``.h`` files outside ``include_public/`` directories)::

    // ... includes

    VISIBILITY_PRIVATE_HEADER_BEGIN

    // ... code

    VISIBILITY_PRIVATE_HEADER_END


- Source files (``.c``)::

    #include <anjay_init.h>

    // ... includes

    VISIBILITY_SOURCE_BEGIN

    // ... code


Tests
^^^^^

Make use of the `coverage script <tools/coverage>`_ to generate a code coverage report. New code should be covered by tests.

Before submitting your code, run the whole test suite (``make check``) to ensure that it does not introduce regressions. Use ``valgrind`` and Address Sanitizer to check for memory corruption errors.

Running tests on Ubuntu 20.04 or later: ::

    # Install these for tests:
    sudo apt-get install python3-pip git libmbedtls-dev libssl-dev zlib1g-dev python3 libpython3-dev wget valgrind curl cmake build-essential tshark
    pip3 install -U -r requirements.txt
    # Configure and run check target
    ./devconfig && make check

Running tests on CentOS 7 or later: ::

    # Install these for tests:
    # (IUS is required for Python 3.5)
    sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
    sudo yum install -y valgrind valgrind-devel openssl openssl-devel python35u python35u-devel python35u-pip clang-analyzer
    # Some test scripts expect Python >=3.5 to be available via `python3` command
    # Use update-alternatives to create a /usr/bin/python3 symlink with priority 0
    # (lowest possible)
    sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 0
    sudo python3 -m pip install -r requirements.txt

    # Configure and run check target
    # NOTE: clang-3.4 static analyzer (default version for CentOS) gives false
    # positives. --without-analysis flag disables static analysis.
    ./devconfig --without-analysis -DPython_ADDITIONAL_VERSIONS=3.5 && make check

Running tests on macOS Sierra or later: ::

    # Install these for tests:
    brew install python3 openssl llvm
    pip3 install -r requirements.txt

    # Configure and run check target:
    # if the scan-build script is located somewhere else, then you need to
    # specify a different SCAN_BUILD_BINARY. Below, we are assumming scan-build
    # comes from an llvm package, installed via homebrew.
    ./devconfig -DSCAN_BUILD_BINARY=/usr/local/Cellar/llvm/*/bin/scan-build && make check


================================================
FILE: Dockerfile
================================================
# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>
# AVSystem Anjay LwM2M SDK
# All rights reserved.
#
# Licensed under AVSystem Anjay LwM2M Client SDK - Non-Commercial License.
# See the attached LICENSE file for details.


FROM ubuntu:24.04

WORKDIR /Anjay

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -yq git build-essential cmake libmbedtls-dev zlib1g-dev

COPY . .

RUN cmake .
RUN make -j

ENV HOME /Anjay



================================================
FILE: Doxyfile.in
================================================
# Doxyfile 1.9.8

# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#
# Note:
#
# Use doxygen to compare the used configuration file with the template
# configuration file:
# doxygen -x [configFile]
# Use doxygen to compare the used configuration file with the template
# configuration file without replacing the environment variables or CMake type
# replacement variables:
# doxygen -x_noenv [configFile]

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------

# This tag specifies the encoding used for all characters in the configuration
# file that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
# The default value is: UTF-8.

DOXYFILE_ENCODING      = UTF-8

# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.

PROJECT_NAME           = anjay

# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER         =

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.

PROJECT_BRIEF          =

# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
# in the documentation. The maximum height of the logo should not exceed 55
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.

PROJECT_LOGO           =

# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.

OUTPUT_DIRECTORY       = @DOXYGEN_OUTPUT_DIR@

# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format
# and will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes
# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
# control the number of sub-directories.
# The default value is: NO.

CREATE_SUBDIRS         = NO

# Controls the number of sub-directories that will be created when
# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
# level increment doubles the number of directories, resulting in 4096
# directories at level 8 which is the default and also the maximum value. The
# sub-directories are organized in 2 levels, the first level always has a fixed
# number of 16 directories.
# Minimum value: 0, maximum value: 8, default value: 8.
# This tag requires that the tag CREATE_SUBDIRS is set to YES.

CREATE_SUBDIRS_LEVEL   = 8

# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
# U+3044.
# The default value is: NO.

ALLOW_UNICODE_NAMES    = NO

# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
# English messages), Korean, Korean-en (Korean with English messages), Latvian,
# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
# Swedish, Turkish, Ukrainian and Vietnamese.
# The default value is: English.

OUTPUT_LANGUAGE        = English

# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.

BRIEF_MEMBER_DESC      = YES

# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
# The default value is: YES.

REPEAT_BRIEF           = YES

# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.

ABBREVIATE_BRIEF       = "The $name class" \
                         "The $name widget" \
                         "The $name file" \
                         is \
                         provides \
                         specifies \
                         contains \
                         represents \
                         a \
                         an \
                         the

# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
# description.
# The default value is: NO.

ALWAYS_DETAILED_SEC    = NO

# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
# The default value is: NO.

INLINE_INHERITED_MEMB  = NO

# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.

FULL_PATH_NAMES        = YES

# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
# part of the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the path to
# strip.
#
# Note that you can specify absolute paths here, but also relative paths, which
# will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES.

STRIP_FROM_PATH        = @DOXYGEN_INPUT_PATHS@

# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which
# header file to include in order to use a class. If left blank only the name of
# the header file containing the class definition is used. Otherwise one should
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.

STRIP_FROM_INC_PATH    =

# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
# support long names like on DOS, Mac, or CD-ROM.
# The default value is: NO.

SHORT_NAMES            = NO

# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.

JAVADOC_AUTOBRIEF      = NO

# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
# such as
# /***************
# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
# Javadoc-style will behave just like regular comments and it will not be
# interpreted by doxygen.
# The default value is: NO.

JAVADOC_BANNER         = NO

# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.

QT_AUTOBRIEF           = NO

# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
# a brief description. This used to be the default behavior. The new default is
# to treat a multi-line C++ comment block as a detailed description. Set this
# tag to YES if you prefer the old behavior instead.
#
# Note that setting this tag to YES also means that rational rose comments are
# not recognized any more.
# The default value is: NO.

MULTILINE_CPP_IS_BRIEF = NO

# By default Python docstrings are displayed as preformatted text and doxygen's
# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
# doxygen's special commands can be used and the contents of the docstring
# documentation blocks is shown as doxygen documentation.
# The default value is: YES.

PYTHON_DOCSTRING       = YES

# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.

INHERIT_DOCS           = YES

# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
# page for each member. If set to NO, the documentation of a member will be part
# of the file/class/namespace that contains it.
# The default value is: NO.

SEPARATE_MEMBER_PAGES  = NO

# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
# uses this value to replace tabs by spaces in code fragments.
# Minimum value: 1, maximum value: 16, default value: 4.

TAB_SIZE               = 8

# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:^^"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". Note that you cannot put \n's in the value part of an alias
# to insert newlines (in the resulting output). You can put ^^ in the value part
# of an alias to insert a newline as if a physical newline was in the original
# file. When you need a literal { or } or , in the value part of an alias you
# have to escape them by means of a backslash (\), this can lead to conflicts
# with the commands \{ and \} for these it is advised to use the version @{ and
# @} or use a double escape (\\{ and \\})

ALIASES += "experimental=\xrefitem experimentals \"Experimental\" \"Experimental List\"" 

# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
# members will be omitted, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_FOR_C  = YES

# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
# for that language. For instance, namespaces will be presented as packages,
# qualified scopes will look different, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_JAVA   = NO

# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources. Doxygen will then generate output that is tailored for Fortran.
# The default value is: NO.

OPTIMIZE_FOR_FORTRAN   = NO

# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for VHDL.
# The default value is: NO.

OPTIMIZE_OUTPUT_VHDL   = NO

# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
# sources only. Doxygen will then generate output that is more tailored for that
# language. For instance, namespaces will be presented as modules, types will be
# separated into more groups, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_SLICE  = NO

# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
# tries to guess whether the code is fixed or free formatted code, this is the
# default for Fortran type files). For instance to make doxygen treat .inc files
# as Fortran files (default is PHP), and .f files as C (default is Fortran),
# use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen. When specifying no_extension you should add
# * to the FILE_PATTERNS.
#
# Note see also the list of default file extension mappings.

EXTENSION_MAPPING      =

# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See https://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
# The default value is: YES.

MARKDOWN_SUPPORT       = YES

# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
# to that level are automatically included in the table of contents, even if
# they do not have an id attribute.
# Note: This feature currently applies only to Markdown headings.
# Minimum value: 0, maximum value: 99, default value: 5.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.

TOC_INCLUDE_HEADINGS   = 5

# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to
# generate identifiers for the Markdown headings. Note: Every identifier is
# unique.
# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a
# sequence number starting at 0 and GITHUB use the lower case version of title
# with any whitespace replaced by '-' and punctuation characters removed.
# The default value is: DOXYGEN.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.

MARKDOWN_ID_STYLE      = DOXYGEN

# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or
# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.

AUTOLINK_SUPPORT       = YES

# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.

BUILTIN_STL_SUPPORT    = NO

# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
# The default value is: NO.

CPP_CLI_SUPPORT        = NO

# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.

SIP_SUPPORT            = NO

# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.

IDL_PROPERTY_SUPPORT   = YES

# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.

DISTRIBUTE_GROUP_DOC   = NO

# If one adds a struct or class to a group and this option is enabled, then also
# any nested class or struct is added to the same group. By default this option
# is disabled and one has to add nested compounds explicitly via \ingroup.
# The default value is: NO.

GROUP_NESTED_COMPOUNDS = NO

# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.

SUBGROUPING            = YES

# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
# and RTF).
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.

INLINE_GROUPED_CLASSES = NO

# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.

INLINE_SIMPLE_STRUCTS  = NO

# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
# enum is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically be
# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
# The default value is: NO.

TYPEDEF_HIDES_STRUCT   = NO

# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.

LOOKUP_CACHE_SIZE      = 0

# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
# during processing. When set to 0 doxygen will based this on the number of
# cores available in the system. You can set it explicitly to a value larger
# than 0 to get more control over the balance between CPU load and processing
# speed. At this moment only the input processing can be done using multiple
# threads. Since this is still an experimental feature the default is set to 1,
# which effectively disables parallel processing. Please report any issues you
# encounter. Generating dot graphs in parallel is controlled by the
# DOT_NUM_THREADS setting.
# Minimum value: 0, maximum value: 32, default value: 1.

NUM_PROC_THREADS       = 1

# If the TIMESTAMP tag is set different from NO then each generated page will
# contain the date or date and time when the page was generated. Setting this to
# NO can help when comparing the output of multiple runs.
# Possible values are: YES, NO, DATETIME and DATE.
# The default value is: NO.

TIMESTAMP              = NO

#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------

# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.

EXTRACT_ALL            = YES

# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.

EXTRACT_PRIVATE        = NO

# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
# methods of a class will be included in the documentation.
# The default value is: NO.

EXTRACT_PRIV_VIRTUAL   = NO

# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.

EXTRACT_PACKAGE        = NO

# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.

EXTRACT_STATIC         = YES

# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.

EXTRACT_LOCAL_CLASSES  = YES

# This flag is only useful for Objective-C code. If set to YES, local methods,
# which are defined in the implementation section but not in the interface are
# included in the documentation. If set to NO, only methods in the interface are
# included.
# The default value is: NO.

EXTRACT_LOCAL_METHODS  = NO

# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.

EXTRACT_ANON_NSPACES   = NO

# If this flag is set to YES, the name of an unnamed parameter in a declaration
# will be determined by the corresponding definition. By default unnamed
# parameters remain unnamed in the output.
# The default value is: YES.

RESOLVE_UNNAMED_PARAMS = YES

# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.

HIDE_UNDOC_MEMBERS     = NO

# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option
# will also hide undocumented C++ concepts if enabled. This option has no effect
# if EXTRACT_ALL is enabled.
# The default value is: NO.

HIDE_UNDOC_CLASSES     = NO

# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# declarations. If set to NO, these declarations will be included in the
# documentation.
# The default value is: NO.

HIDE_FRIEND_COMPOUNDS  = NO

# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.

HIDE_IN_BODY_DOCS      = NO

# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.

INTERNAL_DOCS          = NO

# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
# able to match the capabilities of the underlying filesystem. In case the
# filesystem is case sensitive (i.e. it supports files in the same directory
# whose names only differ in casing), the option must be set to YES to properly
# deal with such files in case they appear in the input. For filesystems that
# are not case sensitive the option should be set to NO to properly deal with
# output files written for symbols that only differ in casing, such as for two
# classes, one named CLASS and the other named Class, and to also support
# references to files without having to specify the exact matching casing. On
# Windows (including Cygwin) and MacOS, users should typically set this option
# to NO, whereas on Linux or other Unix flavors it should typically be set to
# YES.
# Possible values are: SYSTEM, NO and YES.
# The default value is: SYSTEM.

CASE_SENSE_NAMES       = SYSTEM

# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.

HIDE_SCOPE_NAMES       = YES

# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
# YES the compound reference will be hidden.
# The default value is: NO.

HIDE_COMPOUND_REFERENCE= NO

# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
# will show which file needs to be included to use the class.
# The default value is: YES.

SHOW_HEADERFILE        = YES

# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.

SHOW_INCLUDE_FILES     = YES

# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.

SHOW_GROUPED_MEMB_INC  = NO

# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.

FORCE_LOCAL_INCLUDES   = NO

# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.

INLINE_INFO            = YES

# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.

SORT_MEMBER_DOCS       = YES

# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.

SORT_BRIEF_DOCS        = NO

# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.

SORT_MEMBERS_CTORS_1ST = NO

# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.

SORT_GROUP_NAMES       = NO

# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.

SORT_BY_SCOPE_NAME     = NO

# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.

STRICT_PROTO_MATCHING  = NO

# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.

GENERATE_TODOLIST      = YES

# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.

GENERATE_TESTLIST      = YES

# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.

GENERATE_BUGLIST       = YES

# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.

GENERATE_DEPRECATEDLIST= YES

# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
# ... \endcond blocks.

ENABLED_SECTIONS       =

# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.

MAX_INITIALIZER_LINES  = 30

# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.

SHOW_USED_FILES        = YES

# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.

SHOW_FILES             = YES

# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.

SHOW_NAMESPACES        = YES

# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.

FILE_VERSION_FILTER    =

# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file. See also section "Changing the
# layout of pages" for information.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.

LAYOUT_FILE            =

# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.

CITE_BIB_FILES         =

#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------

# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is:
Download .txt
gitextract_r4wlvbaj/

├── .dockerignore
├── .github/
│   └── workflows/
│       ├── anjay-tests.yml
│       └── coverity.yml
├── .gitignore
├── .gitmodules
├── CHANGELOG.md
├── CMakeLists.txt
├── CONTRIBUTING.rst
├── Dockerfile
├── Doxyfile.in
├── LICENSE
├── NOTICE
├── README.Windows.md
├── README.md
├── cmake/
│   ├── anjay-config.cmake.in
│   ├── anjay-version.cmake.in
│   ├── requirePython3venv.cmake
│   └── toolchain/
│       └── afl-gcc.cmake
├── demo/
│   ├── CMakeLists.txt
│   ├── advanced_firmware_update.c
│   ├── advanced_firmware_update.h
│   ├── advanced_firmware_update_addimg.c
│   ├── advanced_firmware_update_app.c
│   ├── demo.c
│   ├── demo.h
│   ├── demo_args.c
│   ├── demo_args.h
│   ├── demo_cmds.c
│   ├── demo_cmds.h
│   ├── demo_time.c
│   ├── demo_utils.c
│   ├── demo_utils.h
│   ├── firmware_update.c
│   ├── firmware_update.h
│   ├── lwm2m_gateway.c
│   ├── lwm2m_gateway.h
│   ├── net_traffic_interceptor.c
│   ├── net_traffic_interceptor.h
│   ├── objects/
│   │   ├── apn_conn_profile.c
│   │   ├── binary_app_data_container.c
│   │   ├── cell_connectivity.c
│   │   ├── conn_monitoring.c
│   │   ├── conn_statistics.c
│   │   ├── device.c
│   │   ├── download_diagnostics.c
│   │   ├── event_log.c
│   │   ├── ext_dev_info.c
│   │   ├── gateway_end_devices/
│   │   │   ├── binary_app_data_container.c
│   │   │   ├── binary_app_data_container.h
│   │   │   ├── push_button_object.c
│   │   │   ├── push_button_object.h
│   │   │   ├── temperature_object.c
│   │   │   └── temperature_object.h
│   │   ├── geopoints.c
│   │   ├── ip_ping.c
│   │   ├── ipso_objects.c
│   │   ├── location.c
│   │   ├── portfolio.c
│   │   └── test.c
│   ├── objects.h
│   ├── software_mgmt.c
│   └── software_mgmt.h
├── deps/
│   └── avs_coap/
│       ├── .gitignore
│       ├── CMakeLists.txt
│       ├── Doxyfile.in
│       ├── LICENSE
│       ├── NOTICE
│       ├── README.md
│       ├── cmake/
│       │   ├── AddHeaderSelfSufficiencyTests.cmake
│       │   ├── avs_coap-config.cmake.in
│       │   └── fill-placeholders.cmake
│       ├── devconfig
│       ├── doc/
│       │   ├── CMakeLists.txt
│       │   └── sphinx/
│       │       ├── make.bat
│       │       └── source/
│       │           ├── ErrorHandling.rst
│       │           ├── Fuzzing.rst
│       │           ├── Overview.rst
│       │           ├── _static/
│       │           │   └── theme_overrides.css
│       │           ├── conf.py.in
│       │           └── index.rst
│       ├── examples/
│       │   ├── CMakeLists.txt
│       │   └── async-client/
│       │       ├── CMakeLists.txt
│       │       └── src/
│       │           └── main.c
│       ├── include_public/
│       │   └── avsystem/
│       │       └── coap/
│       │           ├── async.h
│       │           ├── async_client.h
│       │           ├── async_exchange.h
│       │           ├── async_server.h
│       │           ├── avs_coap_config.h.in
│       │           ├── coap.h
│       │           ├── code.h
│       │           ├── ctx.h
│       │           ├── observe.h
│       │           ├── option.h
│       │           ├── streaming.h
│       │           ├── tcp.h
│       │           ├── token.h
│       │           ├── udp.h
│       │           └── writer.h
│       ├── requirements.txt
│       ├── src/
│       │   ├── async/
│       │   │   ├── avs_coap_async_client.c
│       │   │   ├── avs_coap_async_client.h
│       │   │   ├── avs_coap_async_server.c
│       │   │   ├── avs_coap_async_server.h
│       │   │   ├── avs_coap_exchange.c
│       │   │   └── avs_coap_exchange.h
│       │   ├── avs_coap_code_utils.c
│       │   ├── avs_coap_code_utils.h
│       │   ├── avs_coap_common_utils.c
│       │   ├── avs_coap_common_utils.h
│       │   ├── avs_coap_ctx.c
│       │   ├── avs_coap_ctx.h
│       │   ├── avs_coap_ctx_vtable.h
│       │   ├── avs_coap_init.h
│       │   ├── avs_coap_observe.c
│       │   ├── avs_coap_observe.h
│       │   ├── avs_coap_parse_utils.h
│       │   ├── avs_coap_poison.h
│       │   ├── avs_coap_x_log_config.h
│       │   ├── options/
│       │   │   ├── avs_coap_iterator.c
│       │   │   ├── avs_coap_iterator.h
│       │   │   ├── avs_coap_option.c
│       │   │   ├── avs_coap_option.h
│       │   │   ├── avs_coap_options.c
│       │   │   └── avs_coap_options.h
│       │   ├── streaming/
│       │   │   ├── avs_coap_streaming_client.c
│       │   │   ├── avs_coap_streaming_client.h
│       │   │   ├── avs_coap_streaming_server.c
│       │   │   └── avs_coap_streaming_server.h
│       │   ├── tcp/
│       │   │   ├── avs_coap_tcp_ctx.c
│       │   │   ├── avs_coap_tcp_ctx.h
│       │   │   ├── avs_coap_tcp_header.c
│       │   │   ├── avs_coap_tcp_header.h
│       │   │   ├── avs_coap_tcp_msg.c
│       │   │   ├── avs_coap_tcp_msg.h
│       │   │   ├── avs_coap_tcp_pending_requests.c
│       │   │   ├── avs_coap_tcp_pending_requests.h
│       │   │   ├── avs_coap_tcp_signaling.c
│       │   │   ├── avs_coap_tcp_signaling.h
│       │   │   ├── avs_coap_tcp_utils.c
│       │   │   └── avs_coap_tcp_utils.h
│       │   └── udp/
│       │       ├── avs_coap_udp_ctx.c
│       │       ├── avs_coap_udp_ctx.h
│       │       ├── avs_coap_udp_header.h
│       │       ├── avs_coap_udp_msg.c
│       │       ├── avs_coap_udp_msg.h
│       │       ├── avs_coap_udp_msg_cache.c
│       │       ├── avs_coap_udp_msg_cache.h
│       │       ├── avs_coap_udp_tx_params.c
│       │       └── avs_coap_udp_tx_params.h
│       ├── tests/
│       │   ├── fuzz/
│       │   │   ├── CMakeLists.txt
│       │   │   ├── coap_async_api_tcp.c
│       │   │   ├── coap_async_api_udp.c
│       │   │   ├── coap_parse.c
│       │   │   └── input/
│       │   │       ├── coap_async_api_tcp/
│       │   │       │   └── recv_get_send_content
│       │   │       ├── coap_async_api_tcp.hex/
│       │   │       │   └── recv_get_send_content
│       │   │       ├── coap_async_api_udp/
│       │   │       │   ├── recv_get_send_content
│       │   │       │   ├── send_block_put_recv_changed
│       │   │       │   ├── send_get_recv_block_content
│       │   │       │   └── send_get_recv_content
│       │   │       ├── coap_async_api_udp.hex/
│       │   │       │   ├── recv_get_send_content
│       │   │       │   ├── send_block_put_recv_changed
│       │   │       │   ├── send_get_recv_block_content
│       │   │       │   └── send_get_recv_content
│       │   │       ├── coap_parse/
│       │   │       │   └── empty
│       │   │       └── hex-to-fuzz-input.sh
│       │   ├── mock_clock.c
│       │   ├── mock_clock.h
│       │   ├── options/
│       │   │   ├── option.c
│       │   │   └── options.c
│       │   ├── socket.c
│       │   ├── socket.h
│       │   ├── tcp/
│       │   │   ├── async_client.c
│       │   │   ├── async_server.c
│       │   │   ├── csm.c
│       │   │   ├── ctx.c
│       │   │   ├── env.h
│       │   │   ├── header.c
│       │   │   ├── helper_functions.h
│       │   │   ├── payload_escaper.c
│       │   │   ├── requesting.c
│       │   │   ├── responding.c
│       │   │   ├── setsock.c
│       │   │   └── utils.h
│       │   ├── udp/
│       │   │   ├── async_client.c
│       │   │   ├── async_client_with_big_data.c
│       │   │   ├── async_observe.c
│       │   │   ├── async_server.c
│       │   │   ├── big_data.h
│       │   │   ├── fuzzer_cases.c
│       │   │   ├── msg.c
│       │   │   ├── msg_cache.c
│       │   │   ├── setsock.c
│       │   │   ├── streaming_client.c
│       │   │   ├── streaming_observe.c
│       │   │   ├── streaming_server.c
│       │   │   ├── tx_params_mock.h
│       │   │   ├── udp_tx_params.c
│       │   │   └── utils.h
│       │   ├── utils.c
│       │   └── utils.h
│       └── tools/
│           ├── conditional_headers_whitelist.json
│           └── coverage
├── devconfig
├── doc/
│   ├── CMakeLists.txt
│   └── sphinx/
│       ├── extensions/
│       │   ├── builders/
│       │   │   ├── __init__.py
│       │   │   ├── dummy.py
│       │   │   ├── snippet_source_linter.py
│       │   │   └── snippet_source_list_references.py
│       │   ├── file_dirtiness_checker.py
│       │   ├── small_literal.py
│       │   └── snippet_source.py
│       ├── snippet_sources.md5
│       ├── source/
│       │   ├── APIReference.rst
│       │   ├── AdvancedTopics/
│       │   │   ├── AT-AccessControl.rst
│       │   │   ├── AT-AttributeStorage.rst
│       │   │   ├── AT-Bootstrap.rst
│       │   │   ├── AT-CertificateUsage.rst
│       │   │   ├── AT-Certificates.rst
│       │   │   ├── AT-CustomEventLoop.rst
│       │   │   ├── AT-CustomObjects/
│       │   │   │   ├── AT_CO1_SingleInstanceReadOnly.rst
│       │   │   │   ├── AT_CO2_SingleInstanceExecutableAndReadOnly.rst
│       │   │   │   ├── AT_CO3_MultiInstanceReadOnlyFixed.rst
│       │   │   │   ├── AT_CO4_FixedInstanceWritable.rst
│       │   │   │   ├── AT_CO5_MultiInstanceDynamic.rst
│       │   │   │   ├── AT_CO6_MultipleResourceInstances.rst
│       │   │   │   ├── AT_CO7_BootstrapAwareness.rst
│       │   │   │   ├── AT_CO_BootstrapAwareness.rst
│       │   │   │   ├── AT_CO_FixedInstanceWritable.rst
│       │   │   │   ├── AT_CO_MultiInstanceDynamic.rst
│       │   │   │   ├── AT_CO_MultiInstanceReadOnlyFixed.rst
│       │   │   │   ├── AT_CO_MultipleResourceInstances.rst
│       │   │   │   ├── AT_CO_SingleInstanceExecutableAndReadOnly.rst
│       │   │   │   ├── AT_CO_SingleInstanceReadOnly.rst
│       │   │   │   └── Anjay_codegen_note.rst
│       │   │   ├── AT-CustomObjects.rst
│       │   │   ├── AT-EventLoopNotes.rst
│       │   │   ├── AT-IpsoObjects.rst
│       │   │   ├── AT-NetworkErrorHandling.rst
│       │   │   ├── AT-OtherFeatures.rst
│       │   │   ├── AT-Persistence.rst
│       │   │   └── AT-RetransmissionsTimeoutsCaching.rst
│       │   ├── AdvancedTopics.rst
│       │   ├── BasicClient/
│       │   │   ├── BC-Initialization.rst
│       │   │   ├── BC-MandatoryObjects.rst
│       │   │   ├── BC-Notifications.rst
│       │   │   ├── BC-ObjectImplementation.rst
│       │   │   ├── BC-Security.rst
│       │   │   ├── BC-Send.rst
│       │   │   └── BC-ThreadSafety.rst
│       │   ├── BasicClient.rst
│       │   ├── CommercialFeatures/
│       │   │   ├── CF-CorePersistence.rst
│       │   │   ├── CF-CustomHardwareSupport.rst
│       │   │   ├── CF-EST.rst
│       │   │   ├── CF-FSDM.rst
│       │   │   ├── CF-HSM.rst
│       │   │   ├── CF-IoTSAFE.rst
│       │   │   ├── CF-NIDD.rst
│       │   │   ├── CF-OSCORE.rst
│       │   │   ├── CF-SMSBinding.rst
│       │   │   └── CF-SmartCardBootstrap.rst
│       │   ├── CommercialFeatures.rst
│       │   ├── Compiling_client_applications.rst
│       │   ├── FirmwareUpdateTutorial/
│       │   │   ├── FU-AdvancedFirmwareUpdate/
│       │   │   │   ├── FU-AFU-BasicImplementation.rst
│       │   │   │   ├── FU-AFU-Examples.rst
│       │   │   │   ├── FU-AFU-ResourceDefinitions.rst
│       │   │   │   ├── FU-AFU-StateDiagram.rst
│       │   │   │   └── _files/
│       │   │   │       └── 33629.xml
│       │   │   ├── FU-AdvancedFirmwareUpdate.rst
│       │   │   ├── FU-BasicImplementation.rst
│       │   │   ├── FU-DownloadResumption.rst
│       │   │   ├── FU-Introduction.rst
│       │   │   ├── FU-ModesAndProtocols.rst
│       │   │   ├── FU-PoorConnectivity.rst
│       │   │   ├── FU-SecureDownloads.rst
│       │   │   ├── FU1.rst
│       │   │   ├── FU2.rst
│       │   │   ├── FU3.rst
│       │   │   ├── FU4.rst
│       │   │   ├── FU5.rst
│       │   │   └── FU6.rst
│       │   ├── FirmwareUpdateTutorial.rst
│       │   ├── Introduction.rst
│       │   ├── KnownIssues.rst
│       │   ├── LwM2M.rst
│       │   ├── LwM2MGateway/
│       │   │   ├── LwM2MGatewayAPI.rst
│       │   │   ├── LwM2MGatewayIntro.rst
│       │   │   ├── LwM2MGatewayNotifications.rst
│       │   │   └── LwM2MGatewaySend.rst
│       │   ├── LwM2MGateway.rst
│       │   ├── Migrating/
│       │   │   ├── MigratingCustomEntropy.rst
│       │   │   ├── MigratingFromAnjay214.rst
│       │   │   ├── MigratingFromAnjay215.rst
│       │   │   ├── MigratingFromAnjay225.rst
│       │   │   ├── MigratingFromAnjay24.rst
│       │   │   ├── MigratingFromAnjay26.rst
│       │   │   ├── MigratingFromAnjay27.rst
│       │   │   ├── MigratingFromAnjay28.rst
│       │   │   ├── MigratingFromAnjay30.rst
│       │   │   ├── MigratingFromAnjay310.rst
│       │   │   ├── MigratingFromAnjay312.rst
│       │   │   ├── MigratingFromAnjay32.rst
│       │   │   ├── MigratingFromAnjay33.rst
│       │   │   ├── MigratingFromAnjay34.rst
│       │   │   └── MigratingFromAnjay37.rst
│       │   ├── Migrating.rst
│       │   ├── PortingGuideForNonPOSIXPlatforms/
│       │   │   ├── CustomTLS/
│       │   │   │   ├── CustomTLS-CertificatesAdvanced.rst
│       │   │   │   ├── CustomTLS-CertificatesBasic.rst
│       │   │   │   ├── CustomTLS-ConfigFeatures.rst
│       │   │   │   ├── CustomTLS-Minimal.rst
│       │   │   │   ├── CustomTLS-Resumption.rst
│       │   │   │   ├── CustomTLS-Stub.rst
│       │   │   │   └── CustomTLS-TCPSupport.rst
│       │   │   ├── CustomTLS.rst
│       │   │   ├── NetworkingAPI/
│       │   │   │   ├── NetworkingAPI-Bind.rst
│       │   │   │   ├── NetworkingAPI-EventLoopSupport.rst
│       │   │   │   ├── NetworkingAPI-IpStickiness.rst
│       │   │   │   ├── NetworkingAPI-Minimal.rst
│       │   │   │   ├── NetworkingAPI-OtherFeatures.rst
│       │   │   │   ├── NetworkingAPI-RemoteHostPort.rst
│       │   │   │   ├── NetworkingAPI-ShutdownRemoteHostname.rst
│       │   │   │   ├── NetworkingAPI-Stats.rst
│       │   │   │   ├── NetworkingAPI1.rst
│       │   │   │   ├── NetworkingAPI2.rst
│       │   │   │   ├── NetworkingAPI3.rst
│       │   │   │   ├── NetworkingAPI4.rst
│       │   │   │   ├── NetworkingAPI5.rst
│       │   │   │   ├── NetworkingAPI6.rst
│       │   │   │   └── NetworkingAPI7.rst
│       │   │   ├── NetworkingAPI.rst
│       │   │   ├── ThreadingAPI.rst
│       │   │   └── TimeAPI.rst
│       │   ├── PortingGuideForNonPOSIXPlatforms.rst
│       │   ├── Tools/
│       │   │   ├── CliLwM2MServer.rst
│       │   │   ├── FactoryProvisioning.rst
│       │   │   ├── PackagesGenerator.rst
│       │   │   ├── StandaloneObjects.rst
│       │   │   ├── StubGenerator.rst
│       │   │   └── VirtualEnvironments.rst
│       │   ├── Tools.rst
│       │   ├── _static/
│       │   │   └── theme_overrides.css
│       │   ├── _templates/
│       │   │   ├── layout.html
│       │   │   └── searchbox.html
│       │   ├── conf.py.in
│       │   └── index.rst
│       └── source_api/
│           ├── BackToDocumentation.rst
│           ├── _static/
│           │   └── theme_overrides.css
│           ├── _templates/
│           │   ├── layout.html
│           │   └── searchbox.html
│           ├── conf.py.in
│           └── index.rst
├── example_configs/
│   ├── README.md
│   ├── embedded_lwm2m10/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           ├── avs_commons_config.h
│   │           └── lwip-posix-compat.h
│   ├── embedded_lwm2m11/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           ├── avs_commons_config.h
│   │           └── lwip-posix-compat.h
│   ├── embedded_lwm2m12/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           ├── avs_commons_config.h
│   │           └── lwip-posix-compat.h
│   ├── linux_lwm2m10/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           └── avs_commons_config.h
│   ├── linux_lwm2m11/
│   │   ├── anjay/
│   │   │   └── anjay_config.h
│   │   └── avsystem/
│   │       ├── coap/
│   │       │   └── avs_coap_config.h
│   │       └── commons/
│   │           └── avs_commons_config.h
│   └── linux_lwm2m12/
│       ├── anjay/
│       │   └── anjay_config.h
│       └── avsystem/
│           ├── coap/
│           │   └── avs_coap_config.h
│           └── commons/
│               └── avs_commons_config.h
├── examples/
│   ├── CMakeLists.txt
│   ├── commercial-features/
│   │   ├── CF-CorePersistence/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-EST/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-EST-PKCS11/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-NIDD/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── nidd_demo_driver.c
│   │   │       └── nidd_demo_driver.h
│   │   ├── CF-OSCORE/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PKCS11/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PSA-PKI/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PSA-PSK/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PSA-bootstrap/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-PSA-management/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-SMS/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-SMS-PSK/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-SMS-UDP/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   ├── CF-SmartCardBootstrap/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       └── main.c
│   │   └── CMakeLists.txt
│   ├── custom-network/
│   │   ├── CMakeLists.txt
│   │   ├── bind/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   ├── ip-stickiness/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   ├── minimal/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   ├── remote-host-port/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   ├── shutdown-remote-hostname/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       └── net_impl.c
│   │   └── stats/
│   │       ├── CMakeLists.txt
│   │       └── src/
│   │           ├── main.c
│   │           └── net_impl.c
│   ├── custom-tls/
│   │   ├── CMakeLists.txt
│   │   ├── certificates-advanced/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── certificates-advanced-fake-dane/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── certificates-basic/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── config-features/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── minimal/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── resumption-buffer/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── resumption-simple/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   ├── stub/
│   │   │   ├── CMakeLists.txt
│   │   │   └── src/
│   │   │       ├── main.c
│   │   │       ├── net_impl.c
│   │   │       └── tls_impl.c
│   │   └── tcp-support/
│   │       ├── CMakeLists.txt
│   │       └── src/
│   │           ├── firmware_update.c
│   │           ├── firmware_update.h
│   │           ├── main.c
│   │           ├── net_impl.c
│   │           ├── time_object.c
│   │           ├── time_object.h
│   │           └── tls_impl.c
│   └── tutorial/
│       ├── AT-AccessControl/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── test_object.c
│       │       └── test_object.h
│       ├── AT-Bootstrap/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-Certificates/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-CustomEventLoop/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-CustomObjects/
│       │   ├── CMakeLists.txt
│       │   ├── bootstrap-awareness/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   ├── multi-instance-dynamic/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       ├── main.c
│       │   │       ├── test_object.c
│       │   │       └── test_object.h
│       │   ├── multi-instance-resources-dynamic/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       ├── main.c
│       │   │       ├── test_object.c
│       │   │       └── test_object.h
│       │   ├── read-only/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   ├── read-only-multiple-fixed/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   ├── read-only-with-executable/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   ├── writable-multiple-fixed/
│       │   │   ├── CMakeLists.txt
│       │   │   └── src/
│       │   │       └── main.c
│       │   └── writable-multiple-fixed-transactional/
│       │       ├── CMakeLists.txt
│       │       └── src/
│       │           └── main.c
│       ├── AT-Downloader/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-IpsoObjects/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── AT-Persistence/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── BC-Initialization/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── BC-MandatoryObjects/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── BC-Notifications/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── time_object.c
│       │       └── time_object.h
│       ├── BC-ObjectImplementation/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── time_object.c
│       │       └── time_object.h
│       ├── BC-Security/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       └── main.c
│       ├── BC-Send/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── time_object.c
│       │       └── time_object.h
│       ├── BC-ThreadSafety/
│       │   ├── CMakeLists.txt
│       │   └── src/
│       │       ├── main.c
│       │       ├── time_object.c
│       │       └── time_object.h
│       ├── CMakeLists.txt
│       ├── LwM2M-Gateway/
│       │   ├── CMakeLists.txt
│       │   ├── end_device.py
│       │   └── src/
│       │       ├── gateway_server.c
│       │       ├── gateway_server.h
│       │       ├── main.c
│       │       ├── temperature_object.c
│       │       └── temperature_object.h
│       └── firmware-update/
│           ├── CMakeLists.txt
│           ├── advanced-firmware-update/
│           │   ├── CMakeLists.txt
│           │   └── src/
│           │       ├── advanced_firmware_update.c
│           │       ├── advanced_firmware_update.h
│           │       ├── main.c
│           │       ├── time_object.c
│           │       └── time_object.h
│           ├── basic-implementation/
│           │   ├── CMakeLists.txt
│           │   └── src/
│           │       ├── firmware_update.c
│           │       ├── firmware_update.h
│           │       ├── main.c
│           │       ├── time_object.c
│           │       └── time_object.h
│           ├── download-resumption/
│           │   ├── CMakeLists.txt
│           │   └── src/
│           │       ├── firmware_update.c
│           │       ├── firmware_update.h
│           │       ├── main.c
│           │       ├── time_object.c
│           │       └── time_object.h
│           └── secure-downloads/
│               ├── CMakeLists.txt
│               └── src/
│                   ├── firmware_update.c
│                   ├── firmware_update.h
│                   ├── main.c
│                   ├── time_object.c
│                   └── time_object.h
├── include_public/
│   └── anjay/
│       ├── access_control.h
│       ├── advanced_fw_update.h
│       ├── anjay.h
│       ├── anjay_config.h.in
│       ├── attr_storage.h
│       ├── core.h
│       ├── dm.h
│       ├── download.h
│       ├── factory_provisioning.h
│       ├── fw_update.h
│       ├── io.h
│       ├── ipso_objects.h
│       ├── ipso_objects_v2.h
│       ├── lwm2m_gateway.h
│       ├── lwm2m_send.h
│       ├── security.h
│       ├── server.h
│       ├── stats.h
│       └── sw_mgmt.h
├── ltoconfig
├── requirements.txt
├── src/
│   ├── anjay_config_log.h
│   ├── anjay_init.h
│   ├── anjay_modules/
│   │   ├── anjay_access_utils.h
│   │   ├── anjay_attr_storage_utils.h
│   │   ├── anjay_bootstrap.h
│   │   ├── anjay_dm_utils.h
│   │   ├── anjay_io_utils.h
│   │   ├── anjay_lwm2m_gateway.h
│   │   ├── anjay_notify.h
│   │   ├── anjay_raw_buffer.h
│   │   ├── anjay_sched.h
│   │   ├── anjay_servers.h
│   │   ├── anjay_time_defs.h
│   │   ├── anjay_utils_core.h
│   │   └── dm/
│   │       ├── anjay_execute.h
│   │       └── anjay_modules.h
│   ├── core/
│   │   ├── anjay_access_utils.c
│   │   ├── anjay_access_utils_private.h
│   │   ├── anjay_bootstrap_core.c
│   │   ├── anjay_bootstrap_core.h
│   │   ├── anjay_core.c
│   │   ├── anjay_core.h
│   │   ├── anjay_dm_core.c
│   │   ├── anjay_dm_core.h
│   │   ├── anjay_downloader.h
│   │   ├── anjay_event_loop.c
│   │   ├── anjay_io_core.c
│   │   ├── anjay_io_core.h
│   │   ├── anjay_io_utils.c
│   │   ├── anjay_lwm2m_send.c
│   │   ├── anjay_lwm2m_send.h
│   │   ├── anjay_notify.c
│   │   ├── anjay_raw_buffer.c
│   │   ├── anjay_servers_inactive.h
│   │   ├── anjay_servers_private.h
│   │   ├── anjay_servers_reload.h
│   │   ├── anjay_servers_utils.c
│   │   ├── anjay_servers_utils.h
│   │   ├── anjay_stats.c
│   │   ├── anjay_stats.h
│   │   ├── anjay_utils_core.c
│   │   ├── anjay_utils_private.h
│   │   ├── attr_storage/
│   │   │   ├── anjay_attr_storage.c
│   │   │   ├── anjay_attr_storage.h
│   │   │   ├── anjay_attr_storage_persistence.c
│   │   │   └── anjay_attr_storage_private.h
│   │   ├── coap/
│   │   │   ├── anjay_content_format.h
│   │   │   └── anjay_msg_details.h
│   │   ├── dm/
│   │   │   ├── anjay_discover.c
│   │   │   ├── anjay_discover.h
│   │   │   ├── anjay_dm_attributes.c
│   │   │   ├── anjay_dm_attributes.h
│   │   │   ├── anjay_dm_create.c
│   │   │   ├── anjay_dm_create.h
│   │   │   ├── anjay_dm_execute.c
│   │   │   ├── anjay_dm_execute.h
│   │   │   ├── anjay_dm_handlers.c
│   │   │   ├── anjay_dm_read.c
│   │   │   ├── anjay_dm_read.h
│   │   │   ├── anjay_dm_write.c
│   │   │   ├── anjay_dm_write.h
│   │   │   ├── anjay_dm_write_attrs.c
│   │   │   ├── anjay_dm_write_attrs.h
│   │   │   ├── anjay_modules.c
│   │   │   ├── anjay_query.c
│   │   │   └── anjay_query.h
│   │   ├── downloader/
│   │   │   ├── anjay_coap.c
│   │   │   ├── anjay_downloader.c
│   │   │   ├── anjay_http.c
│   │   │   └── anjay_private.h
│   │   ├── io/
│   │   │   ├── anjay_base64_out.c
│   │   │   ├── anjay_base64_out.h
│   │   │   ├── anjay_batch_builder.c
│   │   │   ├── anjay_batch_builder.h
│   │   │   ├── anjay_cbor_in.c
│   │   │   ├── anjay_cbor_out.c
│   │   │   ├── anjay_common.c
│   │   │   ├── anjay_common.h
│   │   │   ├── anjay_corelnk.c
│   │   │   ├── anjay_corelnk.h
│   │   │   ├── anjay_dynamic.c
│   │   │   ├── anjay_input_buf.c
│   │   │   ├── anjay_json_encoder.c
│   │   │   ├── anjay_json_like_decoder.c
│   │   │   ├── anjay_json_like_decoder.h
│   │   │   ├── anjay_json_like_decoder_vtable.h
│   │   │   ├── anjay_lwm2m_cbor_in.c
│   │   │   ├── anjay_lwm2m_cbor_out.c
│   │   │   ├── anjay_opaque.c
│   │   │   ├── anjay_output_buf.c
│   │   │   ├── anjay_senml_in.c
│   │   │   ├── anjay_senml_like_encoder.c
│   │   │   ├── anjay_senml_like_encoder.h
│   │   │   ├── anjay_senml_like_encoder_vtable.h
│   │   │   ├── anjay_senml_like_out.c
│   │   │   ├── anjay_text.c
│   │   │   ├── anjay_tlv.h
│   │   │   ├── anjay_tlv_in.c
│   │   │   ├── anjay_tlv_out.c
│   │   │   ├── anjay_vtable.h
│   │   │   ├── cbor/
│   │   │   │   ├── anjay_cbor_encoder_ll.c
│   │   │   │   ├── anjay_cbor_encoder_ll.h
│   │   │   │   ├── anjay_cbor_types.h
│   │   │   │   ├── anjay_json_like_cbor_decoder.c
│   │   │   │   ├── anjay_json_like_cbor_decoder.h
│   │   │   │   └── anjay_senml_cbor_encoder.c
│   │   │   └── json/
│   │   │       ├── anjay_json_decoder.c
│   │   │       └── anjay_json_decoder.h
│   │   ├── observe/
│   │   │   ├── anjay_observe_core.c
│   │   │   ├── anjay_observe_core.h
│   │   │   ├── anjay_observe_internal.h
│   │   │   └── anjay_observe_planning.c
│   │   └── servers/
│   │       ├── anjay_activate.c
│   │       ├── anjay_activate.h
│   │       ├── anjay_connection_ip.c
│   │       ├── anjay_connections.c
│   │       ├── anjay_connections.h
│   │       ├── anjay_connections_internal.h
│   │       ├── anjay_register.c
│   │       ├── anjay_register.h
│   │       ├── anjay_reload.c
│   │       ├── anjay_security.h
│   │       ├── anjay_security_generic.c
│   │       ├── anjay_server_connections.c
│   │       ├── anjay_server_connections.h
│   │       ├── anjay_servers_internal.c
│   │       └── anjay_servers_internal.h
│   └── modules/
│       ├── access_control/
│       │   ├── anjay_access_control_handlers.c
│       │   ├── anjay_access_control_persistence.c
│       │   ├── anjay_mod_access_control.c
│       │   └── anjay_mod_access_control.h
│       ├── advanced_fw_update/
│       │   └── anjay_advanced_fw_update.c
│       ├── factory_provisioning/
│       │   └── anjay_provisioning.c
│       ├── fw_update/
│       │   └── anjay_fw_update.c
│       ├── ipso/
│       │   ├── anjay_ipso_3d_sensor.c
│       │   ├── anjay_ipso_basic_sensor.c
│       │   └── anjay_ipso_button.c
│       ├── ipso_v2/
│       │   ├── anjay_ipso_v2_3d_sensor.c
│       │   └── anjay_ipso_v2_basic_sensor.c
│       ├── lwm2m_gateway/
│       │   └── anjay_lwm2m_gateway.c
│       ├── security/
│       │   ├── anjay_mod_security.c
│       │   ├── anjay_mod_security.h
│       │   ├── anjay_security_persistence.c
│       │   ├── anjay_security_transaction.c
│       │   ├── anjay_security_transaction.h
│       │   ├── anjay_security_utils.c
│       │   └── anjay_security_utils.h
│       ├── server/
│       │   ├── anjay_mod_server.c
│       │   ├── anjay_mod_server.h
│       │   ├── anjay_server_persistence.c
│       │   ├── anjay_server_transaction.c
│       │   ├── anjay_server_transaction.h
│       │   ├── anjay_server_utils.c
│       │   └── anjay_server_utils.h
│       └── sw_mgmt/
│           └── anjay_sw_mgmt.c
├── standalone/
│   ├── security/
│   │   ├── standalone_mod_security.c
│   │   ├── standalone_mod_security.h
│   │   ├── standalone_security.h
│   │   ├── standalone_security_persistence.c
│   │   ├── standalone_security_transaction.c
│   │   ├── standalone_security_transaction.h
│   │   ├── standalone_security_utils.c
│   │   └── standalone_security_utils.h
│   └── server/
│       ├── standalone_mod_server.c
│       ├── standalone_mod_server.h
│       ├── standalone_server.h
│       ├── standalone_server_persistence.c
│       ├── standalone_server_transaction.c
│       ├── standalone_server_transaction.h
│       ├── standalone_server_utils.c
│       └── standalone_server_utils.h
├── tests/
│   ├── codegen/
│   │   ├── CMakeLists.txt
│   │   ├── check_with_object_registry.sh
│   │   └── input/
│   │       ├── execute.xml
│   │       ├── multiple-object.xml
│   │       ├── read.xml
│   │       ├── sanitization.xml
│   │       └── write.xml
│   ├── core/
│   │   ├── access_utils.c
│   │   ├── anjay.c
│   │   ├── attr_storage/
│   │   │   ├── attr_storage.c
│   │   │   ├── attr_storage_test.h
│   │   │   └── persistence.c
│   │   ├── bootstrap.c
│   │   ├── bootstrap_mock.h
│   │   ├── coap/
│   │   │   ├── utils.c
│   │   │   └── utils.h
│   │   ├── dm.c
│   │   ├── downloader/
│   │   │   └── downloader.c
│   │   ├── io/
│   │   │   ├── batch_builder.c
│   │   │   ├── bigdata.h
│   │   │   ├── cbor/
│   │   │   │   ├── cbor_decoder.c
│   │   │   │   └── cbor_encoder.c
│   │   │   ├── cbor_in.c
│   │   │   ├── corelnk.c
│   │   │   ├── dm_batch.c
│   │   │   ├── dynamic.c
│   │   │   ├── json/
│   │   │   │   └── json_decoder.c
│   │   │   ├── json_in.c
│   │   │   ├── lwm2m_cbor_in.c
│   │   │   ├── lwm2m_cbor_out.c
│   │   │   ├── raw_cbor_in.c
│   │   │   ├── senml_cbor_encoder.c
│   │   │   ├── senml_cbor_out.c
│   │   │   ├── senml_in_common.h
│   │   │   ├── senml_json_encoder.c
│   │   │   ├── text.c
│   │   │   ├── tlv_in.c
│   │   │   └── tlv_out.c
│   │   ├── io.c
│   │   ├── lwm2m_send.c
│   │   ├── observe/
│   │   │   ├── observe.c
│   │   │   └── observe_mock.h
│   │   ├── socket_mock.c
│   │   ├── socket_mock.h
│   │   └── utils.c
│   ├── doc/
│   │   └── runtest.py
│   ├── fuzz/
│   │   ├── CMakeLists.txt
│   │   ├── cbor/
│   │   │   └── decoder.c
│   │   └── test_cases/
│   │       ├── cbor_decoder/
│   │       │   ├── boring
│   │       │   └── invalid
│   │       ├── coap_stream/
│   │       │   └── valid_coap_msg
│   │       ├── coap_stream_request/
│   │       │   └── basic
│   │       └── coap_stream_response/
│   │           └── basic
│   ├── integration/
│   │   ├── CMakeLists.txt
│   │   ├── framework/
│   │   │   ├── framework/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── asserts.py
│   │   │   │   ├── create_package.py
│   │   │   │   ├── create_xlsx_test_report.py
│   │   │   │   ├── lwm2m_test.py
│   │   │   │   ├── pretty_test_runner.py
│   │   │   │   ├── serialize_senml_cbor.py
│   │   │   │   ├── test_suite.py
│   │   │   │   └── test_utils.py
│   │   │   └── pyproject.toml
│   │   ├── run_tests.sh.in
│   │   ├── runtest.py
│   │   └── suites/
│   │       ├── __init__.py
│   │       ├── default/
│   │       │   ├── __init__.py
│   │       │   ├── access_control.py
│   │       │   ├── advanced_firmware_update.py
│   │       │   ├── async.py
│   │       │   ├── block_response.py
│   │       │   ├── block_write.py
│   │       │   ├── bootstrap_client.py
│   │       │   ├── bootstrap_discover.py
│   │       │   ├── bootstrap_factory.py
│   │       │   ├── bootstrap_holdoff.py
│   │       │   ├── bootstrap_pack.py
│   │       │   ├── bootstrap_server.py
│   │       │   ├── bootstrap_sync.py
│   │       │   ├── bootstrap_transaction.py
│   │       │   ├── buffer_sizes.py
│   │       │   ├── cbor_encoding.py
│   │       │   ├── cbor_requests.py
│   │       │   ├── client_block_request.py
│   │       │   ├── coap.py
│   │       │   ├── con_attr.py
│   │       │   ├── conn_status_api.py
│   │       │   ├── connection_id.py
│   │       │   ├── crash.py
│   │       │   ├── create.py
│   │       │   ├── critical_opts.py
│   │       │   ├── disable_server.py
│   │       │   ├── discover_depth.py
│   │       │   ├── downloader.py
│   │       │   ├── factory_provisioning.py
│   │       │   ├── firmware_update.py
│   │       │   ├── firmware_update11.py
│   │       │   ├── forbidden_on_register.py
│   │       │   ├── formats.py
│   │       │   ├── hierarchical_cbor_encoding.py
│   │       │   ├── ipso_objects.py
│   │       │   ├── json_encoding.py
│   │       │   ├── json_requests.py
│   │       │   ├── lwm2m_gateway.py
│   │       │   ├── lwm2m_gateway_observe_attributes.py
│   │       │   ├── modify_servers.py
│   │       │   ├── msg_cache.py
│   │       │   ├── notification_timestamps.py
│   │       │   ├── notifications.py
│   │       │   ├── observe_attributes.py
│   │       │   ├── observe_with_attributes.py
│   │       │   ├── offline.py
│   │       │   ├── plaintext_base64.py
│   │       │   ├── port_rebind.py
│   │       │   ├── queue_mode.py
│   │       │   ├── read_composite.py
│   │       │   ├── reboot.py
│   │       │   ├── register.py
│   │       │   ├── request_too_large.py
│   │       │   ├── retransmissions.py
│   │       │   ├── security.py
│   │       │   ├── send.py
│   │       │   ├── senml_json_encoding.py
│   │       │   ├── separate_response.py
│   │       │   ├── software_mgmt.py
│   │       │   ├── ssl_error_api.py
│   │       │   ├── stats.py
│   │       │   ├── test_object.py
│   │       │   ├── time_api.py
│   │       │   ├── unregister.py
│   │       │   ├── update.py
│   │       │   ├── uri_change_reregister.py
│   │       │   └── write_composite.py
│   │       ├── sensitive/
│   │       │   ├── __init__.py
│   │       │   ├── advanced_firmware_update.py
│   │       │   ├── bootstrap_client.py
│   │       │   ├── firmware_update.py
│   │       │   └── update.py
│   │       └── testfest/
│   │           ├── __init__.py
│   │           ├── bootstrap.py
│   │           ├── dm/
│   │           │   ├── __init__.py
│   │           │   ├── advanced_firmware_update.py
│   │           │   ├── connectivity_management.py
│   │           │   ├── connectivity_monitoring.py
│   │           │   ├── connectivity_statistics.py
│   │           │   ├── device.py
│   │           │   ├── firmware_update.py
│   │           │   ├── location.py
│   │           │   ├── portfolio.py
│   │           │   └── utils.py
│   │           ├── management.py
│   │           ├── multi_servers.py
│   │           ├── register.py
│   │           ├── reporting.py
│   │           └── security.py
│   ├── modules/
│   │   ├── access_control/
│   │   │   ├── access_control.c
│   │   │   └── persistence.c
│   │   ├── factory_provisioning/
│   │   │   └── provisioning.c
│   │   ├── lwm2m_gateway/
│   │   │   └── lwm2m_gateway.c
│   │   ├── security/
│   │   │   ├── api.c
│   │   │   └── persistence.c
│   │   └── server/
│   │       ├── api.c
│   │       └── persistence.c
│   └── utils/
│       ├── coap/
│       │   ├── socket.c
│       │   └── socket.h
│       ├── dm.c
│       ├── dm.h
│       ├── mock_clock.c
│       ├── mock_clock.h
│       ├── mock_dm.c
│       ├── mock_dm.h
│       └── utils.h
├── tools/
│   ├── analyze
│   ├── anjay_codegen.py
│   ├── anjay_config_log_tool.py
│   ├── build_doxygen_docs.py
│   ├── build_sphinx_docs.py
│   ├── ci/
│   │   ├── build-docker-images.sh
│   │   ├── rockylinux-9/
│   │   │   └── Dockerfile
│   │   ├── ubuntu-22.04/
│   │   │   └── Dockerfile
│   │   └── ubuntu-24.04/
│   │       └── Dockerfile
│   ├── ci-psa/
│   │   ├── Dockerfile
│   │   └── README.md
│   ├── conditional_headers_whitelist.json
│   ├── coverage
│   ├── find_unused_code.py
│   ├── generate-certs.sh
│   ├── generate_doxygen_config.py
│   ├── lwm2m_object_registry.py
│   ├── markdown-toc.py
│   ├── provisioning-tool/
│   │   ├── configs/
│   │   │   ├── cert_info.json
│   │   │   ├── endpoint_cfg
│   │   │   └── lwm2m_server.json
│   │   ├── factory_prov/
│   │   │   ├── __init__.py
│   │   │   ├── cert_gen.py
│   │   │   └── factory_prov.py
│   │   └── ptool.py
│   ├── symlink-check.sh
│   ├── test-framework-tools/
│   │   ├── .gitignore
│   │   ├── nsh-lwm2m/
│   │   │   ├── cbor_shell.py
│   │   │   ├── nsh_lwm2m.py
│   │   │   └── tlv_shell.py
│   │   ├── pymbedtls/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── cmake/
│   │   │   │   ├── FindMbedTLS.cmake
│   │   │   │   └── QueryPythonForPybind11.cmake
│   │   │   ├── pymbedtls/
│   │   │   │   └── __init__.py
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       ├── common.cpp
│   │   │       ├── common.hpp
│   │   │       ├── context.cpp
│   │   │       ├── context.hpp
│   │   │       ├── pybind11_interop.hpp
│   │   │       ├── pymbedtls.cpp
│   │   │       ├── security.cpp
│   │   │       ├── security.hpp
│   │   │       ├── socket.cpp
│   │   │       └── socket.hpp
│   │   └── tools/
│   │       ├── framework_tools/
│   │       │   ├── __init__.py
│   │       │   ├── coap_file_server.py
│   │       │   └── lwm2m/
│   │       │       ├── __init__.py
│   │       │       ├── coap/
│   │       │       │   ├── __init__.py
│   │       │       │   ├── code.py
│   │       │       │   ├── content_format.py
│   │       │       │   ├── option.py
│   │       │       │   ├── packet.py
│   │       │       │   ├── server.py
│   │       │       │   ├── transport.py
│   │       │       │   ├── type.py
│   │       │       │   └── utils.py
│   │       │       ├── messages.py
│   │       │       ├── objlink.py
│   │       │       ├── path.py
│   │       │       ├── senml_cbor.py
│   │       │       ├── server.py
│   │       │       └── tlv.py
│   │       └── pyproject.toml
│   ├── test_duplicates.py
│   ├── test_ghactions.py
│   └── utils.sh
└── valgrind_test.supp
Download .txt
Showing preview only (865K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (9534 symbols across 562 files)

FILE: demo/advanced_firmware_update.c
  type advanced_firmware_update_persistence_file_data_t (line 21) | typedef struct {
  type set_delayed_advanced_fw_update_result_args_t (line 30) | typedef struct {
  function set_delayed_fw_update_result (line 37) | static void set_delayed_fw_update_result(avs_sched_t *sched, const void ...
  function fix_fw_meta_endianness (line 46) | static void fix_fw_meta_endianness(advanced_fw_metadata_t *meta) {
  function read_fw_meta_from_file (line 52) | static int read_fw_meta_from_file(FILE *f,
  function handle_multipackage (line 87) | static int
  function copy_file_contents_by_bytes (line 143) | static int copy_file_contents_by_bytes(FILE *dst, FILE *src, uint32_t le...
  function unpack_fw_to_file (line 161) | static int unpack_fw_to_file(FILE *fw,
  function maybe_delete_firmware_file (line 199) | static void maybe_delete_firmware_file(advanced_fw_update_logic_t *fw) {
  function find_instance_magic_based (line 215) | static int find_instance_magic_based(advanced_fw_metadata_t *meta,
  function unpack_firmware (line 226) | static int unpack_firmware(FILE *firmware,
  function is_state_downloaded (line 255) | static bool is_state_downloaded(advanced_fw_update_logic_t *fw) {
  function unpack_firmware_in_place (line 263) | static int unpack_firmware_in_place(anjay_iid_t iid,
  function fw_magic_valid (line 352) | static bool fw_magic_valid(const advanced_fw_metadata_t *meta,
  function fw_header_version_valid (line 370) | static bool fw_header_version_valid(const advanced_fw_metadata_t *meta) {
  function validate_firmware (line 379) | static int validate_firmware(advanced_fw_update_logic_t *fw) {
  function process_linked (line 409) | static int process_linked(advanced_fw_update_logic_t *fw) {
  function preprocess_firmware (line 427) | static int preprocess_firmware(anjay_iid_t iid,
  function advanced_firmware_update_persistence_file_data_t (line 463) | static advanced_firmware_update_persistence_file_data_t
  function advanced_firmware_update_write_persistence_file (line 543) | int advanced_firmware_update_write_persistence_file(
  function advanced_firmware_update_delete_persistence_file (line 604) | void advanced_firmware_update_delete_persistence_file(
  function advanced_firmware_update_persistence_file_data_t (line 613) | advanced_firmware_update_persistence_file_data_t
  function advanced_firmware_update_write_persistence_file (line 622) | int advanced_firmware_update_write_persistence_file(
  function advanced_firmware_update_delete_persistence_file (line 633) | void advanced_firmware_update_delete_persistence_file(
  function fw_reset (line 641) | static void fw_reset(advanced_fw_update_logic_t *fw) {
  function advanced_firmware_update_read_states_results_paths (line 650) | int advanced_firmware_update_read_states_results_paths(
  function fw_update_common_open (line 672) | int fw_update_common_open(anjay_iid_t iid, void *fw_) {
  function fw_update_common_write (line 709) | int fw_update_common_write(anjay_iid_t iid,
  function stream_finish (line 731) | static int stream_finish(anjay_iid_t iid, void *fw_) {
  function add_conflicting (line 789) | static int
  function check_version_logic (line 825) | static void check_version_logic(
  function fw_update_common_finish (line 845) | int fw_update_common_finish(anjay_iid_t iid, void *fw_) {
  function fw_update_common_reset (line 886) | void fw_update_common_reset(anjay_iid_t iid, void *fw_) {
  function fw_update_common_perform_upgrade (line 947) | int fw_update_common_perform_upgrade(
  function fw_update_common_maybe_create_firmware_file (line 1021) | int fw_update_common_maybe_create_firmware_file(
  function afu_logic_destroy (line 1038) | static void afu_logic_destroy(advanced_fw_update_logic_t *fw) {
  function advanced_firmware_update_install (line 1056) | int advanced_firmware_update_install(
  function advanced_firmware_update_set_package_path (line 1239) | void advanced_firmware_update_set_package_path(
  function advanced_firmware_update_uninstall (line 1258) | void advanced_firmware_update_uninstall(advanced_fw_update_logic_t *fw_t...
  function advanced_firmware_update_get_security_config (line 1264) | int advanced_firmware_update_get_security_config(

FILE: demo/advanced_firmware_update.h
  type target_image_t (line 37) | enum target_image_t {
  type advanced_fw_metadata_t (line 42) | typedef struct advanced_firmware_metadata {
  type unpacked_imgs_info_t (line 52) | typedef struct unpacked_imgs_info {
  type advanced_fw_multipkg_metadata_t (line 57) | typedef struct advanced_firmware_multipkg_metadata {
  type advanced_fw_update_logic (line 64) | struct advanced_fw_update_logic {
  type advanced_fw_update_logic_t (line 82) | typedef struct advanced_fw_update_logic advanced_fw_update_logic_t;
  type states_results_paths_t (line 151) | typedef struct {

FILE: demo/advanced_firmware_update_addimg.c
  function fw_stream_open (line 17) | static int fw_stream_open(anjay_iid_t iid, void *fw_) {
  function compare_files (line 23) | static int compare_files(FILE *s1, FILE *s2) {
  function compare_images (line 39) | static int compare_images(const char *file_path_1, const char *file_path...
  function prepare_and_validate_update (line 66) | static int prepare_and_validate_update(advanced_fw_update_logic_t *fw) {
  function update (line 82) | static int update(advanced_fw_update_logic_t *fw) {
  function advanced_firmware_update_additional_image_install (line 105) | int advanced_firmware_update_additional_image_install(

FILE: demo/advanced_firmware_update_app.c
  function fw_stream_open (line 20) | static int fw_stream_open(anjay_iid_t iid, void *fw_) {
  function prepare_and_validate_update (line 25) | static int prepare_and_validate_update(advanced_fw_update_logic_t *fw) {
  function write_persistence (line 46) | static int write_persistence(advanced_fw_update_logic_t *fw_table) {
  type execute_new_app_args (line 76) | struct execute_new_app_args {
  function execute_new_app (line 80) | static void execute_new_app(avs_sched_t *sched, const void *args_) {
  function update (line 95) | static int update(advanced_fw_update_logic_t *fw) {
  function avs_coap_udp_tx_params_t (line 159) | static avs_coap_udp_tx_params_t fw_get_coap_tx_params(
  function avs_time_duration_t (line 172) | static avs_time_duration_t fw_get_tcp_request_timeout(
  function advanced_firmware_update_application_install (line 192) | int advanced_firmware_update_application_install(

FILE: demo/demo.c
  function security_object_reload (line 88) | static int security_object_reload(anjay_demo_t *demo) {
  function anjay_dm_object_def_t (line 236) | const anjay_dm_object_def_t **demo_find_object(anjay_demo_t *demo,
  function demo_reload_servers (line 247) | void demo_reload_servers(anjay_demo_t *demo) {
  function demo_delete (line 254) | static void demo_delete(anjay_demo_t *demo) {
  function has_bootstrap_server (line 340) | static bool has_bootstrap_server(anjay_demo_t *demo) {
  function count_non_bootstrap_servers (line 350) | static size_t count_non_bootstrap_servers(anjay_demo_t *demo) {
  function add_default_access_entries (line 362) | static int add_default_access_entries(anjay_demo_t *demo) {
  function add_access_entries (line 404) | static int add_access_entries(anjay_demo_t *demo,
  function get_single_instance (line 438) | static int get_single_instance(const anjay_dm_object_def_t **obj_ptr,
  function install_object (line 450) | static int
  function add_installed_object_update_handler (line 483) | static int
  function notify_time_dependent_job (line 499) | static void notify_time_dependent_job(avs_sched_t *sched,
  function reschedule_notify_time_dependent (line 516) | static void reschedule_notify_time_dependent(anjay_demo_t *demo) {
  function server_connection_status_change_callback (line 535) | static void
  function ssl_error_callback (line 548) | static void ssl_error_callback(void *demo_,
  function confirmable_notification_status_callback (line 561) | static void confirmable_notification_status_callback(
  type stat (line 701) | struct stat
  function anjay_demo_t (line 1004) | static anjay_demo_t *demo_new(cmdline_args_t *cmdline_args) {
  function interrupt_event_loop_job (line 1030) | static void interrupt_event_loop_job(avs_sched_t *sched, const void *dem...
  function log_extended_handler (line 1036) | static void log_extended_handler(avs_log_level_t level,
  function log_handler (line 1055) | static void
  function cmdline_args_cleanup (line 1072) | static void cmdline_args_cleanup(cmdline_args_t *cmdline_args) {
  function main (line 1080) | int main(int argc, char *argv[]) {

FILE: demo/demo.h
  type anjay_demo_object_t (line 42) | typedef struct {
  type anjay_demo_struct (line 51) | struct anjay_demo_struct {

FILE: demo/demo_args.c
  function parse_security_mode (line 150) | static int parse_security_mode(const char *mode_string,
  function parse_tls_version (line 196) | static int parse_tls_version(const char *str,
  function get_screen_width (line 232) | static size_t get_screen_width(void) {
  function print_wrapped (line 243) | static void
  function format_wrapped (line 271) | static void
  function stdout_supports_color (line 281) | static bool stdout_supports_color(void) {
  function print_help_short (line 300) | static void print_help_short(const char *progname) {
  function print_help_full (line 466) | static void print_help_full(const struct option *options) {
  function parse_i32 (line 865) | static int parse_i32(const char *str, int32_t *out_value) {
  function parse_u32 (line 879) | static int parse_u32(const char *str, uint32_t *out_value) {
  function parse_u16 (line 893) | static int parse_u16(const char *str, uint16_t *out_value) {
  function parse_size (line 907) | static int parse_size(const char *str, size_t *out_value) {
  function parse_double (line 924) | static int parse_double(const char *str, double *out_value) {
  function parse_hexstring (line 935) | static int parse_hexstring(cmdline_args_t *cmdline_args,
  function build_getopt_string (line 973) | static void build_getopt_string(const struct option *options,
  function clone_buffer (line 1001) | static int clone_buffer(cmdline_args_t *cmdline_args,
  function load_buffer_from_file (line 1018) | static int load_buffer_from_file(cmdline_args_t *cmdline_args,
  type option (line 1092) | struct option
  function else (line 2456) | else if (use_external_security_info) {

FILE: demo/demo_args.h
  type access_entry_t (line 33) | typedef struct access_entry {
  type cmdline_args_t (line 40) | typedef struct cmdline_args {

FILE: demo/demo_cmds.c
  function verify_device_count (line 59) | static inline int verify_device_count(anjay_iid_t end_dev_iid) {
  function parse_ssid (line 71) | static int parse_ssid(const char *text, anjay_ssid_t *out_ssid) {
  function cmd_send_register (line 80) | static void cmd_send_register(anjay_demo_t *demo, const char *args_strin...
  function cmd_send_update (line 96) | static void cmd_send_update(anjay_demo_t *demo, const char *args_string) {
  function cmd_reconnect_server (line 113) | static void cmd_reconnect_server(anjay_demo_t *demo, const char *args_st...
  function parse_transports (line 126) | static int parse_transports(const char *text,
  function cmd_reconnect (line 161) | static void cmd_reconnect(anjay_demo_t *demo, const char *args_string) {
  function cmd_set_fw_package_path (line 173) | static void cmd_set_fw_package_path(anjay_demo_t *demo,
  function cmd_set_afu_package_path (line 185) | static void cmd_set_afu_package_path(anjay_demo_t *demo,
  function cmd_get_afu_deadline (line 199) | static void cmd_get_afu_deadline(anjay_demo_t *demo, const char *args_st...
  function cmd_set_afu_result (line 208) | static void cmd_set_afu_result(anjay_demo_t *demo, const char *args_stri...
  function cmd_afu_suspend (line 226) | static void cmd_afu_suspend(anjay_demo_t *demo, const char *args_string) {
  function cmd_afu_reconnect (line 231) | static void cmd_afu_reconnect(anjay_demo_t *demo, const char *args_strin...
  function cmd_set_sw_mgmt_package_path (line 238) | static void cmd_set_sw_mgmt_package_path(anjay_demo_t *demo,
  function cmd_set_sw_mgmt_install_result (line 260) | static void cmd_set_sw_mgmt_install_result(anjay_demo_t *demo,
  function cmd_sw_mgmt_suspend (line 277) | static void cmd_sw_mgmt_suspend(anjay_demo_t *demo, const char *args_str...
  function cmd_sw_mgmt_reconnect (line 282) | static void cmd_sw_mgmt_reconnect(anjay_demo_t *demo, const char *args_s...
  function cmd_open_location_csv (line 288) | static void cmd_open_location_csv(anjay_demo_t *demo, const char *args_s...
  function count_servers (line 310) | static size_t count_servers(const server_connection_args_t *args) {
  function add_server (line 319) | static int add_server(anjay_demo_t *demo, const char *uri) {
  function cmd_add_server (line 345) | static void cmd_add_server(anjay_demo_t *demo, const char *args_string) {
  function cmd_trim_servers (line 357) | static void cmd_trim_servers(anjay_demo_t *demo, const char *args_string) {
  function cmd_socket_count (line 371) | static void cmd_socket_count(anjay_demo_t *demo, const char *args_string) {
  function cmd_get_port (line 377) | static void cmd_get_port(anjay_demo_t *demo, const char *args_string) {
  function cmd_get_transport (line 402) | static void cmd_get_transport(anjay_demo_t *demo, const char *args_strin...
  function cmd_non_lwm2m_socket_count (line 434) | static void cmd_non_lwm2m_socket_count(anjay_demo_t *demo,
  function cmd_enter_offline (line 449) | static void cmd_enter_offline(anjay_demo_t *demo, const char *args_strin...
  function cmd_exit_offline (line 457) | static void cmd_exit_offline(anjay_demo_t *demo, const char *args_string) {
  function cmd_notify (line 465) | static void cmd_notify(anjay_demo_t *demo, const char *args_string) {
  function send_finished_handler (line 484) | static void send_finished_handler(anjay_t *anjay,
  type anjay_send_result_t (line 496) | typedef anjay_send_result_t
  function print_send_usage (line 503) | static void print_send_usage(const char *command) {
  function all_paths_have_same_iid (line 511) | static bool all_paths_have_same_iid(const anjay_iid_t *iids,
  function cmd_send_impl (line 523) | static void cmd_send_impl(anjay_demo_t *demo,
  function cmd_send (line 643) | static void cmd_send(anjay_demo_t *demo, const char *args_string) {
  function cmd_send_deferrable (line 647) | static void cmd_send_deferrable(anjay_demo_t *demo, const char *args_str...
  function cmd_unregister_object (line 652) | static void cmd_unregister_object(anjay_demo_t *demo, const char *args_s...
  function cmd_reregister_object (line 674) | static void cmd_reregister_object(anjay_demo_t *demo, const char *args_s...
  type demo_download_skip_def_t (line 696) | typedef struct {
  type demo_download_user_data_t (line 701) | typedef struct {
  function demo_download_user_data_destroy (line 708) | static void demo_download_user_data_destroy(demo_download_user_data_t *d...
  function avs_error_t (line 718) | static avs_error_t dl_write_next_block_new(anjay_t *anjay,
  function dl_finished_new (line 753) | static void dl_finished_new(anjay_t *anjay,
  function cmd_download (line 761) | static void cmd_download(anjay_demo_t *demo, const char *args_string) {
  function cmd_download_blocks_impl (line 807) | static void cmd_download_blocks_impl(anjay_demo_t *demo, char *args_stri...
  function cmd_download_blocks (line 894) | static void cmd_download_blocks(anjay_demo_t *demo, const char *args_str...
  function cmd_set_attrs (line 905) | static void cmd_set_attrs(anjay_demo_t *demo, const char *args_string) {
  function cmd_disable_server (line 1024) | static void cmd_disable_server(anjay_demo_t *demo, const char *args_stri...
  function cmd_enable_server (line 1045) | static void cmd_enable_server(anjay_demo_t *demo, const char *args_strin...
  function cmd_all_connections_failed (line 1058) | static void cmd_all_connections_failed(anjay_demo_t *demo,
  function cmd_schedule_update_on_exit (line 1065) | static void cmd_schedule_update_on_exit(anjay_demo_t *demo,
  function cmd_set_queue_mode_preference (line 1072) | static void cmd_set_queue_mode_preference(anjay_demo_t *demo,
  function log_observation_status (line 1097) | static void
  function cmd_observation_status (line 1126) | static void cmd_observation_status(anjay_demo_t *demo,
  function cmd_badc_write (line 1161) | static void cmd_badc_write(anjay_demo_t *demo, const char *args_string) {
  function cmd_advance_time (line 1174) | static void cmd_advance_time(anjay_demo_t *demo, const char *args_string) {
  function cmd_set_event_log_data (line 1185) | static void cmd_set_event_log_data(anjay_demo_t *demo,
  function cmd_set_fw_update_result (line 1206) | static void cmd_set_fw_update_result(anjay_demo_t *demo,
  function cmd_fw_update_suspend (line 1216) | static void cmd_fw_update_suspend(anjay_demo_t *demo, const char *args_s...
  function cmd_fw_update_reconnect (line 1221) | static void cmd_fw_update_reconnect(anjay_demo_t *demo,
  function cmd_get_fw_update_deadline (line 1229) | static void cmd_get_fw_update_deadline(anjay_demo_t *demo,
  function cmd_ongoing_registration_exists (line 1241) | static void cmd_ongoing_registration_exists(anjay_demo_t *demo,
  function cmd_registration_expiration_time (line 1267) | static void cmd_registration_expiration_time(anjay_demo_t *demo,
  function cmd_next_lifecycle_operation (line 1282) | static void cmd_next_lifecycle_operation(anjay_demo_t *demo,
  function cmd_next_planned_notify (line 1301) | static void cmd_next_planned_notify(anjay_demo_t *demo,
  function cmd_next_planned_pmax_notify (line 1319) | static void cmd_next_planned_pmax_notify(anjay_demo_t *demo,
  function cmd_has_unsent_notifications (line 1338) | static void cmd_has_unsent_notifications(anjay_demo_t *demo,
  function cmd_temperature_add_instance (line 1355) | static void cmd_temperature_add_instance(anjay_demo_t *demo,
  function cmd_temperature_remove_instance (line 1366) | static void cmd_temperature_remove_instance(anjay_demo_t *demo,
  function cmd_accelerometer_add_instance (line 1377) | static void cmd_accelerometer_add_instance(anjay_demo_t *demo,
  function cmd_accelerometer_remove_instance (line 1388) | static void cmd_accelerometer_remove_instance(anjay_demo_t *demo,
  function cmd_push_button_add_instance (line 1399) | static void cmd_push_button_add_instance(anjay_demo_t *demo,
  function cmd_push_button_remove_instance (line 1411) | static void cmd_push_button_remove_instance(anjay_demo_t *demo,
  function cmd_push_button_press (line 1422) | static void cmd_push_button_press(anjay_demo_t *demo, const char *args_s...
  function cmd_push_button_release (line 1432) | static void cmd_push_button_release(anjay_demo_t *demo,
  function cmd_set_tx_params (line 1443) | static void cmd_set_tx_params(anjay_demo_t *demo, const char *args_strin...
  function cmd_set_coap_exchange_timeout (line 1466) | static void cmd_set_coap_exchange_timeout(anjay_demo_t *demo,
  function cmd_set_dtls_timeouts (line 1488) | static void cmd_set_dtls_timeouts(anjay_demo_t *demo, const char *args_s...
  function cmd_last_registration_time (line 1504) | static void cmd_last_registration_time(anjay_demo_t *demo,
  function cmd_next_update_time (line 1524) | static void cmd_next_update_time(anjay_demo_t *demo, const char *args_st...
  function cmd_last_communication_time (line 1543) | static void cmd_last_communication_time(anjay_demo_t *demo,
  function cmd_get_server_connection_status (line 1564) | static void cmd_get_server_connection_status(anjay_demo_t *demo,
  function cmd_setup_end_device (line 1582) | static void cmd_setup_end_device(anjay_demo_t *demo, const char *args_st...
  function cmd_cleanup_end_device (line 1600) | static void cmd_cleanup_end_device(anjay_demo_t *demo,
  function cmd_press_button_end_device (line 1613) | static void cmd_press_button_end_device(anjay_demo_t *demo,
  function cmd_release_button_end_device (line 1627) | static void cmd_release_button_end_device(anjay_demo_t *demo,
  function cmd_badc_write_end_device (line 1641) | static void cmd_badc_write_end_device(anjay_demo_t *demo,
  type cmd_handler_def (line 1664) | struct cmd_handler_def {
  type cmd_handler_def (line 1674) | struct cmd_handler_def
  function print_line_with_indent (line 1937) | static void print_line_with_indent(const char *line, const char *end) {
  function print_with_indent (line 1964) | static void print_with_indent(const char *text) {
  function cmd_help (line 1978) | static void cmd_help(anjay_demo_t *demo, const char *args_string) {
  function handle_command (line 1993) | static void handle_command(avs_sched_t *sched, const void *invocation_) {
  function demo_command_dispatch (line 2025) | void demo_command_dispatch(const demo_command_invocation_t *invocation) {

FILE: demo/demo_cmds.h
  type demo_command_invocation_t (line 13) | typedef struct {

FILE: demo/demo_time.c
  function avs_time_real_t (line 20) | avs_time_real_t avs_time_real_now(void) {
  function avs_time_monotonic_t (line 32) | avs_time_monotonic_t avs_time_monotonic_now(void) {
  function demo_advance_time (line 51) | void demo_advance_time(avs_time_duration_t duration) {

FILE: demo/demo_utils.c
  function argv_store (line 61) | int argv_store(int argc, char **argv) {
  function argv_append (line 79) | int argv_append(const char *arg) {
  function geo_distance_m_with_radians (line 97) | static double geo_distance_m_with_radians(double lat1,
  function geo_distance_m (line 109) | double geo_distance_m(double lat1, double lon1, double lat2, double lon2) {
  function demo_parse_long (line 114) | int demo_parse_long(const char *str, long *out_value) {
  function fetch_bytes (line 135) | int fetch_bytes(anjay_input_ctx_t *ctx, void **buffer, size_t *out_size) {
  function open_temporary_file (line 169) | static int open_temporary_file(char *path) {
  function copy_file_contents (line 194) | int copy_file_contents(FILE *dst, FILE *src) {
  function crc32_for_byte (line 211) | static uint32_t crc32_for_byte(uint8_t value) {
  function crc32 (line 223) | static void crc32(uint32_t *inout_crc, const uint8_t *data, size_t size) {
  function calc_file_crc32 (line 237) | int calc_file_crc32(const char *filename, uint32_t *out_crc) {
  function avs_error_t (line 268) | avs_error_t store_etag(avs_persistence_context_t *ctx,
  function avs_error_t (line 282) | avs_error_t restore_etag(avs_persistence_context_t *ctx, anjay_etag_t **...

FILE: demo/demo_utils.h
  function time_to_rand (line 28) | static inline unsigned time_to_rand(void) {
  function deg2rad (line 36) | static inline double deg2rad(double deg) {
  function rad2deg (line 40) | static inline double rad2deg(double rad) {
  function latitude_valid (line 46) | static inline bool latitude_valid(double value) {
  function longitude_valid (line 50) | static inline bool longitude_valid(double value) {
  function velocity_mps_valid (line 54) | static inline bool velocity_mps_valid(double value) {
  function velocity_bearing_deg_cw_n_valid (line 58) | static inline bool velocity_bearing_deg_cw_n_valid(double value) {
  type anjay_demo_allocated_buffer_t (line 87) | typedef struct {

FILE: demo/firmware_update.c
  function maybe_create_firmware_file (line 42) | static int maybe_create_firmware_file(fw_update_logic_t *fw) {
  function maybe_delete_firmware_file (line 58) | static void maybe_delete_firmware_file(fw_update_logic_t *fw) {
  function firmware_update_set_package_path (line 67) | void firmware_update_set_package_path(fw_update_logic_t *fw, const char ...
  function fix_fw_meta_endianness (line 85) | static void fix_fw_meta_endianness(fw_metadata_t *meta) {
  function read_fw_meta_from_file (line 91) | static int read_fw_meta_from_file(FILE *f, fw_metadata_t *out_metadata) {
  function unpack_fw_to_file (line 119) | static int unpack_fw_to_file(const char *fw_pkg_path,
  function unpack_firmware_in_place (line 161) | static int unpack_firmware_in_place(fw_update_logic_t *fw) {
  function fw_magic_valid (line 194) | static bool fw_magic_valid(const fw_metadata_t *meta) {
  function fw_header_version_valid (line 203) | static bool fw_header_version_valid(const fw_metadata_t *meta) {
  function fw_version_supported (line 212) | static bool fw_version_supported(const fw_metadata_t *meta) {
  function validate_firmware (line 221) | static int validate_firmware(fw_update_logic_t *fw) {
  function preprocess_firmware (line 252) | static int preprocess_firmware(fw_update_logic_t *fw) {
  function write_persistence_file (line 267) | static int write_persistence_file(const char *path,
  function delete_persistence_file (line 327) | static void delete_persistence_file(const fw_update_logic_t *fw) {
  function write_persistence_file (line 332) | static int write_persistence_file(const char *path,
  function delete_persistence_file (line 354) | static void delete_persistence_file(const fw_update_logic_t *fw) {
  function fw_reset (line 361) | static void fw_reset(void *fw_) {
  type anjay_etag (line 378) | struct anjay_etag
  function fw_stream_write (line 428) | static int fw_stream_write(void *fw_, const void *data, size_t length) {
  function fw_stream_finish (line 447) | static int fw_stream_finish(void *fw_) {
  function fw_perform_upgrade (line 499) | static int fw_perform_upgrade(void *fw_) {
  function fw_get_security_config (line 595) | static int fw_get_security_config(void *fw_,
  function avs_coap_udp_tx_params_t (line 605) | static avs_coap_udp_tx_params_t
  function avs_time_duration_t (line 615) | static avs_time_duration_t
  function is_valid_result (line 632) | static bool is_valid_result(int8_t result) {
  type persistence_file_data_t (line 646) | typedef struct {
  function persistence_file_data_t (line 663) | static persistence_file_data_t read_persistence_file(const char *path) {
  function persistence_file_data_t (line 721) | static persistence_file_data_t read_persistence_file(const char *path) {
  type set_delayed_fw_update_result_args_t (line 731) | typedef struct {
  function set_delayed_fw_update_result (line 736) | static void set_delayed_fw_update_result(avs_sched_t *sched, const void ...
  function firmware_update_install (line 744) | int firmware_update_install(anjay_t *anjay,
  function firmware_update_destroy (line 867) | void firmware_update_destroy(fw_update_logic_t *fw_update) {

FILE: demo/firmware_update.h
  type fw_metadata_t (line 20) | typedef struct firmware_metadata {
  type fw_update_logic_t (line 29) | typedef struct {

FILE: demo/lwm2m_gateway.c
  type end_dev (line 26) | struct end_dev {
  type notify_job_args_t (line 53) | typedef struct {
  function notify_job (line 59) | static void notify_job(avs_sched_t *sched, const void *args_ptr) {
  type end_dev (line 70) | struct end_dev
  function lwm2m_gateway_setup_end_device (line 79) | int lwm2m_gateway_setup_end_device(anjay_t *anjay, anjay_iid_t end_dev_i...
  function lwm2m_gateway_cleanup_end_device (line 136) | void lwm2m_gateway_cleanup_end_device(anjay_t *anjay, anjay_iid_t end_de...
  function lwm2m_gateway_setup (line 175) | int lwm2m_gateway_setup(anjay_t *anjay) {
  function lwm2m_gateway_cleanup (line 193) | void lwm2m_gateway_cleanup(anjay_t *anjay) {
  function lwm2m_gateway_press_button_end_device (line 200) | void lwm2m_gateway_press_button_end_device(anjay_t *anjay,
  function lwm2m_gateway_release_button_end_device (line 211) | void lwm2m_gateway_release_button_end_device(anjay_t *anjay,
  function lwm2m_gateway_binary_app_data_container_write (line 222) | void lwm2m_gateway_binary_app_data_container_write(anjay_t *anjay,

FILE: demo/net_traffic_interceptor.c
  function _avs_net_traffic_interceptor (line 60) | void _avs_net_traffic_interceptor(
  function interceptor_init (line 132) | int interceptor_init(const char *socket_path, const char *endpoint_name) {
  function interceptor_deinit (line 155) | int interceptor_deinit(void) {

FILE: demo/objects.h
  type anjay_demo_t (line 33) | typedef struct anjay_demo_struct anjay_demo_t;
  type server_entry_t (line 58) | typedef struct {
  type server_connection_args_t (line 75) | typedef struct {

FILE: demo/objects/apn_conn_profile.c
  type apn_auth_type_t (line 40) | typedef enum {
  type apn_conn_profile_t (line 49) | typedef struct {
  type apn_conn_profile_repr_t (line 59) | typedef struct {
  function apn_conn_profile_repr_t (line 65) | static inline apn_conn_profile_repr_t *
  function apn_conn_profile_t (line 71) | static apn_conn_profile_t *find_instance(const apn_conn_profile_repr_t *...
  function apncp_list_instances (line 83) | static int apncp_list_instances(anjay_t *anjay,
  function apncp_instance_create (line 95) | static int apncp_instance_create(anjay_t *anjay,
  function apncp_instance_remove (line 120) | static int apncp_instance_remove(anjay_t *anjay,
  function apncp_list_resources (line 138) | static int apncp_list_resources(anjay_t *anjay,
  function apncp_resource_read (line 155) | static int apncp_resource_read(anjay_t *anjay,
  function apncp_resource_write (line 182) | static int apncp_resource_write(anjay_t *anjay,
  function apncp_transaction_begin (line 233) | static int
  function apncp_transaction_validate (line 249) | static int
  function apncp_transaction_commit (line 262) | static int
  function apncp_transaction_rollback (line 270) | static int
  function apncp_instance_reset (line 281) | static int apncp_instance_reset(anjay_t *anjay,
  function anjay_dm_object_def_t (line 310) | const anjay_dm_object_def_t **apn_conn_profile_object_create(void) {
  function apn_conn_profile_get_instances (line 322) | int apn_conn_profile_get_instances(const anjay_dm_object_def_t **def,
  function apn_conn_profile_object_release (line 338) | void apn_conn_profile_object_release(const anjay_dm_object_def_t **def) {
  function apn_conn_profile_list_activated (line 347) | AVS_LIST(anjay_iid_t)

FILE: demo/objects/binary_app_data_container.c
  type data_resource_instance_t (line 67) | typedef struct {
  type binary_app_data_container_instance_t (line 73) | typedef struct binary_app_data_container_instance_struct {
  type binary_app_data_container_t (line 78) | typedef struct binary_app_data_container_struct {
  function binary_app_data_container_t (line 84) | static inline binary_app_data_container_t *
  function binary_app_data_container_instance_t (line 90) | static binary_app_data_container_instance_t *
  function list_instances (line 104) | static int list_instances(anjay_t *anjay,
  function init_instance (line 117) | static int init_instance(binary_app_data_container_instance_t *inst,
  function release_instance (line 125) | static void release_instance(binary_app_data_container_instance_t *inst) {
  function instance_create (line 129) | static int instance_create(anjay_t *anjay,
  function instance_remove (line 158) | static int instance_remove(anjay_t *anjay,
  function instance_reset (line 179) | static int instance_reset(anjay_t *anjay,
  function list_resources (line 192) | static int list_resources(anjay_t *anjay,
  function resource_read (line 204) | static int resource_read(anjay_t *anjay,
  function resource_write (line 260) | static int resource_write(anjay_t *anjay,
  function resource_reset (line 311) | static int resource_reset(anjay_t *anjay,
  function resource_instance_remove (line 332) | static int resource_instance_remove(anjay_t *anjay,
  function list_resource_instances (line 365) | static int list_resource_instances(anjay_t *anjay,
  function transaction_begin (line 391) | static int transaction_begin(anjay_t *anjay,
  function transaction_commit (line 434) | static int transaction_commit(anjay_t *anjay,
  function transaction_rollback (line 444) | static int transaction_rollback(anjay_t *anjay,
  function anjay_dm_object_def_t (line 481) | const anjay_dm_object_def_t **binary_app_data_container_object_create(vo...
  function binary_app_data_container_object_release (line 493) | void binary_app_data_container_object_release(
  function binary_app_data_container_get_instances (line 505) | int binary_app_data_container_get_instances(const anjay_dm_object_def_t ...
  function binary_app_data_container_write (line 521) | int binary_app_data_container_write(anjay_t *anjay,

FILE: demo/objects/cell_connectivity.c
  type cell_power_saving_mode_t (line 35) | typedef enum {
  type cell_connectivity_data_t (line 42) | typedef struct {
  type cell_connectivity_repr_t (line 50) | typedef struct {
  function cell_connectivity_repr_t (line 58) | static inline cell_connectivity_repr_t *
  function cell_instance_reset (line 64) | static int cell_instance_reset(anjay_t *anjay,
  function cell_list_resources (line 79) | static int cell_list_resources(anjay_t *anjay,
  function cell_resource_read (line 105) | static int cell_resource_read(anjay_t *anjay,
  function get_edrx_params (line 173) | static int get_edrx_params(anjay_input_ctx_t *ctx, uint8_t *edrx_data) {
  function cell_resource_write (line 187) | static int cell_resource_write(anjay_t *anjay,
  function cell_list_resource_instances (line 250) | static int
  function cell_transaction_begin (line 283) | static int cell_transaction_begin(anjay_t *anjay,
  function cell_transaction_rollback (line 293) | static int
  function anjay_dm_object_def_t (line 321) | const anjay_dm_object_def_t **
  function cell_connectivity_object_release (line 338) | void cell_connectivity_object_release(const anjay_dm_object_def_t **def) {

FILE: demo/objects/conn_monitoring.c
  type conn_monitoring_repr_t (line 27) | typedef struct {
  function conn_monitoring_repr_t (line 31) | static inline conn_monitoring_repr_t *
  function signal_strength_dbm (line 37) | static int signal_strength_dbm(void) {
  function cm_list_resources (line 43) | static int cm_list_resources(anjay_t *anjay,
  function cm_resource_read (line 79) | static int cm_resource_read(anjay_t *anjay,
  function cm_list_resource_instances (line 162) | static int
  function anjay_dm_object_def_t (line 202) | const anjay_dm_object_def_t **cm_object_create(void) {
  function cm_object_release (line 214) | void cm_object_release(const anjay_dm_object_def_t **def) {
  function cm_notify_time_dependent (line 220) | void cm_notify_time_dependent(anjay_t *anjay,

FILE: demo/objects/conn_statistics.c
  type conn_stats_res_t (line 17) | typedef enum {
  type conn_stats_repr_t (line 29) | typedef struct {
  function conn_stats_repr_t (line 37) | static conn_stats_repr_t *get_cs(const anjay_dm_object_def_t *const *obj...
  function read_uint64_from_file (line 42) | static int read_uint64_from_file(uint64_t *number, const char *filename) {
  function ifname_for_first_socket (line 57) | static int ifname_for_first_socket(anjay_t *anjay,
  function stats_getter (line 69) | static int stats_getter(avs_net_socket_interface_name_t *if_name,
  function first_socket_stats (line 77) | static uint64_t first_socket_stats(anjay_t *anjay, const char *stats) {
  function get_rx_stats (line 88) | static uint64_t get_rx_stats(anjay_t *anjay, conn_stats_repr_t *repr) {
  function get_tx_stats (line 96) | static uint64_t get_tx_stats(anjay_t *anjay, conn_stats_repr_t *repr) {
  function cs_instance_reset (line 104) | static int cs_instance_reset(anjay_t *anjay,
  function cs_list_resources (line 119) | static int cs_list_resources(anjay_t *anjay,
  function cs_resource_execute (line 144) | static int cs_resource_execute(anjay_t *anjay,
  function cs_resource_read (line 176) | static int cs_resource_read(anjay_t *anjay,
  function cs_resource_write (line 204) | static int cs_resource_write(anjay_t *anjay,
  function anjay_dm_object_def_t (line 251) | const anjay_dm_object_def_t **cs_object_create(void) {
  function cs_object_release (line 261) | void cs_object_release(const anjay_dm_object_def_t **def) {

FILE: demo/objects/device.c
  type dev_error_t (line 46) | typedef enum {
  type power_source_type_t (line 58) | typedef enum {
  type dev_repr_t (line 68) | typedef struct {
  function dev_repr_t (line 84) | static inline dev_repr_t *get_dev(const anjay_dm_object_def_t *const *ob...
  function randint_from_range (line 89) | static int32_t randint_from_range(int32_t min_value, int32_t max_value) {
  function get_dc_voltage_mv (line 97) | static int32_t get_dc_voltage_mv(void) {
  function get_dc_current_ma (line 101) | static int32_t get_dc_current_ma(void) {
  function dev_resources (line 105) | static int dev_resources(anjay_t *anjay,
  function dev_read (line 160) | static int dev_read(anjay_t *anjay,
  function read_string (line 235) | static int
  function dev_write (line 258) | static int dev_write(anjay_t *anjay,
  function dev_instance_reset_impl (line 296) | static void dev_instance_reset_impl(dev_repr_t *dev) {
  function dev_instance_reset (line 302) | static int dev_instance_reset(anjay_t *anjay,
  function perform_reboot (line 312) | static void perform_reboot(avs_sched_t *sched, const void *unused) {
  function dev_execute (line 333) | static int dev_execute(anjay_t *anjay,
  function dev_resource_instances (line 358) | static int dev_resource_instances(anjay_t *anjay,
  function dev_transaction_begin (line 382) | static int dev_transaction_begin(anjay_t *anjay,
  function dev_transaction_rollback (line 392) | static int
  function extract_device_info (line 420) | static void extract_device_info(const char *endpoint_name,
  function anjay_dm_object_def_t (line 464) | const anjay_dm_object_def_t **device_object_create(const char *endpoint_...
  function device_object_release (line 481) | void device_object_release(const anjay_dm_object_def_t **def) {
  function device_notify_time_dependent (line 487) | void device_notify_time_dependent(anjay_t *anjay,

FILE: demo/objects/download_diagnostics.c
  type download_diag_res_t (line 18) | typedef enum {
  type download_diag_state_t (line 31) | typedef enum {
  type download_diag_stats_t (line 38) | typedef struct {
  type download_diag_repr_t (line 44) | typedef struct {
  function download_diag_repr_t (line 52) | static download_diag_repr_t *
  function set_state (line 58) | static void set_state(anjay_t *anjay,
  function reset_diagnostic (line 69) | static void reset_diagnostic(download_diag_repr_t *repr) {
  function update_times (line 73) | static void update_times(download_diag_repr_t *repr) {
  function avs_error_t (line 81) | static avs_error_t dl_block_callback(anjay_t *anjay,
  function dl_finish_callback (line 95) | static void dl_finish_callback(anjay_t *anjay,
  function diag_download_run (line 107) | static int diag_download_run(anjay_t *anjay, download_diag_repr_t *repr) {
  function diag_resource_execute (line 131) | static int diag_resource_execute(anjay_t *anjay,
  function read_stats_resource (line 144) | static int read_stats_resource(anjay_rid_t rid,
  function diag_list_resources (line 175) | static int diag_list_resources(anjay_t *anjay,
  function diag_resource_read (line 203) | static int diag_resource_read(anjay_t *anjay,
  function diag_resource_write (line 231) | static int diag_resource_write(anjay_t *anjay,
  function anjay_dm_object_def_t (line 281) | const anjay_dm_object_def_t **download_diagnostics_object_create(void) {
  function download_diagnostics_object_release (line 292) | void download_diagnostics_object_release(const anjay_dm_object_def_t **d...

FILE: demo/objects/event_log.c
  type event_log_t (line 86) | typedef struct event_log_struct {
  function event_log_t (line 98) | static inline event_log_t *
  function instance_reset (line 104) | static int instance_reset(anjay_t *anjay,
  function list_resources (line 122) | static int list_resources(anjay_t *anjay,
  function resource_read (line 138) | static int resource_read(anjay_t *anjay,
  function resource_write (line 171) | static int resource_write(anjay_t *anjay,
  function get_next_argument_value (line 217) | static int get_next_argument_value(anjay_execute_ctx_t *arg_ctx,
  type disable_log_arg_t (line 245) | typedef struct {
  function disable_log (line 249) | static void disable_log(avs_sched_t *sched, const void *arg_) {
  function parse_logstart_arguments (line 255) | static int parse_logstart_arguments(anjay_execute_ctx_t *arg_ctx,
  function parse_logstop_arguments (line 293) | static int parse_logstop_arguments(anjay_execute_ctx_t *arg_ctx,
  function resource_execute (line 321) | static int resource_execute(anjay_t *anjay,
  function anjay_dm_object_def_t (line 401) | const anjay_dm_object_def_t **event_log_object_create(void) {
  function event_log_object_release (line 411) | void event_log_object_release(const anjay_dm_object_def_t **def) {
  function event_log_write_data (line 418) | int event_log_write_data(anjay_t *anjay,

FILE: demo/objects/ext_dev_info.c
  type extdev_repr_t (line 35) | typedef struct {
  function extdev_repr_t (line 40) | static inline extdev_repr_t *
  function generate_fake_rssi_value (line 46) | static int generate_fake_rssi_value(void) {
  function dev_resources (line 50) | static int dev_resources(anjay_t *anjay,
  function dev_read (line 93) | static int dev_read(anjay_t *anjay,
  function anjay_dm_object_def_t (line 160) | const anjay_dm_object_def_t **ext_dev_info_object_create(void) {
  function ext_dev_info_object_release (line 173) | void ext_dev_info_object_release(const anjay_dm_object_def_t **def) {
  function ext_dev_info_notify_time_dependent (line 179) | void ext_dev_info_notify_time_dependent(anjay_t *anjay,

FILE: demo/objects/gateway_end_devices/binary_app_data_container.c
  type data_resource_instance_t (line 69) | typedef struct {
  type binary_app_data_container_instance_t (line 75) | typedef struct binary_app_data_container_instance_struct {
  type binary_app_data_container_t (line 80) | typedef struct binary_app_data_container_struct {
  function binary_app_data_container_t (line 87) | static inline binary_app_data_container_t *
  function binary_app_data_container_instance_t (line 93) | static binary_app_data_container_instance_t *
  function list_instances (line 107) | static int list_instances(anjay_t *anjay,
  function init_instance (line 120) | static int init_instance(binary_app_data_container_instance_t *inst,
  function release_instance (line 128) | static void release_instance(binary_app_data_container_instance_t *inst) {
  function binary_app_data_container_instance_t (line 132) | static binary_app_data_container_instance_t *
  function instance_create (line 159) | static int instance_create(anjay_t *anjay,
  function instance_remove (line 168) | static int instance_remove(anjay_t *anjay,
  function instance_reset (line 189) | static int instance_reset(anjay_t *anjay,
  function list_resources (line 202) | static int list_resources(anjay_t *anjay,
  function resource_read (line 214) | static int resource_read(anjay_t *anjay,
  function resource_write (line 267) | static int resource_write(anjay_t *anjay,
  function resource_reset (line 318) | static int resource_reset(anjay_t *anjay,
  function resource_instance_remove (line 339) | static int resource_instance_remove(anjay_t *anjay,
  function list_resource_instances (line 372) | static int list_resource_instances(anjay_t *anjay,
  function transaction_begin (line 398) | static int transaction_begin(anjay_t *anjay,
  function transaction_commit (line 441) | static int transaction_commit(anjay_t *anjay,
  function transaction_rollback (line 451) | static int transaction_rollback(anjay_t *anjay,
  function anjay_dm_object_def_t (line 488) | const anjay_dm_object_def_t **
  function gw_binary_app_data_container_object_release (line 506) | void gw_binary_app_data_container_object_release(
  function gw_binary_app_data_container_write (line 518) | int gw_binary_app_data_container_write(anjay_t *anjay,

FILE: demo/objects/gateway_end_devices/push_button_object.c
  type push_button_instance_t (line 41) | typedef struct push_button_instance_struct {
  type push_button_object_t (line 48) | typedef struct push_button_object_struct {
  function push_button_object_t (line 54) | static inline push_button_object_t *
  function list_instances (line 60) | static int list_instances(anjay_t *anjay,
  function instance_reset (line 73) | static int instance_reset(anjay_t *anjay,
  function list_resources (line 89) | static int list_resources(anjay_t *anjay,
  function resource_read (line 106) | static int resource_read(anjay_t *anjay,
  function resource_write (line 136) | static int resource_write(anjay_t *anjay,
  function transaction_begin (line 160) | static int transaction_begin(anjay_t *anjay,
  function transaction_rollback (line 171) | static int transaction_rollback(anjay_t *anjay,
  function anjay_dm_object_def_t (line 197) | const anjay_dm_object_def_t **push_button_object_create(anjay_iid_t id) {
  function push_button_object_release (line 213) | void push_button_object_release(const anjay_dm_object_def_t **def) {
  function push_button_press (line 220) | void push_button_press(anjay_t *anjay, const anjay_dm_object_def_t **def) {
  function push_button_release (line 232) | void push_button_release(anjay_t *anjay, const anjay_dm_object_def_t **d...

FILE: demo/objects/gateway_end_devices/temperature_object.c
  type temperature_instance_t (line 56) | typedef struct temperature_instance_struct {
  type temperature_object_t (line 66) | typedef struct temperature_object_struct {
  function temperature_object_t (line 72) | static inline temperature_object_t *
  function temperature_instance_t (line 78) | static temperature_instance_t *find_instance(const temperature_object_t ...
  function list_instances (line 92) | static int list_instances(anjay_t *anjay,
  function init_instance (line 105) | static int init_instance(temperature_instance_t *inst, anjay_iid_t iid) {
  function release_instance (line 112) | static void release_instance(temperature_instance_t *inst) {
  function temperature_instance_t (line 116) | static temperature_instance_t *add_instance(temperature_object_t *obj,
  function instance_create (line 143) | static int instance_create(anjay_t *anjay,
  function instance_remove (line 152) | static int instance_remove(anjay_t *anjay,
  function instance_reset (line 173) | static int instance_reset(anjay_t *anjay,
  function list_resources (line 186) | static int list_resources(anjay_t *anjay,
  function resource_read (line 207) | static int resource_read(anjay_t *anjay,
  function resource_write (line 241) | static int resource_write(anjay_t *anjay,
  function resource_execute (line 265) | static int resource_execute(anjay_t *anjay,
  function transaction_begin (line 288) | static int transaction_begin(anjay_t *anjay,
  function transaction_rollback (line 301) | static int transaction_rollback(anjay_t *anjay,
  function anjay_dm_object_def_t (line 335) | const anjay_dm_object_def_t **temperature_object_create(anjay_iid_t id) {
  function temperature_object_release (line 351) | void temperature_object_release(const anjay_dm_object_def_t **def) {
  function temperature_object_update_value (line 361) | void temperature_object_update_value(anjay_t *anjay,

FILE: demo/objects/geopoints.c
  type geopoint_t (line 25) | typedef struct {
  type geopoints_t (line 39) | typedef struct {
  function geopoints_t (line 46) | static inline geopoints_t *
  function geopoint_t (line 52) | static geopoint_t *find_instance(const geopoints_t *repr, anjay_iid_t ii...
  function geopoints_list_instances (line 65) | static int geopoints_list_instances(anjay_t *anjay,
  function geopoints_instance_create (line 77) | static int
  function geopoints_instance_remove (line 102) | static int
  function geopoints_list_resources (line 121) | static int geopoints_list_resources(anjay_t *anjay,
  function geopoints_resource_read (line 142) | static int geopoints_resource_read(anjay_t *anjay,
  function geopoints_resource_write (line 172) | static int geopoints_resource_write(anjay_t *anjay,
  function geopoints_transaction_begin (line 236) | static int
  function geopoints_transaction_validate (line 252) | static int
  function geopoints_transaction_commit (line 265) | static int
  function geopoints_transaction_rollback (line 273) | static int
  function geopoints_instance_reset (line 284) | static int geopoints_instance_reset(anjay_t *anjay,
  function anjay_dm_object_def_t (line 312) | const anjay_dm_object_def_t **geopoints_object_create(anjay_demo_t *demo) {
  function geopoints_object_release (line 324) | void geopoints_object_release(const anjay_dm_object_def_t **def) {
  function geopoints_get_instances (line 333) | int geopoints_get_instances(const anjay_dm_object_def_t **def,
  function geopoints_notify_time_dependent (line 349) | void geopoints_notify_time_dependent(anjay_t *anjay,

FILE: demo/objects/ip_ping.c
  type ip_ping_state_t (line 40) | typedef enum {
  type ip_ping_conf_t (line 49) | typedef struct {
  type ip_ping_stats_t (line 57) | typedef struct {
  type ip_ping_command_state_t (line 67) | typedef struct {
  type ip_ping_t (line 72) | typedef struct {
  function ip_ping_t (line 80) | static inline ip_ping_t *
  function ip_ping_list_resources (line 86) | static int ip_ping_list_resources(anjay_t *anjay,
  function ip_ping_resource_read (line 120) | static int ip_ping_resource_read(anjay_t *anjay,
  function ip_ping_reset_diagnostic_state (line 165) | static int ip_ping_reset_diagnostic_state(anjay_t *anjay, ip_ping_t *ipp...
  function ip_ping_resource_write (line 200) | static int ip_ping_resource_write(anjay_t *anjay,
  function update_response_times (line 246) | static void update_response_times(ip_ping_t *ping,
  function ip_ping_command_state_cleanup (line 265) | static void ip_ping_command_state_cleanup(ip_ping_t *ping) {
  type ip_ping_handler_state_t (line 276) | typedef enum {
  function ip_ping_state_t (line 351) | static ip_ping_state_t start_ip_ping(anjay_t *anjay, ip_ping_t *ping) {
  function ip_ping_resource_execute (line 392) | static int ip_ping_resource_execute(anjay_t *anjay,
  function ip_ping_transaction_begin (line 414) | static int
  function ip_ping_transaction_rollback (line 423) | static int
  function anjay_dm_object_def_t (line 447) | const anjay_dm_object_def_t **ip_ping_object_create(void) {
  function ip_ping_object_release (line 458) | void ip_ping_object_release(const anjay_dm_object_def_t **def) {

FILE: demo/objects/ipso_objects.c
  type thermometer_t (line 25) | typedef struct {
  function get_temperature (line 30) | static double get_temperature(thermometer_t *thermometer) {
  function install_temperature_object (line 36) | int install_temperature_object(anjay_t *anjay) {
  function temperature_update_handler (line 51) | void temperature_update_handler(anjay_t *anjay) {
  function temperature_add_instance (line 59) | void temperature_add_instance(anjay_t *anjay, anjay_iid_t iid) {
  function temperature_remove_instance (line 73) | void temperature_remove_instance(anjay_t *anjay, anjay_iid_t iid) {
  function anjay_ipso_v2_3d_sensor_value_t (line 85) | static anjay_ipso_v2_3d_sensor_value_t get_accelerometer_value(void) {
  function install_accelerometer_object (line 103) | int install_accelerometer_object(anjay_t *anjay) {
  function accelerometer_update_handler (line 131) | void accelerometer_update_handler(anjay_t *anjay) {
  function accelerometer_add_instance (line 137) | void accelerometer_add_instance(anjay_t *anjay, anjay_iid_t iid) {
  function accelerometer_remove_instance (line 153) | void accelerometer_remove_instance(anjay_t *anjay, anjay_iid_t iid) {
  function install_push_button_object (line 160) | int install_push_button_object(anjay_t *anjay) {

FILE: demo/objects/location.c
  type velocity_t (line 32) | typedef struct {
  type location_t (line 37) | typedef struct {
  function location_t (line 48) | static inline location_t *
  function ret_velocity (line 54) | static int ret_velocity(anjay_output_ctx_t *ctx, const velocity_t *veloc...
  function location_list_resources (line 78) | static int location_list_resources(anjay_t *anjay,
  function location_resource_read (line 101) | static int location_resource_read(anjay_t *anjay,
  function normalize_angle (line 133) | static void normalize_angle(double *value) {
  function normalize_location (line 137) | static void normalize_location(location_t *location) {
  function get_meters_per_degree (line 167) | static void get_meters_per_degree(double *out_m_per_deg_lat,
  function rand_double (line 181) | static double rand_double(unsigned *seed, double min, double max) {
  function calculate_velocity (line 185) | static void calculate_velocity(velocity_t *out,
  function update_location_random (line 205) | static int update_location_random(location_t *location) {
  function try_parse_location_line (line 226) | static int
  function update_location_csv (line 267) | static int update_location_csv(location_t *location) {
  function update_location (line 296) | static bool update_location(location_t *location) {
  function anjay_dm_object_def_t (line 313) | const anjay_dm_object_def_t **location_object_create(void) {
  function location_object_release (line 330) | void location_object_release(const anjay_dm_object_def_t **def) {
  function location_notify_time_dependent (line 336) | void location_notify_time_dependent(anjay_t *anjay,
  function location_get (line 354) | void location_get(const anjay_dm_object_def_t **def,
  function location_open_csv (line 362) | int location_open_csv(const anjay_dm_object_def_t **def,

FILE: demo/objects/portfolio.c
  type portfolio_identity_type_t (line 76) | typedef enum {
  type portfolio_instance_t (line 86) | typedef struct portfolio_instance_struct {
  type portfolio_t (line 93) | typedef struct portfolio_struct {
  function portfolio_t (line 99) | static inline portfolio_t *
  function portfolio_instance_t (line 105) | static portfolio_instance_t *find_instance(const portfolio_t *obj,
  function list_instances (line 119) | static int list_instances(anjay_t *anjay,
  function instance_create (line 131) | static int instance_create(anjay_t *anjay,
  function instance_remove (line 156) | static int instance_remove(anjay_t *anjay,
  function instance_reset (line 176) | static int instance_reset(anjay_t *anjay,
  function list_resources (line 189) | static int list_resources(anjay_t *anjay,
  function resource_read (line 201) | static int resource_read(anjay_t *anjay,
  function resource_write (line 224) | static int resource_write(anjay_t *anjay,
  function resource_reset (line 256) | static int resource_reset(anjay_t *anjay,
  function resource_instance_remove (line 273) | static int resource_instance_remove(anjay_t *anjay,
  function list_resource_instances (line 293) | static int list_resource_instances(anjay_t *anjay,
  function transaction_begin (line 320) | static int transaction_begin(anjay_t *anjay,
  function transaction_commit (line 332) | static int transaction_commit(anjay_t *anjay,
  function transaction_rollback (line 340) | static int transaction_rollback(anjay_t *anjay,
  function anjay_dm_object_def_t (line 375) | const anjay_dm_object_def_t **portfolio_object_create(void) {
  function portfolio_object_release (line 384) | void portfolio_object_release(const anjay_dm_object_def_t **def) {
  function portfolio_get_instances (line 392) | int portfolio_get_instances(const anjay_dm_object_def_t **def,

FILE: demo/objects/test.c
  type test_int_array_entry_t (line 48) | typedef struct test_int_array_entry_struct {
  type test_bool_array_entry_t (line 53) | typedef struct test_bool_array_entry_struct {
  type test_exec_arg_t (line 58) | typedef struct {
  type test_instance_t (line 63) | typedef struct test_instance_struct {
  type test_repr_t (line 91) | typedef struct {
  function test_repr_t (line 96) | static inline test_repr_t *
  function test_instance_t (line 102) | static test_instance_t *find_instance(const test_repr_t *repr,
  function test_list_instances (line 114) | static int test_list_instances(anjay_t *anjay,
  function test_instance_create (line 127) | static int test_instance_create(anjay_t *anjay,
  function release_instance (line 155) | static void release_instance(test_instance_t *inst) {
  function test_instance_remove (line 165) | static int test_instance_remove(anjay_t *anjay,
  function test_instance_reset (line 184) | static int test_instance_reset(anjay_t *anjay,
  function test_list_resources (line 195) | static int test_list_resources(anjay_t *anjay,
  function test_resource_read (line 253) | static int test_resource_read(anjay_t *anjay,
  function test_resource_write_to_int_array (line 402) | static int
  function test_resource_write_to_bool_array (line 442) | static int
  function test_resource_write (line 482) | static int test_resource_write(anjay_t *anjay,
  function read_exec_arg_value (line 571) | static int read_exec_arg_value(anjay_execute_ctx_t *arg_ctx,
  function read_exec_arg (line 615) | static int read_exec_arg(anjay_execute_ctx_t *arg_ctx,
  function read_exec_args (line 651) | static int read_exec_args(anjay_execute_ctx_t *arg_ctx,
  function init_int_array_read_element (line 675) | static int init_int_array_read_element(test_int_array_entry_t *out_entry,
  function init_bool_array_read_element (line 705) | static int init_bool_array_read_element(test_bool_array_entry_t *out_entry,
  function init_int_array (line 735) | static int init_int_array(AVS_LIST(test_int_array_entry_t) *out_array,
  function init_bool_array (line 768) | static int init_bool_array(AVS_LIST(test_bool_array_entry_t) *out_array,
  function test_resource_execute (line 801) | static int test_resource_execute(anjay_t *anjay,
  function test_resource_reset (line 862) | static int test_resource_reset(anjay_t *anjay,
  function test_resource_instance_remove (line 889) | static int
  function test_list_resource_instances (line 933) | static int
  function anjay_dm_object_def_t (line 999) | const anjay_dm_object_def_t **test_object_create(void) {
  function test_object_release (line 1009) | void test_object_release(const anjay_dm_object_def_t **def) {
  function test_get_instances (line 1019) | int test_get_instances(const anjay_dm_object_def_t **def,
  function test_notify_time_dependent (line 1035) | void test_notify_time_dependent(anjay_t *anjay,

FILE: demo/software_mgmt.c
  function sw_mgmt_set_package_path (line 45) | void sw_mgmt_set_package_path(sw_mgmt_logic_t *sw_mgmt, const char *path) {
  function maybe_create_software_file (line 64) | static int maybe_create_software_file(sw_mgmt_logic_t *sw_mgmt) {
  function maybe_delete_software_file (line 81) | static void maybe_delete_software_file(sw_mgmt_logic_t *sw_mgmt) {
  function fix_sw_meta_endianness (line 90) | static void fix_sw_meta_endianness(sw_metadata_t *meta) {
  function read_sw_meta_from_file (line 96) | static int read_sw_meta_from_file(FILE *f, sw_metadata_t *out_metadata) {
  function unpack_sw_to_file (line 124) | static int unpack_sw_to_file(const char *sw_pkg_path,
  function unpack_software_in_place (line 166) | static int unpack_software_in_place(sw_mgmt_logic_t *sw_mgmt) {
  function sw_magic_valid (line 200) | static bool sw_magic_valid(const sw_metadata_t *meta) {
  function sw_header_version_valid (line 209) | static bool sw_header_version_valid(const sw_metadata_t *meta) {
  function sw_version_supported (line 218) | static bool sw_version_supported(const sw_metadata_t *meta) {
  function validate_software (line 227) | static int validate_software(sw_mgmt_logic_t *sw_mgmt) {
  function sw_mgmt_destroy_inst (line 251) | static void sw_mgmt_destroy_inst(sw_mgmt_logic_t *sw_mgmt) {
  function sw_mgmt_update_destroy (line 259) | void sw_mgmt_update_destroy(sw_mgmt_logic_t *sw_mgmt_table) {
  type persistence_file_data_t (line 267) | typedef struct {
  function is_valid_result (line 276) | static bool is_valid_result(uint8_t result) {
  function write_persistence_file (line 290) | static int write_persistence_file(const char *path,
  function read_persistence_file (line 321) | static int read_persistence_file(const char *path,
  function delete_persistence_file (line 374) | static void delete_persistence_file(const sw_mgmt_common_logic_t *sw) {
  function update_persistence_file (line 386) | static int update_persistence_file(const char *path,
  function update_persisted_instance_existence (line 419) | static int update_persisted_instance_existence(const char *path,
  function sw_mgmt_stream_open (line 443) | static int sw_mgmt_stream_open(void *obj_ctx, anjay_iid_t iid, void *ins...
  function sw_mgmt_stream_write (line 461) | static int sw_mgmt_stream_write(void *obj_ctx,
  function sw_mgmt_stream_finish (line 488) | static int
  function sw_mgmt_check_integrity (line 512) | static int
  function sw_mgmt_reset (line 534) | static void sw_mgmt_reset(void *obj_ctx, anjay_iid_t iid, void *inst_ctx) {
  function sw_mgmt_pkg_install (line 566) | static int sw_mgmt_pkg_install(void *obj_ctx, anjay_iid_t iid, void *ins...
  function sw_mgmt_pkg_uninstall (line 640) | static int
  function sw_mgmt_prepare_for_update (line 656) | static int
  function sw_mgmt_activate (line 672) | static int sw_mgmt_activate(void *obj_ctx, anjay_iid_t iid, void *inst_c...
  function sw_mgmt_deactivate (line 693) | static int sw_mgmt_deactivate(void *obj_ctx, anjay_iid_t iid, void *inst...
  function sw_mgmt_get_security_config (line 715) | static int
  function avs_time_duration_t (line 730) | static avs_time_duration_t
  function avs_coap_udp_tx_params_t (line 742) | static avs_coap_udp_tx_params_t
  function sw_mgmt_add_handler (line 760) | static int
  function sw_mgmt_remove_handler (line 775) | static int
  type set_delayed_sw_mgmt_update_result_args_t (line 808) | typedef struct {
  function set_delayed_sw_mgmt_update_result (line 813) | static void set_delayed_sw_mgmt_update_result(avs_sched_t *sched,
  function sw_mgmt_install (line 825) | int sw_mgmt_install(anjay_t *anjay,

FILE: demo/software_mgmt.h
  type sw_metadata_t (line 22) | typedef struct software_metadata {
  type sw_mgmt_logic_t (line 31) | typedef struct {
  type sw_mgmt_common_logic_t (line 38) | typedef struct {

FILE: deps/avs_coap/examples/async-client/src/main.c
  function response_handler (line 23) | static void response_handler(avs_coap_ctx_t *ctx,
  function main (line 39) | int main() {

FILE: deps/avs_coap/include_public/avsystem/coap/async_client.h
  type avs_coap_client_async_response_t (line 26) | typedef struct {
  type avs_coap_client_request_state_t (line 43) | typedef enum {

FILE: deps/avs_coap/include_public/avsystem/coap/async_exchange.h
  type avs_coap_exchange_id_t (line 27) | typedef struct {
  function avs_coap_exchange_id_equal (line 37) | static inline bool avs_coap_exchange_id_equal(avs_coap_exchange_id_t a,
  function avs_coap_exchange_id_valid (line 42) | static inline bool avs_coap_exchange_id_valid(avs_coap_exchange_id_t id) {

FILE: deps/avs_coap/include_public/avsystem/coap/async_server.h
  type avs_coap_server_ctx_t (line 40) | typedef struct avs_coap_server_ctx avs_coap_server_ctx_t;
  type avs_coap_request_ctx_t (line 41) | typedef struct avs_coap_request_ctx avs_coap_request_ctx_t;
  type avs_coap_server_async_request_t (line 43) | typedef struct {
  type avs_coap_server_request_state_t (line 60) | typedef enum {

FILE: deps/avs_coap/include_public/avsystem/coap/code.h
  function avs_coap_code_is_error (line 113) | static inline bool avs_coap_code_is_error(uint8_t code) {

FILE: deps/avs_coap/include_public/avsystem/coap/ctx.h
  type avs_coap_stats_t (line 25) | typedef struct {
  type avs_coap_request_header_t (line 37) | typedef struct avs_coap_request_header {
  type avs_coap_response_header_t (line 49) | typedef struct avs_coap_response_header {
  type avs_coap_ctx_t (line 76) | typedef struct avs_coap_ctx avs_coap_ctx_t;
  type avs_coap_error_recovery_action_t (line 187) | typedef enum avs_coap_error_recovery_action {
  type avs_coap_error_class_t (line 208) | typedef enum avs_coap_error_class {
  type avs_coap_error_t (line 250) | typedef enum {
  function avs_coap_error_class_t (line 368) | static inline avs_coap_error_class_t avs_coap_error_class(avs_error_t er...
  function avs_coap_error_recovery_action_t (line 377) | static inline avs_coap_error_recovery_action_t

FILE: deps/avs_coap/include_public/avsystem/coap/observe.h
  type avs_coap_observe_id_t (line 34) | typedef struct {
  type avs_coap_notify_reliability_hint_t (line 38) | typedef enum {
  function avs_error_t (line 152) | static inline avs_error_t

FILE: deps/avs_coap/include_public/avsystem/coap/option.h
  type avs_coap_etag_t (line 115) | typedef struct {
  type avs_coap_option_block_type_t (line 128) | typedef enum {
  type avs_coap_option_block_t (line 140) | typedef struct avs_coap_option_block {
  type avs_coap_options_t (line 155) | typedef struct avs_coap_options {
  function avs_coap_etag_equal (line 173) | static inline bool avs_coap_etag_equal(const avs_coap_etag_t *etag1,
  type avs_coap_etag_hex_t (line 183) | typedef struct {
  function avs_coap_options_t (line 211) | static inline avs_coap_options_t
  function avs_coap_options_cleanup (line 229) | static inline void avs_coap_options_cleanup(avs_coap_options_t *opts) {
  function avs_error_t (line 256) | static inline avs_error_t
  function avs_error_t (line 288) | static inline avs_error_t
  function avs_error_t (line 451) | static inline avs_error_t avs_coap_options_add_u16(avs_coap_options_t *o...
  function avs_error_t (line 457) | static inline avs_error_t avs_coap_options_add_u32(avs_coap_options_t *o...
  type avs_coap_option_iterator_t (line 469) | typedef struct {
  function avs_coap_options_get_bytes (line 585) | static inline int avs_coap_options_get_bytes(const avs_coap_options_t *o...
  function avs_coap_options_get_string (line 642) | static inline int avs_coap_options_get_string(const avs_coap_options_t *...
  function avs_coap_options_get_etag (line 721) | static inline int avs_coap_options_get_etag(const avs_coap_options_t *opts,

FILE: deps/avs_coap/include_public/avsystem/coap/streaming.h
  type avs_coap_streaming_request_ctx_t (line 34) | typedef struct avs_coap_streaming_request_ctx avs_coap_streaming_request...

FILE: deps/avs_coap/include_public/avsystem/coap/token.h
  type avs_coap_token_t (line 30) | typedef struct {
  function avs_coap_token_equal (line 42) | static inline bool avs_coap_token_equal(const avs_coap_token_t *first,
  function avs_coap_token_valid (line 48) | static inline bool avs_coap_token_valid(const avs_coap_token_t *token) {
  type avs_coap_token_hex_t (line 56) | typedef struct {

FILE: deps/avs_coap/include_public/avsystem/coap/udp.h
  type avs_coap_udp_tx_params_t (line 26) | typedef struct {
  type avs_coap_udp_response_cache_t (line 48) | typedef struct avs_coap_udp_response_cache avs_coap_udp_response_cache_t;

FILE: deps/avs_coap/include_public/avsystem/coap/writer.h
  type avs_stream_struct (line 21) | struct avs_stream_struct
  type avs_stream_struct (line 37) | struct avs_stream_struct

FILE: deps/avs_coap/src/async/avs_coap_async_client.c
  type state_with_error (line 35) | struct state_with_error {
  function state_with_error_t (line 40) | static inline state_with_error_t
  function state_with_error_t (line 48) | static inline state_with_error_t failure_state(avs_error_t error) {
  function avs_error_t (line 56) | static avs_error_t client_exchange_send_next_chunk(
  function initial_block2_option_size (line 86) | static inline size_t
  function avs_error_t (line 117) | avs_error_t _avs_coap_client_exchange_send_first_chunk(
  function request_header_valid (line 149) | static inline bool request_header_valid(const avs_coap_request_header_t ...
  function get_response_block_option (line 176) | static int get_response_block_option(const avs_coap_borrowed_msg_t *resp...
  function get_response_payload_offset (line 190) | static size_t
  function get_response_payload_offset (line 202) | static size_t
  function call_exchange_response_handler (line 208) | static void
  function call_partial_response_handler (line 255) | static void
  function cleanup_exchange (line 293) | static void cleanup_exchange(avs_coap_ctx_t *ctx,
  function exchange_expects_continue_response (line 313) | static bool
  function avs_error_t (line 323) | static avs_error_t handle_request_block_size_renegotiation(
  function avs_error_t (line 371) | static avs_error_t update_exchange_for_next_request_block(
  function state_with_error_t (line 419) | static state_with_error_t
  function avs_error_t (line 467) | static avs_error_t update_request_for_next_response_block(
  function etag_matches (line 540) | static bool etag_matches(avs_coap_exchange_t *exchange,
  function state_with_error_t (line 563) | static state_with_error_t
  function avs_error_t (line 673) | static avs_error_t update_exchange_for_next_request_block(
  function state_with_error_t (line 685) | static state_with_error_t
  function avs_error_t (line 701) | static avs_error_t
  function _avs_coap_client_exchange_request_sent (line 728) | bool _avs_coap_client_exchange_request_sent(
  function avs_error_t (line 736) | static avs_error_t
  function state_with_error_t (line 770) | static state_with_error_t
  function state_with_error_t (line 804) | static state_with_error_t
  function state_with_error_t (line 868) | static state_with_error_t
  function avs_coap_send_result_handler_result_t (line 880) | static avs_coap_send_result_handler_result_t
  function client_exchange_create (line 939) | static AVS_LIST(avs_coap_exchange_t) client_exchange_create(
  function avs_error_t (line 1028) | avs_error_t avs_coap_client_send_async_request(
  function _avs_coap_client_exchange_cleanup (line 1076) | void _avs_coap_client_exchange_cleanup(avs_coap_ctx_t *ctx,
  function avs_error_t (line 1098) | avs_error_t avs_coap_client_set_next_response_payload_offset(

FILE: deps/avs_coap/src/async/avs_coap_async_client.h
  type avs_coap_client_exchange_data (line 23) | struct avs_coap_client_exchange_data {
  type avs_coap_exchange (line 54) | struct avs_coap_exchange
  type avs_coap_exchange (line 58) | struct avs_coap_exchange
  type avs_coap_exchange (line 61) | struct avs_coap_exchange
  type avs_coap_exchange (line 65) | struct avs_coap_exchange

FILE: deps/avs_coap/src/async/avs_coap_async_server.c
  function VISIBILITY_SOURCE_BEGIN (line 90) | VISIBILITY_SOURCE_BEGIN
  type server_exchange_create_args_t (line 98) | typedef struct {
  function server_exchange_create (line 119) | static AVS_LIST(avs_coap_exchange_t)
  function is_last_response_block_sent (line 197) | static bool is_last_response_block_sent(const avs_coap_exchange_t *excha...
  function is_exchange_done (line 221) | static bool is_exchange_done(const avs_coap_exchange_t *exchange) {
  function cancel_notification_on_error (line 241) | static void cancel_notification_on_error(avs_coap_ctx_t *ctx,
  function avs_coap_send_result_handler_result_t (line 258) | static avs_coap_send_result_handler_result_t
  function avs_error_t (line 355) | static avs_error_t send_ise(avs_coap_ctx_t *ctx,
  function avs_error_t (line 368) | static avs_error_t server_exchange_send_next_chunk(
  function avs_time_monotonic_t (line 419) | avs_time_monotonic_t
  function AVS_LIST_ITERATE_PTR (line 447) | AVS_LIST_ITERATE_PTR(insert_ptr) {
  function avs_coap_exchange_id_t (line 470) | avs_coap_exchange_id_t avs_coap_server_accept_async_request(
  function _avs_coap_response_header_valid (line 523) | bool _avs_coap_response_header_valid(const avs_coap_response_header_t *r...
  function avs_error_t (line 540) | avs_error_t
  function get_request_block_option (line 621) | static int get_request_block_option(const avs_coap_borrowed_msg_t *request,
  function get_request_payload_offset (line 635) | static size_t
  function get_request_payload_offset (line 646) | static size_t
  function is_request_message_finished (line 652) | static bool
  function is_entire_request_finished (line 658) | static bool is_entire_request_finished(const avs_coap_borrowed_msg_t *re...
  function response_code_from_result (line 673) | static uint8_t response_code_from_result(int result) {
  function avs_error_t (line 696) | static avs_error_t send_empty_response(avs_coap_ctx_t *ctx,
  type observe_value_t (line 706) | typedef enum {
  function observe_value_t (line 713) | static observe_value_t
  function observe_value_t (line 731) | static observe_value_t
  function _avs_coap_async_incoming_packet_call_request_handler (line 758) | int _avs_coap_async_incoming_packet_call_request_handler(
  function matching_request_options (line 806) | static bool matching_request_options(uint16_t opt_number) {
  function request_matches_exchange (line 811) | static bool request_matches_exchange(const avs_coap_borrowed_msg_t *requ...
  function update_exchange_block1_option (line 856) | static void
  function update_exchange_block2_option (line 882) | static void
  function avs_error_t (line 905) | static avs_error_t
  function validate_request_exchange_state (line 916) | static int validate_request_exchange_state(avs_coap_ctx_t *ctx) {
  function avs_error_t (line 937) | static avs_error_t continue_request_exchange(avs_coap_ctx_t *ctx) {
  function cleanup_exchange_by_id (line 957) | static void cleanup_exchange_by_id(avs_coap_ctx_t *ctx,
  function avs_error_t (line 968) | static avs_error_t
  type user_defined_request_handler_t (line 1005) | typedef struct {
  function avs_error_t (line 1010) | static avs_error_t
  function avs_error_t (line 1060) | static avs_error_t handle_request(avs_coap_ctx_t *ctx,
  function avs_error_t (line 1129) | avs_error_t _avs_coap_async_incoming_packet_handle_single(
  function avs_error_t (line 1172) | avs_error_t _avs_coap_async_incoming_packet_send_response(avs_coap_ctx_t...
  function avs_error_t (line 1181) | avs_error_t _avs_coap_async_incoming_packet_simple_handle_single(
  function avs_error_t (line 1200) | avs_error_t _avs_coap_async_incoming_packet_handle_and_exhaust_socket(
  function avs_error_t (line 1240) | avs_error_t avs_coap_async_handle_incoming_packet(
  function _avs_coap_server_exchange_cleanup (line 1259) | void _avs_coap_server_exchange_cleanup(avs_coap_ctx_t *ctx,
  function avs_error_t (line 1308) | avs_error_t
  function avs_error_t (line 1327) | avs_error_t

FILE: deps/avs_coap/src/async/avs_coap_async_server.h
  type avs_coap_server_exchange_data (line 23) | struct avs_coap_server_exchange_data {
  type avs_coap_server_ctx (line 76) | struct avs_coap_server_ctx {
  type avs_coap_request_ctx (line 98) | struct avs_coap_request_ctx {
  type avs_coap_exchange (line 135) | struct avs_coap_exchange
  type avs_coap_exchange (line 138) | struct avs_coap_exchange
  type avs_coap_exchange (line 197) | struct avs_coap_exchange
  type avs_coap_exchange (line 206) | struct avs_coap_exchange
  function avs_error_t (line 267) | static inline avs_error_t _avs_coap_async_incoming_packet_exhaust_socket(

FILE: deps/avs_coap/src/async/avs_coap_exchange.c
  function VISIBILITY_SOURCE_BEGIN (line 31) | VISIBILITY_SOURCE_BEGIN
  function avs_error_t (line 52) | static avs_error_t call_payload_writer(avs_coap_payload_writer_t *write_...
  function avs_error_t (line 88) | static avs_error_t
  function avs_error_t (line 166) | static avs_error_t lower_block_size(avs_coap_exchange_t *exchange,
  function avs_error_t (line 226) | static avs_error_t
  function avs_error_t (line 264) | avs_error_t _avs_coap_exchange_get_next_outgoing_chunk_payload_size(
  function avs_error_t (line 292) | static avs_error_t get_payload_offset(const avs_coap_exchange_t *exchange,
  function avs_error_t (line 310) | static avs_error_t
  function avs_error_t (line 334) | static avs_error_t exchange_update_block_option(avs_coap_exchange_t *exc...
  function avs_error_t (line 366) | avs_error_t _avs_coap_exchange_send_next_chunk(

FILE: deps/avs_coap/src/async/avs_coap_exchange.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 22) | VISIBILITY_PRIVATE_HEADER_BEGIN
  type avs_coap_exchange_t (line 33) | typedef struct avs_coap_exchange {

FILE: deps/avs_coap/src/avs_coap_code_utils.c
  function VISIBILITY_SOURCE_BEGIN (line 22) | VISIBILITY_SOURCE_BEGIN
  function avs_coap_code_get_class (line 93) | uint8_t avs_coap_code_get_class(uint8_t code) {
  function avs_coap_code_get_detail (line 98) | uint8_t avs_coap_code_get_detail(uint8_t code) {
  function avs_coap_code_is_client_error (line 103) | bool avs_coap_code_is_client_error(uint8_t code) {
  function avs_coap_code_is_server_error (line 107) | bool avs_coap_code_is_server_error(uint8_t code) {
  function avs_coap_code_is_success (line 111) | bool avs_coap_code_is_success(uint8_t code) {
  function avs_coap_code_is_request (line 115) | bool avs_coap_code_is_request(uint8_t code) {
  function avs_coap_code_is_response (line 120) | bool avs_coap_code_is_response(uint8_t code) {

FILE: deps/avs_coap/src/avs_coap_code_utils.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 20) | VISIBILITY_PRIVATE_HEADER_BEGIN
  function _avs_coap_code_set_detail (line 32) | static inline void _avs_coap_code_set_detail(uint8_t *code, uint8_t deta...
  function _avs_coap_code_in_range (line 41) | static inline bool _avs_coap_code_in_range(int code) {
  function _avs_coap_code_is_signaling_message (line 49) | static inline bool _avs_coap_code_is_signaling_message(uint8_t code) {

FILE: deps/avs_coap/src/avs_coap_common_utils.c
  function VISIBILITY_SOURCE_BEGIN (line 24) | VISIBILITY_SOURCE_BEGIN
  function _avs_coap_bytes_extract (line 47) | int _avs_coap_bytes_extract(bytes_dispenser_t *dispenser,
  function avs_error_t (line 66) | avs_error_t _avs_coap_parse_token(avs_coap_token_t *out_token,
  function _avs_coap_log_oom__ (line 83) | void _avs_coap_log_oom__(void) {

FILE: deps/avs_coap/src/avs_coap_common_utils.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 15) | VISIBILITY_PRIVATE_HEADER_BEGIN
  type bytes_dispenser_t (line 22) | typedef struct {

FILE: deps/avs_coap/src/avs_coap_ctx.c
  function VISIBILITY_SOURCE_BEGIN (line 27) | VISIBILITY_SOURCE_BEGIN
  function avs_coap_ctx_cleanup (line 47) | void avs_coap_ctx_cleanup(avs_coap_ctx_t **ctx) {
  function avs_error_t (line 76) | avs_error_t _avs_coap_ctx_generate_token(avs_crypto_prng_ctx_t *prng_ctx,
  function avs_coap_exchange_cancel (line 110) | void avs_coap_exchange_cancel(avs_coap_ctx_t *ctx, avs_coap_exchange_id_...
  function retry_or_request_expired_job (line 218) | static void retry_or_request_expired_job(avs_sched_t *sched,
  function _avs_coap_reschedule_retry_or_request_expired_job (line 226) | void _avs_coap_reschedule_retry_or_request_expired_job(
  function avs_time_monotonic_t (line 244) | avs_time_monotonic_t
  function avs_error_t (line 296) | avs_error_t avs_coap_ctx_set_socket(avs_coap_ctx_t *ctx,
  function avs_coap_ctx_has_socket (line 304) | bool avs_coap_ctx_has_socket(avs_coap_ctx_t *ctx) {
  function avs_coap_max_incoming_message_payload (line 308) | size_t avs_coap_max_incoming_message_payload(avs_coap_ctx_t *ctx,
  function avs_time_duration_t (line 320) | avs_time_duration_t avs_coap_get_exchange_max_time(avs_coap_ctx_t *ctx) {
  function avs_coap_set_exchange_max_time (line 325) | void avs_coap_set_exchange_max_time(avs_coap_ctx_t *ctx,
  function avs_error_t (line 332) | static avs_error_t get_payload_chunk_size(avs_coap_ctx_t *ctx,
  function avs_error_t (line 378) | static avs_error_t
  function avs_error_t (line 395) | avs_error_t _avs_coap_get_max_block_size(avs_coap_ctx_t *ctx,
  function _avs_coap_socket_definitely_exhausted (line 416) | bool _avs_coap_socket_definitely_exhausted(avs_coap_ctx_t *ctx) {
  function avs_coap_stats_t (line 424) | avs_coap_stats_t avs_coap_get_stats(avs_coap_ctx_t *ctx) {
  function is_critical_opt_valid (line 431) | static bool
  function avs_coap_options_validate_critical (line 450) | int avs_coap_options_validate_critical(

FILE: deps/avs_coap/src/avs_coap_ctx.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 31) | VISIBILITY_PRIVATE_HEADER_BEGIN
  type avs_coap_ctx_vtable (line 41) | struct avs_coap_ctx_vtable
  type avs_coap_ctx (line 46) | struct avs_coap_ctx {
  type avs_coap_base (line 54) | struct avs_coap_base {
  function avs_coap_base_t (line 110) | static inline avs_coap_base_t *_avs_coap_get_base(avs_coap_ctx_t *ctx) {
  function _avs_coap_in_buffer_release (line 118) | static inline void _avs_coap_in_buffer_release(avs_coap_ctx_t *ctx) {
  function _avs_coap_base_init (line 137) | static inline void _avs_coap_base_init(avs_coap_base_t *base,
  function avs_coap_ctx_t (line 160) | static inline avs_coap_ctx_t *
  function avs_error_t (line 165) | static inline avs_error_t
  function avs_coap_exchange_id_t (line 176) | static inline avs_coap_exchange_id_t
  type avs_coap_exchange (line 184) | struct avs_coap_exchange
  type avs_coap_exchange (line 185) | struct avs_coap_exchange
  type avs_coap_exchange (line 188) | struct avs_coap_exchange
  type avs_coap_exchange (line 189) | struct avs_coap_exchange
  type avs_coap_exchange (line 192) | struct avs_coap_exchange
  type avs_coap_exchange (line 199) | struct avs_coap_exchange
  function _avs_coap_find_client_exchange_by_id (line 206) | static inline AVS_LIST(struct avs_coap_exchange)
  function _avs_coap_find_server_exchange_by_id (line 217) | static inline AVS_LIST(struct avs_coap_exchange)
  function _avs_coap_is_observe (line 229) | static inline bool _avs_coap_is_observe(avs_coap_ctx_t *ctx,
  function _avs_coap_find_exchange_by_id (line 241) | static inline AVS_LIST(struct avs_coap_exchange)
  function avs_error_t (line 326) | static inline avs_error_t _avs_coap_get_first_outgoing_chunk_payload_size(

FILE: deps/avs_coap/src/avs_coap_ctx_vtable.h
  type avs_coap_base (line 22) | struct avs_coap_base
  type avs_coap_borrowed_msg_t (line 30) | typedef struct {
  type avs_coap_send_result_t (line 59) | typedef enum {
  type avs_coap_send_result_handler_result_t (line 66) | typedef enum {
  type avs_coap_send_result_handler_result_t (line 106) | typedef avs_coap_send_result_handler_result_t
  type avs_coap_base_t (line 145) | typedef avs_coap_base_t *avs_coap_get_base_t(avs_coap_ctx_t *ctx);
  type avs_error_t (line 188) | typedef avs_error_t
  type avs_coap_exchange_direction_t (line 194) | typedef enum {
  type avs_error_t (line 251) | typedef avs_error_t
  type avs_error_t (line 263) | typedef avs_error_t
  type avs_time_monotonic_t (line 283) | typedef avs_time_monotonic_t avs_coap_on_timeout_t(avs_coap_ctx_t *ctx);
  type avs_coap_stats_t (line 289) | typedef avs_coap_stats_t avs_coap_get_stats_t(avs_coap_ctx_t *ctx);
  type avs_error_t (line 302) | typedef avs_error_t avs_coap_setsock_t(avs_coap_ctx_t *ctx,
  type avs_coap_ctx_vtable_t (line 314) | typedef struct avs_coap_ctx_vtable {

FILE: deps/avs_coap/src/avs_coap_observe.c
  function VISIBILITY_SOURCE_BEGIN (line 27) | VISIBILITY_SOURCE_BEGIN
  function avs_error_t (line 74) | avs_error_t
  function avs_coap_observe_t (line 108) | static avs_coap_observe_t *find_observe_by_id(avs_coap_ctx_t *ctx,
  function avs_error_t (line 114) | avs_error_t
  function avs_error_t (line 135) | avs_error_t avs_coap_observe_cancel(avs_coap_ctx_t *ctx,
  function avs_error_t (line 161) | static avs_error_t
  function avs_error_t (line 185) | avs_error_t avs_coap_observe_persist(avs_coap_ctx_t *ctx,
  function avs_error_t (line 216) | avs_error_t avs_coap_observe_restore_with_id(

FILE: deps/avs_coap/src/avs_coap_observe.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 15) | VISIBILITY_PRIVATE_HEADER_BEGIN
  function _avs_coap_observe_initial_option_value (line 40) | static inline uint32_t _avs_coap_observe_initial_option_value(void) {
  type avs_coap_observe_notify_t (line 46) | typedef struct {

FILE: deps/avs_coap/src/avs_coap_parse_utils.h
  function extract_u16 (line 26) | static inline uint16_t extract_u16(const uint8_t *data) {

FILE: deps/avs_coap/src/options/avs_coap_iterator.c
  function VISIBILITY_SOURCE_BEGIN (line 22) | VISIBILITY_SOURCE_BEGIN
  function avs_coap_option_iterator_t (line 34) | avs_coap_option_iterator_t *
  function optit_offset (line 44) | static size_t optit_offset(const avs_coap_option_iterator_t *optit) {
  function move_option_back (line 59) | static size_t move_option_back(avs_coap_option_iterator_t *dst,
  function avs_coap_option_iterator_t (line 99) | avs_coap_option_iterator_t *
  function _avs_coap_optit_end (line 207) | bool _avs_coap_optit_end(const avs_coap_option_iterator_t *optit) {
  function _avs_coap_optit_number (line 212) | uint32_t _avs_coap_optit_number(const avs_coap_option_iterator_t *optit) {

FILE: deps/avs_coap/src/options/avs_coap_iterator.h
  function avs_coap_option_t (line 63) | static inline avs_coap_option_t *

FILE: deps/avs_coap/src/options/avs_coap_option.c
  function VISIBILITY_SOURCE_BEGIN (line 26) | VISIBILITY_SOURCE_BEGIN
  function decode_ext_value (line 41) | static inline uint32_t decode_ext_value(uint8_t base_value,
  function ext_value_overflows (line 56) | static inline bool ext_value_overflows(uint8_t base_value,
  function _avs_coap_option_u16_value (line 76) | int _avs_coap_option_u16_value(const avs_coap_option_t *opt,
  function _avs_coap_option_u32_value (line 91) | int _avs_coap_option_u32_value(const avs_coap_option_t *opt,
  function _avs_coap_option_string_value (line 106) | int _avs_coap_option_string_value(const avs_coap_option_t *opt,
  function _avs_coap_option_block_seq_number (line 120) | int _avs_coap_option_block_seq_number(const avs_coap_option_t *opt,
  function _avs_coap_option_block_has_more (line 131) | int _avs_coap_option_block_has_more(const avs_coap_option_t *opt,
  function _avs_coap_option_block_size (line 142) | int _avs_coap_option_block_size(const avs_coap_option_t *opt,
  function _avs_coap_option_delta (line 168) | uint32_t _avs_coap_option_delta(const avs_coap_option_t *opt) {
  function _avs_coap_option_content_length (line 175) | uint32_t _avs_coap_option_content_length(const avs_coap_option_t *opt) {
  function is_delta_valid (line 182) | static inline bool is_delta_valid(const avs_coap_option_t *opt,
  function is_length_valid (line 194) | static inline bool is_length_valid(const avs_coap_option_t *opt,
  function _avs_coap_option_is_valid (line 208) | bool _avs_coap_option_is_valid(const avs_coap_option_t *opt,
  function _avs_coap_option_sizeof (line 220) | size_t _avs_coap_option_sizeof(const avs_coap_option_t *opt) {
  function encode_ext_value (line 228) | static inline size_t encode_ext_value(uint8_t *ptr, uint16_t ext_value) {
  function opt_write_header (line 242) | static inline size_t
  function memory_regions_overlap (line 270) | static inline bool memory_regions_overlap(const void *a,
  function _avs_coap_option_serialize (line 287) | size_t _avs_coap_option_serialize(uint8_t *buffer,
  function _avs_coap_get_opt_header_size (line 323) | size_t _avs_coap_get_opt_header_size(size_t opt_number_delta,

FILE: deps/avs_coap/src/options/avs_coap_option.h
  function _avs_coap_option_num_from_block_type (line 63) | static inline uint16_t
  function _avs_coap_is_valid_block_size (line 72) | static inline bool _avs_coap_is_valid_block_size(uint16_t size) {
  type avs_coap_option_t (line 87) | typedef struct avs_coap_option {
  function _avs_coap_option_get_short_delta (line 262) | static inline uint8_t
  function _avs_coap_option_set_short_delta (line 269) | static inline void _avs_coap_option_set_short_delta(avs_coap_option_t *opt,
  function _avs_coap_option_get_short_length (line 276) | static inline uint8_t
  function _avs_coap_option_set_short_length (line 283) | static inline void _avs_coap_option_set_short_length(avs_coap_option_t *...
  type avs_coap_option_block_string_buf_t (line 293) | typedef struct {

FILE: deps/avs_coap/src/options/avs_coap_options.c
  function fill_block_data (line 33) | static int fill_block_data(const avs_coap_option_t *block_opt,
  function is_block_option_content_valid (line 56) | static bool is_block_option_content_valid(const avs_coap_option_t *block...
  function avs_error_t (line 66) | static avs_error_t
  function avs_error_t (line 81) | avs_error_t
  function _avs_coap_options_valid_until_payload_marker (line 106) | bool _avs_coap_options_valid_until_payload_marker(
  function _avs_coap_options_valid (line 226) | bool _avs_coap_options_valid(const avs_coap_options_t *opts) {
  function avs_coap_options_remove_by_number (line 244) | void avs_coap_options_remove_by_number(avs_coap_options_t *opts,
  function avs_error_t (line 259) | avs_error_t avs_coap_options_set_content_format(avs_coap_options_t *opts,
  function avs_error_t (line 271) | avs_error_t avs_coap_options_add_etag(avs_coap_options_t *opts,
  function avs_error_t (line 284) | static avs_error_t encode_block_size(uint16_t size,
  function avs_error_t (line 319) | static avs_error_t add_block_opt(avs_coap_options_t *opts,
  function avs_error_t (line 358) | avs_error_t avs_coap_options_add_block(avs_coap_options_t *opts,
  function avs_error_t (line 370) | avs_error_t avs_coap_options_add_observe(avs_coap_options_t *opts,
  function avs_coap_options_get_observe (line 376) | int avs_coap_options_get_observe(const avs_coap_options_t *opts,
  function bytes_gained_by_reducing_delta (line 391) | static size_t bytes_gained_by_reducing_delta(const avs_coap_option_t *opt,
  function new_option_fits (line 412) | static bool new_option_fits(const avs_coap_option_iterator_t *insert_it,
  function update_option_delta_in_place (line 436) | static void update_option_delta_in_place(const avs_coap_option_iterator_...
  function avs_error_t (line 472) | static avs_error_t grow_if_required(avs_coap_options_t *opts,
  function avs_error_t (line 495) | avs_error_t avs_coap_options_add_opaque(avs_coap_options_t *opts,
  function avs_error_t (line 591) | avs_error_t avs_coap_options_add_string(avs_coap_options_t *opts,
  function avs_error_t (line 603) | avs_error_t avs_coap_options_add_string_fv(avs_coap_options_t *opts,
  function avs_error_t (line 636) | avs_error_t avs_coap_options_add_string_f(avs_coap_options_t *opts,
  function avs_error_t (line 648) | avs_error_t avs_coap_options_add_empty(avs_coap_options_t *opts,
  function avs_error_t (line 653) | avs_error_t avs_coap_options_add_uint(avs_coap_options_t *opts,
  function avs_coap_option_t (line 675) | const avs_coap_option_t *
  function avs_coap_options_get_content_format (line 695) | int avs_coap_options_get_content_format(const avs_coap_options_t *opts,
  function avs_coap_options_get_block (line 710) | int avs_coap_options_get_block(const avs_coap_options_t *opts,
  function avs_coap_options_get_u16 (line 727) | int avs_coap_options_get_u16(const avs_coap_options_t *opts,
  function avs_coap_options_get_u32 (line 740) | int avs_coap_options_get_u32(const avs_coap_options_t *opts,
  function get_option_it (line 753) | static int get_option_it(const avs_coap_options_t *opts,
  function fetch_bytes (line 786) | static int fetch_bytes(const avs_coap_option_t *opt,
  function avs_coap_options_skip_it (line 801) | int avs_coap_options_skip_it(avs_coap_option_iterator_t *inout_it) {
  function avs_coap_options_get_bytes_it (line 809) | int avs_coap_options_get_bytes_it(const avs_coap_options_t *opts,
  function avs_coap_options_get_etag_it (line 819) | int avs_coap_options_get_etag_it(const avs_coap_options_t *opts,
  function fetch_string (line 835) | static int fetch_string(const avs_coap_option_t *opt,
  function avs_coap_options_get_string_it (line 843) | int avs_coap_options_get_string_it(const avs_coap_options_t *opts,
  function _avs_coap_option_exists (line 853) | bool _avs_coap_option_exists(const avs_coap_options_t *opts,
  function is_option_identical (line 858) | static bool is_option_identical(avs_coap_option_t *a, avs_coap_option_t ...
  function optit_skip_until (line 867) | static void optit_skip_until(avs_coap_option_iterator_t *optit,
  function optit_next_matching (line 880) | static void optit_next_matching(avs_coap_option_iterator_t *optit,
  function _avs_coap_selected_options_equal (line 887) | bool _avs_coap_selected_options_equal(const avs_coap_options_t *first,
  function option_must_not_change_during_transfer (line 936) | static bool option_must_not_change_during_transfer(uint16_t opt_num) {
  function get_block_offset (line 949) | static size_t get_block_offset(const avs_coap_options_t *opts,
  function next_block1_offset (line 964) | static inline size_t next_block1_offset(const avs_coap_options_t *prev) {
  function block1_offset (line 968) | static size_t block1_offset(const avs_coap_options_t *prev) {
  function next_block2_offset (line 972) | static size_t next_block2_offset(const avs_coap_options_t *prev) {
  function block2_offset (line 976) | static size_t block2_offset(const avs_coap_options_t *prev) {
  function block1_offset_matches (line 980) | static bool block1_offset_matches(size_t expected_offset,
  function block2_offset_matches (line 991) | static bool block2_offset_matches(const avs_coap_options_t *prev_response,
  function request_block1_offset_valid (line 1012) | static inline bool request_block1_offset_valid(const avs_coap_options_t ...
  function _avs_coap_options_is_sequential_block_request (line 1028) | bool _avs_coap_options_is_sequential_block_request(
  function avs_error_t (line 1093) | static avs_error_t
  function _avs_coap_options_block_payload_valid (line 1124) | bool _avs_coap_options_block_payload_valid(const avs_coap_options_t *opts,
  function is_request_key_option (line 1152) | static bool is_request_key_option(uint16_t opt_num) {
  function avs_error_t (line 1158) | avs_error_t _avs_coap_options_parse(avs_coap_options_t *out_opts,
  function _avs_coap_options_request_key_size (line 1204) | size_t _avs_coap_options_request_key_size(const avs_coap_options_t *opts) {
  function avs_coap_options_t (line 1230) | avs_coap_options_t _avs_coap_options_copy_request_key(

FILE: deps/avs_coap/src/options/avs_coap_options.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 23) | VISIBILITY_PRIVATE_HEADER_BEGIN
  function avs_coap_options_t (line 38) | static inline avs_coap_options_t _avs_coap_options_copy(
  function avs_error_t (line 51) | static inline avs_error_t
  function _avs_coap_options_shrink_to_fit (line 64) | static inline void _avs_coap_options_shrink_to_fit(avs_coap_options_t *o...
  function _avs_coap_option_is_critical (line 95) | static inline bool _avs_coap_option_is_critical(uint16_t opt_number) {

FILE: deps/avs_coap/src/streaming/avs_coap_streaming_client.c
  function VISIBILITY_SOURCE_BEGIN (line 31) | VISIBILITY_SOURCE_BEGIN
  function state_transition_allowed (line 46) | static bool state_transition_allowed(coap_stream_state_t old_state,
  function coap_stream_valid (line 64) | static inline bool coap_stream_valid(coap_stream_t *stream) {
  function coap_stream_set_state (line 74) | static inline void coap_stream_set_state(coap_stream_t *stream,
  function coap_stream_set_error (line 92) | static void coap_stream_set_error(coap_stream_t *stream, avs_error_t err) {
  function feed_payload_chunk (line 100) | static int feed_payload_chunk(size_t payload_offset,
  function handle_response (line 125) | static void handle_response(avs_coap_ctx_t *ctx,
  function reject_request (line 174) | static int reject_request(avs_coap_server_ctx_t *ctx,
  function avs_coap_ctx_t (line 188) | static avs_coap_ctx_t *coap_stream_owner_ctx(coap_stream_t *stream) {
  function avs_error_t (line 192) | static avs_error_t
  function avs_error_t (line 221) | static avs_error_t try_wait_for_response(coap_stream_t *stream) {
  function avs_error_t (line 302) | static avs_error_t flush_chunk(coap_stream_t *stream) {
  function avs_error_t (line 345) | static avs_error_t
  function avs_error_t (line 371) | static avs_error_t
  function move_dynamic_response_header (line 412) | static void
  function avs_error_t (line 425) | static avs_error_t ensure_data_is_available_to_read(coap_stream_t *strea...
  function avs_error_t (line 443) | static avs_error_t coap_read(avs_stream_t *stream_,
  function avs_error_t (line 469) | static avs_error_t
  function avs_error_t (line 491) | static avs_error_t perform_request(coap_stream_t *coap_stream,
  function avs_error_t (line 563) | avs_error_t
  function _avs_coap_stream_cleanup (line 591) | void _avs_coap_stream_cleanup(coap_stream_t *stream) {

FILE: deps/avs_coap/src/streaming/avs_coap_streaming_client.h
  type coap_stream_t (line 33) | typedef struct coap_stream {
  function _avs_coap_stream_init (line 55) | static inline void _avs_coap_stream_init(coap_stream_t *stream,

FILE: deps/avs_coap/src/streaming/avs_coap_streaming_server.c
  function VISIBILITY_SOURCE_BEGIN (line 30) | VISIBILITY_SOURCE_BEGIN
  function is_sending_response_chunk (line 39) | static bool
  function feed_payload_chunk (line 45) | static int feed_payload_chunk(size_t payload_offset,
  function avs_stream_t (line 79) | avs_stream_t *
  function avs_error_t (line 111) | static avs_error_t
  function avs_error_t (line 153) | static avs_error_t
  function request_handler (line 216) | static int request_handler(avs_coap_request_ctx_t *request_ctx,
  function handle_new_request (line 326) | static int handle_new_request(avs_coap_server_ctx_t *server_ctx,
  function reject_new_request (line 352) | static int reject_new_request(avs_coap_server_ctx_t *server_ctx,
  function avs_error_t (line 361) | static avs_error_t
  function avs_error_t (line 380) | static avs_error_t
  function avs_error_t (line 426) | static avs_error_t flush_response_chunk(avs_coap_streaming_request_ctx_t...
  function avs_error_t (line 457) | static avs_error_t
  function avs_error_t (line 495) | static avs_error_t
  function avs_error_t (line 567) | static avs_error_t ensure_data_is_available_to_read(
  function avs_error_t (line 637) | static avs_error_t coap_read(avs_stream_t *stream_,
  function avs_error_t (line 670) | static avs_error_t
  function avs_error_t (line 695) | static avs_error_t handle_incoming_packet_with_acquired_in_buffer(
  function avs_error_t (line 778) | avs_error_t avs_coap_streaming_handle_incoming_packet(
  function avs_error_t (line 796) | avs_error_t avs_coap_observe_streaming_start(
  type notify_streaming_ctx_t (line 806) | typedef struct {
  function notify_delivery_status_handler (line 816) | static void notify_delivery_status_handler(avs_coap_ctx_t *ctx,
  function avs_error_t (line 829) | static avs_error_t flush_notify_chunk(notify_streaming_ctx_t *ctx) {
  function avs_error_t (line 871) | static avs_error_t
  function avs_error_t (line 914) | avs_error_t

FILE: deps/avs_coap/src/streaming/avs_coap_streaming_server.h
  type avs_coap_streaming_server_ctx_t (line 34) | typedef struct {
  type avs_coap_streaming_request_ctx (line 53) | struct avs_coap_streaming_request_ctx {

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_ctx.c
  function log_tcp_msg_summary (line 58) | static void log_tcp_msg_summary(const char *info,
  function avs_error_t (line 99) | avs_error_t _avs_coap_tcp_send_msg(avs_coap_tcp_ctx_t *ctx,
  function handle_response (line 120) | static inline void handle_response(avs_coap_tcp_ctx_t *ctx,
  function avs_error_t (line 128) | static avs_error_t send_simple_msg(avs_coap_tcp_ctx_t *ctx,
  function avs_error_t (line 145) | static avs_error_t handle_cached_msg(avs_coap_tcp_ctx_t *ctx,
  function avs_error_t (line 195) | static avs_error_t set_recv_timeout(avs_net_socket_t *socket,
  function avs_error_t (line 208) | static avs_error_t get_recv_timeout(avs_net_socket_t *socket,
  function avs_error_t (line 222) | static avs_error_t coap_tcp_recv_data(avs_coap_tcp_ctx_t *ctx,
  function opt_cache_finish_message (line 252) | static inline void opt_cache_finish_message(avs_coap_tcp_opt_cache_t *ca...
  function finish_message_handling (line 257) | static void finish_message_handling(avs_coap_tcp_ctx_t *ctx) {
  function send_abort (line 262) | static inline void send_abort(avs_coap_tcp_ctx_t *ctx) {
  function coap_tcp_cleanup (line 271) | static void coap_tcp_cleanup(avs_coap_ctx_t *ctx_) {
  function max_payload_size (line 284) | static size_t max_payload_size(size_t buffer_capacity,
  function coap_tcp_max_outgoing_payload_size (line 301) | static size_t
  function coap_tcp_max_incoming_payload_size (line 313) | static size_t
  function coap_tcp_ignore_current_request (line 325) | static void coap_tcp_ignore_current_request(avs_coap_ctx_t *ctx_,
  function avs_error_t (line 340) | static avs_error_t
  function coap_tcp_abort_delivery (line 384) | static void coap_tcp_abort_delivery(avs_coap_ctx_t *ctx_,
  function avs_error_t (line 397) | static avs_error_t coap_tcp_accept_observation(avs_coap_ctx_t *ctx_,
  function avs_error_t (line 410) | static inline avs_error_t receive_missing_payload(avs_coap_tcp_ctx_t *ctx,
  function pack_payload_from_opts_buffer (line 424) | static inline void
  function avs_error_t (line 436) | static avs_error_t recv_to_internal_buffer_with_bytes_limit(
  function ignore_data_for_current_msg (line 456) | static void ignore_data_for_current_msg(avs_coap_tcp_ctx_t *ctx) {
  function avs_error_t (line 465) | static avs_error_t receive_header(avs_coap_tcp_ctx_t *ctx) {
  function avs_error_t (line 524) | static avs_error_t receive_token(avs_coap_tcp_ctx_t *ctx) {
  function avs_error_t (line 550) | static avs_error_t receive_options(avs_coap_tcp_ctx_t *ctx) {
  function avs_error_t (line 600) | static avs_error_t pack_payload_from_internal_buffer_and_handle_msg(
  function avs_error_t (line 634) | static avs_error_t ignore_invalid_msg(avs_coap_tcp_ctx_t *ctx) {
  function avs_error_t (line 659) | static avs_error_t
  function avs_error_t (line 712) | static avs_error_t
  function avs_error_t (line 727) | static avs_error_t handle_error(avs_coap_tcp_ctx_t *ctx, avs_error_t err) {
  function avs_error_t (line 756) | static avs_error_t
  function avs_error_t (line 774) | static avs_error_t
  function update_timeout (line 808) | static void update_timeout(avs_time_monotonic_t *result_ptr,
  function avs_time_monotonic_t (line 816) | static avs_time_monotonic_t coap_tcp_on_timeout(avs_coap_ctx_t *ctx_) {
  function avs_error_t (line 834) | static avs_error_t send_csm(avs_coap_tcp_ctx_t *ctx) {
  function avs_error_t (line 865) | static avs_error_t coap_tcp_setsock(avs_coap_ctx_t *ctx_,
  function avs_coap_base_t (line 887) | static avs_coap_base_t *coap_tcp_get_base(avs_coap_ctx_t *ctx_) {
  function coap_tcp_next_observe_option_value (line 892) | static uint32_t coap_tcp_next_observe_option_value(avs_coap_ctx_t *ctx,
  function avs_coap_ctx_t (line 914) | avs_coap_ctx_t *avs_coap_tcp_ctx_create(avs_sched_t *sched,

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_ctx.h
  type avs_coap_tcp_opt_cache_t (line 29) | typedef struct {
  type avs_coap_tcp_ctx_t (line 34) | typedef struct avs_coap_tcp_ctx_struct {
  function _avs_coap_tcp_update_recv_deadline (line 64) | static inline int

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_header.c
  function avs_coap_tcp_header_t (line 42) | avs_coap_tcp_header_t _avs_coap_tcp_header_init(size_t payload_size,
  function set_len_field (line 62) | static void set_len_field(uint8_t *len_tkl, size_t value) {
  function _avs_coap_tcp_header_serialize (line 67) | size_t _avs_coap_tcp_header_serialize(const avs_coap_tcp_header_t *header,
  function remaining_header_bytes (line 110) | static inline size_t remaining_header_bytes(uint8_t len_value) {
  function avs_error_t (line 128) | avs_error_t _avs_coap_tcp_header_parse(avs_coap_tcp_header_t *header,

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_header.h
  type avs_coap_tcp_header_t (line 26) | typedef struct avs_coap_tcp_header {

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_msg.c
  function VISIBILITY_SOURCE_BEGIN (line 25) | VISIBILITY_SOURCE_BEGIN
  function avs_error_t (line 67) | avs_error_t _avs_coap_tcp_pack_options(avs_coap_tcp_cached_msg_t *inout_...
  function _avs_coap_tcp_pack_payload (line 132) | void _avs_coap_tcp_pack_payload(avs_coap_tcp_cached_msg_t *inout_msg,

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_msg.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 20) | VISIBILITY_PRIVATE_HEADER_BEGIN

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_pending_requests.c
  function VISIBILITY_SOURCE_BEGIN (line 24) | VISIBILITY_SOURCE_BEGIN
  function avs_coap_send_result_handler_result_t (line 32) | static avs_coap_send_result_handler_result_t
  function is_list_ordered_by_expire_time (line 49) | static inline bool
  function AVS_LIST_ITERATE_PTR (line 66) | AVS_LIST_ITERATE_PTR(list_ptr) {
  function avs_coap_tcp_pending_request_t (line 80) | static avs_coap_tcp_pending_request_t *detach_pending_request(
  function finish_pending_request_with_error (line 87) | static void finish_pending_request_with_error(
  function try_finish_pending_request (line 106) | static void try_finish_pending_request(
  function AVS_LIST_ITERATE_PTR (line 133) | AVS_LIST_ITERATE_PTR(pending_requests) {
  function avs_time_monotonic_t (line 141) | avs_time_monotonic_t
  function refresh_timeout (line 159) | static inline void
  function _avs_coap_tcp_handle_pending_request (line 179) | void _avs_coap_tcp_handle_pending_request(
  function avs_error_t (line 227) | avs_error_t _avs_coap_tcp_create_pending_request(
  function _avs_coap_tcp_remove_pending_request (line 263) | void _avs_coap_tcp_remove_pending_request(
  function _avs_coap_tcp_abort_pending_request_by_token (line 272) | void _avs_coap_tcp_abort_pending_request_by_token(avs_coap_tcp_ctx_t *ctx,
  function _avs_coap_tcp_cancel_all_pending_requests (line 289) | void _avs_coap_tcp_cancel_all_pending_requests(avs_coap_tcp_ctx_t *ctx) {

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_pending_requests.h
  type avs_coap_tcp_pending_request_t (line 21) | typedef struct avs_coap_tcp_pending_request_struct
  type avs_coap_tcp_pending_request_status_t (line 24) | typedef enum {
  type avs_coap_tcp_response_handler_t (line 31) | typedef struct {
  type avs_coap_tcp_ctx_struct (line 37) | struct avs_coap_tcp_ctx_struct
  type avs_coap_tcp_ctx_struct (line 44) | struct avs_coap_tcp_ctx_struct
  type avs_coap_tcp_ctx_struct (line 56) | struct avs_coap_tcp_ctx_struct
  type avs_coap_tcp_ctx_struct (line 62) | struct avs_coap_tcp_ctx_struct
  type avs_coap_tcp_ctx_struct (line 65) | struct avs_coap_tcp_ctx_struct

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_signaling.c
  function VISIBILITY_SOURCE_BEGIN (line 28) | VISIBILITY_SOURCE_BEGIN
  function avs_error_t (line 96) | static avs_error_t send_pong(avs_coap_tcp_ctx_t *ctx,
  function handle_abort (line 108) | static void handle_abort(const avs_coap_borrowed_msg_t *msg) {
  function avs_error_t (line 124) | avs_error_t

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_signaling.h
  type avs_coap_tcp_csm_t (line 22) | typedef struct {
  type avs_coap_tcp_ctx_struct (line 52) | struct avs_coap_tcp_ctx_struct

FILE: deps/avs_coap/src/tcp/avs_coap_tcp_utils.c
  function VISIBILITY_SOURCE_BEGIN (line 20) | VISIBILITY_SOURCE_BEGIN
  function _avs_coap_tcp_escape_payload (line 45) | size_t _avs_coap_tcp_escape_payload(const char *payload,

FILE: deps/avs_coap/src/udp/avs_coap_udp_ctx.c
  function _avs_unit_mock_constructor_avs_coap_udp_initial_retry_state (line 45) | void _avs_unit_mock_constructor_avs_coap_udp_initial_retry_state(void) {
  function avs_coap_token_t (line 55) | static inline const avs_coap_token_t *
  function coap_udp_notify_cache_drop_entry (line 67) | static inline void
  function coap_udp_notify_cache_drop (line 80) | static inline void
  function coap_udp_notify_cache_put (line 95) | static inline void coap_udp_notify_cache_put(avs_coap_udp_notify_cache_t...
  function update_last_mtu_from_socket (line 115) | static void update_last_mtu_from_socket(avs_coap_udp_ctx_t *ctx) {
  function udp_max_payload_size (line 135) | static size_t udp_max_payload_size(size_t buffer_capacity,
  function coap_udp_max_outgoing_payload_size (line 149) | static size_t
  function coap_udp_max_incoming_payload_size (line 161) | static size_t
  function generate_id (line 177) | static uint16_t generate_id(avs_coap_udp_ctx_t *ctx) {
  function current_nstart (line 181) | static size_t current_nstart(const avs_coap_udp_ctx_t *ctx) {
  function effective_nstart (line 196) | static size_t effective_nstart(const avs_coap_udp_ctx_t *ctx) {
  function log_udp_msg_summary (line 210) | static void log_udp_msg_summary(const char *info,
  function try_cache_response (line 255) | static void try_cache_response(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 297) | static avs_error_t coap_udp_send_serialized_msg(avs_coap_udp_ctx_t *ctx,
  function AVS_LIST_ITERATE_PTR (line 318) | AVS_LIST_ITERATE_PTR(list_ptr) {
  function reschedule_retransmission_job (line 346) | static void reschedule_retransmission_job(avs_coap_udp_ctx_t *ctx) {
  function avs_coap_borrowed_msg_t (line 362) | static inline avs_coap_borrowed_msg_t
  function avs_coap_send_result_handler_result_t (line 374) | static avs_coap_send_result_handler_result_t
  function resume_next_unconfirmed (line 419) | static void resume_next_unconfirmed(avs_coap_udp_ctx_t *ctx) {
  function resume_unconfirmed_messages (line 487) | static void resume_unconfirmed_messages(avs_coap_udp_ctx_t *ctx) {
  function try_cleanup_unconfirmed (line 522) | static void try_cleanup_unconfirmed(avs_coap_udp_ctx_t *ctx,
  type avs_coap_udp_exchange_direction_t (line 549) | typedef enum {
  function avs_coap_udp_exchange_direction_t (line 555) | static avs_coap_udp_exchange_direction_t direction_from_code(uint8_t cod...
  function AVS_LIST_ITERATE_PTR (line 569) | AVS_LIST_ITERATE_PTR(list_ptr) {
  function avs_coap_udp_unconfirmed_msg_t (line 617) | static avs_coap_udp_unconfirmed_msg_t *
  function confirm_unconfirmed (line 630) | static void
  function fail_unconfirmed (line 645) | static void fail_unconfirmed(avs_coap_udp_ctx_t *ctx,
  function avs_coap_udp_exchange_direction_t (line 660) | static avs_coap_udp_exchange_direction_t
  function coap_udp_abort_delivery (line 672) | static void coap_udp_abort_delivery(avs_coap_ctx_t *ctx_,
  function coap_udp_ignore_current_request (line 686) | static void coap_udp_ignore_current_request(avs_coap_ctx_t *ctx_,
  function retransmit_next_message_without_reschedule (line 696) | static void
  function avs_time_monotonic_t (line 755) | static avs_time_monotonic_t coap_udp_on_timeout(avs_coap_ctx_t *ctx_) {
  function avs_error_t (line 772) | static avs_error_t
  function avs_error_t (line 822) | static avs_error_t create_unconfirmed(
  function avs_coap_udp_type_t (line 865) | static avs_coap_udp_type_t choose_msg_type(const avs_coap_udp_ctx_t *ctx,
  function assign_id (line 925) | static uint16_t assign_id(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 940) | static avs_error_t
  function avs_error_t (line 1001) | static avs_error_t coap_udp_recv_msg(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 1023) | static avs_error_t try_send_cached_response(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 1059) | static avs_error_t handle_request(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 1092) | static avs_error_t
  function avs_error_t (line 1105) | static avs_error_t send_separate_ack(avs_coap_udp_ctx_t *ctx, uint16_t m...
  function avs_error_t (line 1109) | static avs_error_t send_reset(avs_coap_udp_ctx_t *ctx, uint16_t msg_id) {
  function avs_error_t (line 1113) | static avs_error_t handle_response(avs_coap_udp_ctx_t *ctx,
  function ack_request (line 1165) | static void
  function avs_error_t (line 1197) | static avs_error_t handle_empty(avs_coap_udp_ctx_t *ctx,
  function store_request_id (line 1255) | static void store_request_id(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 1264) | static avs_error_t handle_msg(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 1282) | static avs_error_t send_empty_response(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 1302) | static avs_error_t
  function handle_truncated_response (line 1311) | static void handle_truncated_response(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 1327) | static avs_error_t handle_truncated_msg(avs_coap_udp_ctx_t *ctx,
  function avs_error_t (line 1357) | static avs_error_t
  function avs_error_t (line 1427) | static avs_error_t coap_udp_accept_observation(avs_coap_ctx_t *ctx_,
  function coap_udp_cleanup (line 1440) | static void coap_udp_cleanup(avs_coap_ctx_t *ctx_) {
  function avs_coap_base_t (line 1452) | static avs_coap_base_t *coap_udp_get_base(avs_coap_ctx_t *ctx_) {
  function avs_coap_stats_t (line 1457) | static avs_coap_stats_t coap_udp_get_stats(avs_coap_ctx_t *ctx_) {
  function avs_error_t (line 1462) | static avs_error_t coap_udp_setsock(avs_coap_ctx_t *ctx,
  function coap_udp_next_observe_option_value (line 1467) | static uint32_t coap_udp_next_observe_option_value(avs_coap_ctx_t *ctx,
  function are_tx_params_sane (line 1489) | static bool are_tx_params_sane(const avs_coap_udp_tx_params_t *tx_params) {
  function avs_coap_ctx_t (line 1494) | avs_coap_ctx_t *
  function avs_coap_udp_ctx_set_forced_incoming_mtu (line 1548) | int avs_coap_udp_ctx_set_forced_incoming_mtu(avs_coap_ctx_t *ctx,
  function avs_coap_udp_ctx_set_tx_params (line 1560) | int avs_coap_udp_ctx_set_tx_params(avs_coap_ctx_t *ctx,
  function avs_coap_udp_tx_params_t (line 1587) | const avs_coap_udp_tx_params_t *

FILE: deps/avs_coap/src/udp/avs_coap_udp_ctx.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 16) | VISIBILITY_PRIVATE_HEADER_BEGIN
  type avs_coap_udp_unconfirmed_msg_t (line 49) | typedef struct {
  type avs_coap_udp_sent_notify_t (line 75) | typedef struct {
  type avs_coap_udp_notify_cache_t (line 98) | typedef struct {
  type avs_coap_udp_ctx_t (line 104) | typedef struct {

FILE: deps/avs_coap/src/udp/avs_coap_udp_header.h
  type avs_coap_udp_type (line 30) | enum avs_coap_udp_type {
  type avs_coap_udp_header_t (line 51) | typedef struct avs_coap_udp_header {
  function _avs_coap_udp_header_get_version (line 110) | static inline uint8_t
  function _avs_coap_udp_header_set_version (line 124) | static inline void _avs_coap_udp_header_set_version(avs_coap_udp_header_...
  function _avs_coap_udp_header_get_token_length (line 135) | static inline uint8_t
  function _avs_coap_udp_header_set_token_length (line 144) | static inline void
  function avs_coap_udp_type_t (line 164) | static inline avs_coap_udp_type_t
  function _avs_coap_udp_header_set_type (line 176) | static inline void _avs_coap_udp_header_set_type(avs_coap_udp_header_t *...
  function _avs_coap_udp_header_get_id (line 190) | static inline uint16_t
  function _avs_coap_udp_header_set_id (line 201) | static inline void _avs_coap_udp_header_set_id(avs_coap_udp_header_t *hdr,
  function _avs_coap_udp_header_set (line 207) | static inline void _avs_coap_udp_header_set(avs_coap_udp_header_t *hdr,
  function avs_coap_udp_header_t (line 219) | static inline avs_coap_udp_header_t

FILE: deps/avs_coap/src/udp/avs_coap_udp_msg.c
  function VISIBILITY_SOURCE_BEGIN (line 29) | VISIBILITY_SOURCE_BEGIN
  function avs_error_t (line 76) | static avs_error_t parse_header(avs_coap_udp_header_t *out_hdr,
  function avs_error_t (line 93) | static avs_error_t parse_payload(const void **out_payload,
  function avs_error_t (line 119) | static inline avs_error_t parse_token(avs_coap_udp_msg_t *out_msg,
  function avs_error_t (line 127) | static inline avs_error_t
  function avs_error_t (line 140) | avs_error_t _avs_coap_udp_msg_parse(avs_coap_udp_msg_t *out_msg,
  function _avs_coap_udp_msg_parse_truncated (line 176) | void _avs_coap_udp_msg_parse_truncated(avs_coap_udp_msg_t *out_msg,
  function avs_error_t (line 205) | avs_error_t _avs_coap_udp_msg_serialize(const avs_coap_udp_msg_t *msg,
  function avs_error_t (line 242) | avs_error_t _avs_coap_udp_msg_copy(const avs_coap_udp_msg_t *src,

FILE: deps/avs_coap/src/udp/avs_coap_udp_msg.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 22) | VISIBILITY_PRIVATE_HEADER_BEGIN
  function _avs_coap_udp_msg_size (line 120) | static inline size_t _avs_coap_udp_msg_size(const avs_coap_udp_msg_t *ms...

FILE: deps/avs_coap/src/udp/avs_coap_udp_msg_cache.c
  type endpoint (line 35) | struct endpoint {
  type avs_coap_udp_response_cache (line 41) | struct avs_coap_udp_response_cache {
  type cache_entry_t (line 48) | typedef struct cache_entry {
  function avs_coap_udp_response_cache_t (line 56) | avs_coap_udp_response_cache_t *
  function avs_coap_udp_response_cache_release (line 80) | void avs_coap_udp_response_cache_release(
  function endpoint_t (line 90) | static endpoint_t *cache_endpoint_add_ref(avs_coap_udp_response_cache_t ...
  function cache_endpoint_del_ref (line 136) | static void cache_endpoint_del_ref(avs_coap_udp_response_cache_t *cache,
  function padding_bytes_after_msg (line 150) | static size_t padding_bytes_after_msg(size_t msg_size) {
  function cache_put_entry (line 160) | static void cache_put_entry(avs_coap_udp_response_cache_t *cache,
  function cache_entry_t (line 197) | static const cache_entry_t *
  function entry_valid (line 205) | static bool entry_valid(const avs_coap_udp_response_cache_t *cache,
  function entry_expired (line 216) | static bool entry_expired(const cache_entry_t *entry,
  function entry_msg_size (line 223) | static size_t entry_msg_size(const cache_entry_t *entry) {
  function entry_size (line 229) | static size_t entry_size(const cache_entry_t *entry) {
  function entry_id (line 235) | static uint16_t entry_id(const cache_entry_t *entry) {
  function cache_entry_t (line 240) | static const cache_entry_t *entry_next(const cache_entry_t *entry) {
  function cache_free_bytes (line 247) | static void cache_free_bytes(avs_coap_udp_response_cache_t *cache,
  function cache_drop_expired (line 272) | static void cache_drop_expired(avs_coap_udp_response_cache_t *cache,
  function cache_entry_t (line 292) | static const cache_entry_t *
  function _avs_coap_udp_response_cache_add (line 310) | int _avs_coap_udp_response_cache_add(
  function avs_error_t (line 355) | avs_error_t
  function _avs_coap_udp_response_cache_overhead (line 383) | size_t _avs_coap_udp_response_cache_overhead(const avs_coap_udp_msg_t *m...

FILE: deps/avs_coap/src/udp/avs_coap_udp_msg_cache.h
  type avs_coap_udp_cached_response_t (line 24) | typedef struct {

FILE: deps/avs_coap/src/udp/avs_coap_udp_tx_params.c
  function avs_coap_udp_tx_params_valid (line 31) | bool avs_coap_udp_tx_params_valid(const avs_coap_udp_tx_params_t *tx_par...
  function avs_time_duration_t (line 67) | avs_time_duration_t
  function avs_time_duration_t (line 74) | avs_time_duration_t
  function avs_time_duration_t (line 85) | avs_time_duration_t

FILE: deps/avs_coap/src/udp/avs_coap_udp_tx_params.h
  function VISIBILITY_PRIVATE_HEADER_BEGIN (line 21) | VISIBILITY_PRIVATE_HEADER_BEGIN
  function avs_error_t (line 35) | static inline avs_error_t
  function _avs_coap_udp_update_retry_state (line 60) | static inline int
  function _avs_coap_udp_all_retries_sent (line 77) | static inline bool

FILE: deps/avs_coap/tests/fuzz/coap_async_api_tcp.c
  function avs_error_t (line 30) | static avs_error_t unexpected() {
  function read_flag (line 40) | static bool read_flag(void) {
  function dump_buffer (line 48) | static void dump_buffer(const char *label, const void *buffer, size_t si...
  function avs_coap_options_t (line 62) | static avs_coap_options_t read_options__(char buf[static 65535]) {
  function avs_error_t (line 88) | static avs_error_t get_opt(avs_net_socket_t *socket,
  function avs_error_t (line 104) | static avs_error_t set_opt(avs_net_socket_t *socket,
  function get_length (line 117) | static uint8_t get_length(uint8_t first_byte) {
  function get_token_offset (line 129) | static size_t get_token_offset(uint8_t first_byte) {
  function get_token_length (line 148) | static uint8_t get_token_length(uint8_t first_byte) {
  function avs_error_t (line 152) | static avs_error_t mock_recv(avs_net_socket_t *socket,
  function avs_error_t (line 203) | static avs_error_t
  function avs_error_t (line 219) | static avs_error_t empty_string_getter(avs_net_socket_t *socket,
  function payload_writer (line 256) | static int payload_writer(size_t payload_offset,
  function response_handler (line 283) | static void response_handler(avs_coap_ctx_t *ctx,
  function handle_request (line 304) | static int handle_request(avs_coap_request_ctx_t *ctx,
  function handle_new_request (line 353) | static int handle_new_request(avs_coap_server_ctx_t *ctx,
  function do_stuff_unconditionally (line 387) | static void do_stuff_unconditionally(avs_coap_ctx_t *ctx) {
  function do_stuff (line 469) | static void do_stuff(avs_coap_ctx_t *ctx) {
  function main (line 483) | int main() {

FILE: deps/avs_coap/tests/fuzz/coap_async_api_udp.c
  function avs_error_t (line 32) | static avs_error_t unexpected() {
  function read_flag (line 42) | static bool read_flag(void) {
  function dump_buffer (line 50) | static void dump_buffer(const char *label, const void *buffer, size_t si...
  function avs_coap_options_t (line 64) | static avs_coap_options_t read_options__(char buf[static 65535]) {
  function avs_error_t (line 90) | static avs_error_t get_opt(avs_net_socket_t *socket,
  function get_token_length (line 102) | static uint8_t get_token_length(uint8_t first_byte) {
  function avs_error_t (line 108) | static avs_error_t mock_recv(avs_net_socket_t *socket,
  function avs_error_t (line 162) | static avs_error_t
  function avs_error_t (line 178) | static avs_error_t empty_string_getter(avs_net_socket_t *socket,
  function payload_writer (line 215) | static int payload_writer(size_t payload_offset,
  function response_handler (line 242) | static void response_handler(avs_coap_ctx_t *ctx,
  function handle_request (line 263) | static int handle_request(avs_coap_request_ctx_t *ctx,
  function handle_new_request (line 315) | static int handle_new_request(avs_coap_server_ctx_t *ctx,
  function do_stuff_unconditionally (line 349) | static void do_stuff_unconditionally(avs_coap_ctx_t *ctx) {
  function do_stuff (line 431) | static void do_stuff(avs_coap_ctx_t *ctx) {
  function main (line 445) | int main() {

FILE: deps/avs_coap/tests/fuzz/coap_parse.c
  function main (line 17) | int main() {

FILE: deps/avs_coap/tests/mock_clock.c
  function _avs_mock_clock_start (line 28) | void _avs_mock_clock_start(const avs_time_monotonic_t t) {
  function _avs_mock_clock_advance (line 34) | void _avs_mock_clock_advance(const avs_time_duration_t t) {
  function _avs_mock_clock_finish (line 40) | void _avs_mock_clock_finish(void) {
  type timespec (line 45) | struct timespec
  function AVS_UNIT_GLOBAL_INIT (line 47) | AVS_UNIT_GLOBAL_INIT(verbose) {
  function clock_gettime (line 54) | int clock_gettime(clockid_t clock, struct timespec *t) {

FILE: deps/avs_coap/tests/options/options.c
  function optit_advance (line 73) | static void optit_advance(avs_coap_option_iterator_t *optit, size_t n) {
  function erase_nth_option (line 80) | static void erase_nth_option(avs_coap_options_t *opts, size_t n) {
  function deref_free (line 163) | static void deref_free(void **p) {
  function avs_coap_options_t (line 518) | static avs_coap_options_t init_options(void *buf, size_t buf_size, ...) {
  function avs_coap_request_header_t (line 1023) | static avs_coap_request_header_t request_header_init(uint8_t coap_code) {
  function critical_option_validator (line 1032) | static bool critical_option_validator(uint8_t msg_code, uint32_t optnum) {

FILE: deps/avs_coap/tests/socket.c
  function _avs_mocksock_create (line 19) | void _avs_mocksock_create(avs_net_socket_t **mocksock, int inner_mtu, in...

FILE: deps/avs_coap/tests/tcp/async_client.c
  type expected_response_t (line 26) | typedef struct {
  type expected_responses_list_t (line 34) | typedef AVS_LIST(expected_response_t) expected_responses_list_t;
  type response_handler_args_t (line 36) | typedef struct {
  function response_handler_args_t (line 41) | static response_handler_args_t setup_response_handler_args(void) {
  function cleanup_response_handler_args (line 46) | static void cleanup_response_handler_args(response_handler_args_t *args) {
  function expect_response_handler_call (line 50) | static void expect_response_handler_call(response_handler_args_t *args,
  function expect_cancel (line 69) | static void expect_cancel(response_handler_args_t *args,
  function expect_fail (line 75) | static void expect_fail(response_handler_args_t *args,
  function expect_partial_content (line 81) | static void expect_partial_content(response_handler_args_t *args,
  function expect_finished_response (line 90) | static void expect_finished_response(response_handler_args_t *args,
  function handle_response (line 98) | static void handle_response(avs_coap_ctx_t *ctx,

FILE: deps/avs_coap/tests/tcp/async_server.c
  type request_handler_action_t (line 26) | typedef enum {
  type payload_buf_t (line 39) | typedef struct {
  type expected_request_t (line 44) | typedef struct {
  type expected_requests_list_t (line 56) | typedef AVS_LIST(expected_request_t) expected_requests_list_t;
  type request_handler_args_t (line 58) | typedef struct {
  function request_handler_args_t (line 66) | static request_handler_args_t
  function cleanup_request_handler_args (line 76) | static void cleanup_request_handler_args(request_handler_args_t *args) {
  function test_payload_writer (line 80) | static int test_payload_writer(size_t payload_offset,
  function expect_request_handler_call (line 95) | static void expect_request_handler_call(request_handler_args_t *args,
  function expect_partial_content (line 117) | static void expect_partial_content(request_handler_args_t *args,
  function expect_last_chunk (line 127) | static void expect_last_chunk(request_handler_args_t *args,
  function expect_cleanup (line 136) | static void expect_cleanup(request_handler_args_t *args) {
  function validate_request (line 141) | static void validate_request(const avs_coap_server_async_request_t *actual,
  function test_request_handler (line 155) | static int test_request_handler(avs_coap_request_ctx_t *ctx,
  function handle_new_request (line 267) | static int handle_new_request(avs_coap_server_ctx_t *ctx,

FILE: deps/avs_coap/tests/tcp/csm.c
  type test_handler_expected_response_t (line 19) | typedef struct {
  type test_handler_expect_responses_list_t (line 26) | typedef AVS_LIST(
  type response_handler_args_t (line 29) | typedef struct {
  function avs_coap_send_result_handler_result_t (line 33) | static avs_coap_send_result_handler_result_t
  function expect_response_handler_call (line 81) | static void expect_response_handler_call(response_handler_args_t *args,
  function response_handler_args_t (line 98) | static response_handler_args_t setup_response_handler_args(void) {
  function cleanup_response_handler_args (line 102) | static void cleanup_response_handler_args(response_handler_args_t *args) {

FILE: deps/avs_coap/tests/tcp/env.h
  type test_env_t (line 26) | typedef struct {
  type test_env_args_t (line 41) | typedef struct {
  function expect_send (line 47) | static inline void expect_send(test_env_t *env, const test_msg_t *msg) {
  function expect_recv (line 51) | static inline void expect_recv(test_env_t *env, const test_msg_t *msg) {
  function expect_recv_with_limited_size (line 55) | static inline void expect_recv_with_limited_size(test_env_t *env,
  function expect_has_buffered_data_check (line 62) | static inline void expect_has_buffered_data_check(test_env_t *env,
  function test_env_t (line 71) | static inline test_env_t test_setup_from_args(const test_env_args_t *arg...
  function test_env_t (line 104) | static inline test_env_t test_setup_without_socket(void) {
  function test_env_t (line 116) | static inline test_env_t
  function test_env_t (line 150) | static inline test_env_t test_setup_with_external_buffers_without_mock_c...
  function test_env_t (line 165) | static inline test_env_t
  function test_env_t (line 174) | static inline test_env_t
  function test_env_t (line 183) | static inline test_env_t test_setup(void) {
  function test_teardown_impl (line 191) | static inline void test_teardown_impl(test_env_t *env) {
  function test_teardown_without_freeing_coap_ctx (line 200) | static inline void test_teardown_without_freeing_coap_ctx(test_env_t *en...
  function test_teardown_without_freeing_shared_buffers_and_mock_clock (line 212) | static inline void
  function test_teardown_without_freeing_shared_buffers (line 218) | static inline void
  function test_teardown (line 224) | static inline void test_teardown(test_env_t *env) {
  function test_teardown_without_freeing_scheduler (line 230) | static inline void test_teardown_without_freeing_scheduler(test_env_t *e...

FILE: deps/avs_coap/tests/tcp/header.c
  type header_test_data_t (line 34) | typedef struct header_serialize_test_struct {
  function avs_coap_tcp_header_t (line 72) | static avs_coap_tcp_header_t init_header(const header_test_data_t *test_...
  function validate_header (line 95) | static void validate_header(avs_coap_tcp_header_t *header,

FILE: deps/avs_coap/tests/tcp/helper_functions.h
  function avs_error_t (line 21) | static inline avs_error_t
  function avs_error_t (line 32) | static inline avs_error_t send_response(avs_coap_ctx_t *ctx,
  function avs_error_t (line 38) | static inline avs_error_t
  function avs_error_t (line 53) | static inline avs_error_t
  function avs_error_t (line 61) | static inline avs_error_t
  function avs_error_t (line 69) | static inline avs_error_t
  function cancel_delivery (line 76) | static inline void cancel_delivery(avs_coap_ctx_t *ctx,
  function ignore_request (line 84) | static inline void ignore_request(avs_coap_ctx_t *ctx,
  function expect_sliced_recv (line 90) | static inline void

FILE: deps/avs_coap/tests/tcp/payload_escaper.c
  type test_data_t (line 23) | typedef struct {

FILE: deps/avs_coap/tests/tcp/requesting.c
  type test_handler_expected_response_t (line 21) | typedef struct {
  type test_handler_expect_responses_list_t (line 28) | typedef AVS_LIST(
  type response_handler_args_t (line 31) | typedef struct {
  function avs_coap_send_result_handler_result_t (line 35) | static avs_coap_send_result_handler_result_t
  function expect_response_handler_call (line 83) | static void expect_response_handler_call(response_handler_args_t *args,
  function test_synchronous_requests (line 100) | static void test_synchronous_requests(test_env_t *env,
  function send_all_requests (line 162) | static void send_all_requests(test_env_t *env,
  function expect_concatenated_responses (line 173) | static void expect_concatenated_responses(test_env_t *env,
  function expect_concatenated_responses_reversed (line 192) | static void
  function response_handler_args_t (line 213) | static response_handler_args_t setup_response_handler_args(void) {
  function cleanup_response_handler_args (line 217) | static void cleanup_response_handler_args(response_handler_args_t *args) {
  function has_scheduled_job (line 738) | static inline bool has_scheduled_job(avs_sched_t *sched) {

FILE: deps/avs_coap/tests/tcp/responding.c
  function test_request_handler_impl (line 21) | static void test_request_handler_impl(avs_coap_ctx_t *ctx,
  function test_request_handler (line 64) | static void test_request_handler(avs_coap_ctx_t *ctx,
  function test_canceling_request_handler (line 74) | static void
  function avs_buffer_t (line 85) | static avs_buffer_t *setup_request_handler_payload_buffer(void) {
  function test_too_big_option (line 208) | static void test_too_big_option(test_env_t *env) {

FILE: deps/avs_coap/tests/tcp/utils.h
  type test_msg_t (line 23) | typedef struct {
  type test_exchange_t (line 34) | typedef struct test_exchange_struct {
  type coap_msg_args (line 48) | struct coap_msg_args {
  function add_string_opts (line 75) | static inline void add_string_opts(avs_coap_options_t *opts,
  function test_msg_t (line 83) | static inline const test_msg_t *

FILE: deps/avs_coap/tests/udp/async_observe.c
  function free_deref_arg_delivery_handler (line 849) | static void free_deref_arg_delivery_handler(avs_coap_ctx_t *ctx,

FILE: deps/avs_coap/tests/udp/async_server.c
  function failing_nonblock_request_handler (line 52) | static int

FILE: deps/avs_coap/tests/udp/fuzzer_cases.c
  type test_env_with_msg_t (line 24) | typedef struct {
  function msg_sending_response_handler (line 30) | static void
  type call_avs_sched_run_handler_args_t (line 170) | typedef struct {
  function call_avs_sched_run_handler (line 175) | static void
  type cancel_exchanges_payload_writer_args_t (line 276) | typedef struct {
  function cancel_exchanges_payload_writer (line 282) | static int cancel_exchanges_payload_writer(size_t payload_offset,

FILE: deps/avs_coap/tests/udp/msg.c
  function free_ptr (line 29) | static void free_ptr(void **p) {
  function assert_header_eq (line 209) | static inline void assert_header_eq(const avs_coap_udp_header_t *a,

FILE: deps/avs_coap/tests/udp/msg_cache.c
  type test_udp_msg_t (line 38) | typedef struct {
  function test_udp_msg_t (line 44) | static test_udp_msg_t setup_msg_with_id(uint16_t msg_id, const char *pay...
  function free_msg (line 65) | static void free_msg(test_udp_msg_t *msg) {
  function free_msg_array (line 69) | static void free_msg_array(test_udp_msg_t (*msgs)[3]) {
  function assert_udp_msg_equal (line 75) | static void assert_udp_msg_equal(avs_coap_udp_msg_t m1, avs_coap_udp_msg...

FILE: deps/avs_coap/tests/udp/streaming_observe.c
  type streaming_handle_request_args_t (line 26) | typedef struct {
  function on_observe_cancel (line 38) | static void on_observe_cancel(avs_coap_observe_id_t id, void *env) {
  function streaming_handle_request (line 43) | static int streaming_handle_request(avs_coap_streaming_request_ctx_t *ctx,

FILE: deps/avs_coap/tests/udp/streaming_server.c
  type streaming_handle_request_args_t (line 22) | typedef struct {
  function streaming_handle_request (line 35) | static int streaming_handle_request(avs_coap_streaming_request_ctx_t *ctx,
  function broken_handle_request (line 961) | static int broken_handle_request(avs_coap_streaming_request_ctx_t *ctx,
  function broken_write_handle_request (line 1036) | static int broken_write_handle_request(avs_coap_streaming_request_ctx_t ...

FILE: deps/avs_coap/tests/udp/udp_tx_params.c
  function assert_tx_params_equal (line 55) | static void assert_tx_params_equal(const avs_coap_udp_tx_params_t *actual,
  function avg_factor (line 164) | static inline double avg_factor(double factor) {
  function avs_error_t (line 168) | static avs_error_t

FILE: deps/avs_coap/tests/udp/utils.h
  type coap_msg_args (line 34) | struct coap_msg_args {
  function add_string_opts (line 62) | static inline void add_string_opts(avs_coap_options_t *opts,
  type test_msg_t (line 70) | typedef struct {
  function test_msg_t (line 78) | static inline const test_msg_t *
  type test_response_handler_expected_t (line 220) | typedef struct {
  type test_payload_writer_args_t (line 228) | typedef struct {
  type test_request_handler_expected_t (line 238) | typedef struct {
  type test_observe_state_change_t (line 251) | typedef enum {
  type test_observe_expect_t (line 256) | typedef struct {
  type test_handler_expected_t (line 261) | typedef struct {
  type test_env_t (line 276) | typedef struct {
  function test_env_t (line 289) | static inline test_env_t
  function test_env_t (line 325) | static inline test_env_t test_setup(const avs_coap_udp_tx_params_t *tx_p...
  function test_env_t (line 350) | static inline test_env_t test_setup_with_nstart(size_t nstart) {
  function test_env_t (line 356) | static inline test_env_t
  function test_env_t (line 363) | static inline test_env_t test_setup_default(void) {
  function test_env_t (line 367) | static inline test_env_t test_setup_with_cache(size_t size) {
  function test_env_t (line 372) | static inline test_env_t test_setup_deterministic(void) {
  function test_teardown_no_expects_check (line 378) | static inline void test_teardown_no_expects_check(test_env_t *env) {
  function test_teardown_late_expects_check (line 392) | static inline void test_teardown_late_expects_check(test_env_t *env) {
  function test_teardown (line 397) | static inline void test_teardown(test_env_t *env) {
  function expect_send (line 402) | static inline void expect_send(test_env_t *env, const test_msg_t *msg) {
  function expect_recv (line 406) | static inline void expect_recv(test_env_t *env, const test_msg_t *msg) {
  function expect_has_buffered_data_check (line 410) | static inline void expect_has_buffered_data_check(test_env_t *env,
  type expect_handler_call_args_t (line 419) | typedef struct {
  function expect_handler_call_impl (line 428) | static inline void
  function test_response_handler (line 465) | static inline void
  function test_response_abort_handler (line 509) | static inline void
  function test_payload_writer (line 521) | static inline int test_payload_writer(size_t payload_offset,
  function expect_observe_state_change (line 546) | static inline void
  function expect_observe_start (line 564) | static inline void expect_observe_start(test_env_t *env,
  function expect_observe_cancel (line 569) | static inline void expect_observe_cancel(test_env_t *env,
  function assert_observe_state_change_expected (line 574) | static inline void
  function expect_observe_delivery (line 587) | static inline void expect_observe_delivery(test_env_t *env, avs_error_t ...
  function test_observe_delivery_handler (line 597) | static inline void test_observe_delivery_handler(avs_coap_ctx_t *ctx,
  function test_on_observe_cancel (line 616) | static void test_on_observe_cancel(avs_coap_observe_id_t id, void *env) {
  function test_handle_request (line 622) | static inline int
  function _expect_request_handler_call_impl (line 707) | static inline void _expect_request_handler_call_impl(
  function expect_request_handler_call (line 802) | static inline void
  function expect_request_handler_call_and_force_sending_request (line 816) | static inline void expect_request_handler_call_and_force_sending_request(
  function test_accept_new_request (line 826) | static inline int
  type test_streaming_payload_t (line 848) | typedef struct {
  function test_streaming_writer (line 854) | static inline int test_streaming_writer(avs_stream_t *stream, void *payl...
  function advance_mockclock (line 869) | static inline void advance_mockclock(avs_net_socket_t *socket, void *tim...

FILE: deps/avs_coap/tests/utils.c
  function reset_token_generator (line 24) | void reset_token_generator(void) {
  function avs_error_t (line 31) | avs_error_t _avs_coap_ctx_generate_token(avs_coap_ctx_t *ctx,
  function avs_coap_token_t (line 38) | avs_coap_token_t nth_token(uint64_t k) {
  function avs_coap_token_t (line 51) | avs_coap_token_t current_token(void) {

FILE: deps/avs_coap/tests/utils.h
  function avs_coap_token_t (line 23) | static inline avs_coap_token_t from_bytes(const void *bytes, size_t size) {

FILE: doc/sphinx/extensions/builders/dummy.py
  class DummyBuilder (line 17) | class DummyBuilder(Builder):
    method init (line 21) | def init(self): pass
    method get_outdated_docs (line 23) | def get_outdated_docs(self): return self.env.found_docs
    method get_target_uri (line 25) | def get_target_uri(self, docname, typ=None): return ''
    method prepare_writing (line 27) | def prepare_writing(self, docnames): pass
    method write_doc (line 29) | def write_doc(self, docname, doctree): pass
    method finish (line 31) | def finish(self): pass

FILE: doc/sphinx/extensions/builders/snippet_source_linter.py
  class CodeChunk (line 19) | class CodeChunk:
    method __init__ (line 24) | def __init__(self,
    method to_regex (line 46) | def to_regex(self):
    method __str__ (line 54) | def __str__(self):
  class CodeSnippet (line 65) | class CodeSnippet:
    method __init__ (line 66) | def __init__(self,
    method get_invalid_chunks (line 114) | def get_invalid_chunks(self):
  class SnippetSourceLintBuilder (line 138) | class SnippetSourceLintBuilder(DummyBuilder):
    method __init__ (line 141) | def __init__(self, *args, **kwargs):
    method write_doc (line 147) | def write_doc(self, docname, doctree):
    method finish (line 175) | def finish(self):
  function setup (line 215) | def setup(app):

FILE: doc/sphinx/extensions/builders/snippet_source_list_references.py
  class SnippetSourceListReferencesBuilder (line 14) | class SnippetSourceListReferencesBuilder(DummyBuilder):
    method __init__ (line 17) | def __init__(self, *args, **kwargs):
    method write_doc (line 22) | def write_doc(self, docname, doctree):
    method finish (line 29) | def finish(self):
  function setup (line 33) | def setup(app):

FILE: doc/sphinx/extensions/file_dirtiness_checker.py
  class FileDirtinessChecker (line 17) | class FileDirtinessChecker:
    method __init__ (line 18) | def __init__(self, md5hashes_file):
    method is_file_dirty (line 46) | def is_file_dirty(self, filepath):

FILE: doc/sphinx/extensions/small_literal.py
  function small_literal_role (line 13) | def small_literal_role(name, rawtext, text, lineno, inliner, options={},...
  function setup (line 16) | def setup(app: Sphinx):

FILE: doc/sphinx/extensions/snippet_source.py
  class SnippetSourceNode (line 22) | class SnippetSourceNode(docutils.nodes.literal_block):
    method __init__ (line 23) | def __init__(self, source_filepath, lineno, rawsource, text):
  class SnippetSourceDirective (line 32) | class SnippetSourceDirective(SphinxDirective):
    method run (line 48) | def run(self):
  function setup (line 89) | def setup(app: Sphinx):

FILE: example_configs/embedded_lwm2m10/avsystem/commons/lwip-posix-compat.h
  type sockfd_t (line 54) | typedef int sockfd_t;

FILE: example_configs/embedded_lwm2m11/avsystem/commons/lwip-posix-compat.h
  type sockfd_t (line 54) | typedef int sockfd_t;

FILE: example_configs/embedded_lwm2m12/avsystem/commons/lwip-posix-compat.h
  type sockfd_t (line 54) | typedef int sockfd_t;

FILE: examples/commercial-features/CF-CorePersistence/src/main.c
  function signal_handler (line 14) | void signal_handler(int signum) {
  function persist_objects (line 23) | int persist_objects(anjay_t *anjay) {
  function restore_objects_if_possible (line 59) | int restore_objects_if_possible(anjay_t *anjay) {
  function anjay_t (line 110) | anjay_t *
  function anjay_delete_try_with_core_persistence (line 133) | int anjay_delete_try_with_core_persistence(anjay_t *anjay) {
  function initialize_objects_with_default_settings (line 153) | void initialize_objects_with_default_settings(anjay_t *anjay) {
  function main (line 184) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-EST-PKCS11/src/main.c
  function signal_handler (line 16) | void signal_handler(int signum) {
  function persist_objects_if_necessary (line 24) | int persist_objects_if_necessary(anjay_t *anjay) {
  function restore_objects_if_possible (line 72) | int restore_objects_if_possible(anjay_t *anjay) {
  function load_buffer_from_file (line 127) | static int
  function initialize_objects_with_default_settings (line 160) | static int initialize_objects_with_default_settings(anjay_t *anjay) {
  function main (line 204) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-EST/src/main.c
  function signal_handler (line 15) | void signal_handler(int signum) {
  function persist_objects_if_necessary (line 23) | int persist_objects_if_necessary(anjay_t *anjay) {
  function restore_objects_if_possible (line 71) | int restore_objects_if_possible(anjay_t *anjay) {
  function load_buffer_from_file (line 126) | static int
  function initialize_objects_with_default_settings (line 159) | static int initialize_objects_with_default_settings(anjay_t *anjay) {
  function main (line 199) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-NIDD/src/main.c
  function setup_security_object (line 11) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 34) | static int setup_server_object(anjay_t *anjay) {
  function main (line 64) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-NIDD/src/nidd_demo_driver.c
  type fifo_t (line 17) | typedef struct {
  function fifo_init (line 21) | static int fifo_init(fifo_t *fifo) {
  function fifo_destroy (line 28) | static void fifo_destroy(fifo_t *fifo) {
  function fifo_find_off (line 32) | static int fifo_find_off(fifo_t *fifo, char ch, size_t *out_off) {
  function fifo_pop_n (line 42) | static void fifo_pop_n(fifo_t *fifo, char *out_buffer, size_t size, size...
  function fifo_discard_n (line 51) | static void fifo_discard_n(fifo_t *fifo, size_t n) {
  function fifo_pop_line (line 58) | static int fifo_pop_line(fifo_t *fifo, char *out_line, size_t out_size) {
  function fifo_strip_nullbytes (line 86) | static void fifo_strip_nullbytes(fifo_t *fifo) {
  function avs_error_t (line 120) | static avs_error_t fifo_push_read(fifo_t *fifo, int fd) {
  type demo_nidd_driver_t (line 136) | typedef struct {
  function trim_inplace (line 142) | static void trim_inplace(char *buffer) {
  function modem_getline (line 161) | static int modem_getline(void *user_context,
  function is_blank (line 219) | static inline bool is_blank(const char *buffer) {
  function modem_write (line 228) | static int modem_write(void *user_context, const char *buffer) {
  function modem_get_parameter (line 241) | static int modem_get_parameter(void *user_context,
  function driver_cleanup (line 258) | static void driver_cleanup(demo_nidd_driver_t *driver) {
  function anjay_nidd_driver_t (line 267) | anjay_nidd_driver_t **demo_nidd_driver_create(const char *modem_device) {
  function demo_nidd_driver_cleanup (line 302) | void demo_nidd_driver_cleanup(anjay_nidd_driver_t **driver) {

FILE: examples/commercial-features/CF-OSCORE/src/main.c
  function signal_handler (line 16) | void signal_handler(int signum) {
  function persist_objects (line 24) | int persist_objects(anjay_t *anjay) {
  function restore_objects_if_possible (line 63) | int restore_objects_if_possible(anjay_t *anjay) {
  function initialize_objects_with_default_settings (line 118) | static int initialize_objects_with_default_settings(anjay_t *anjay) {
  function main (line 163) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-PKCS11/src/main.c
  function setup_security_object (line 13) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 39) | static int setup_server_object(anjay_t *anjay) {
  function main (line 69) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-PSA-PKI/src/main.c
  function signal_handler (line 14) | void signal_handler(int signum) {
  function setup_security_object (line 23) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 49) | static int setup_server_object(anjay_t *anjay) {
  function main (line 79) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-PSA-PSK/src/main.c
  function signal_handler (line 14) | void signal_handler(int signum) {
  function setup_security_object (line 23) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 49) | static int setup_server_object(anjay_t *anjay) {
  function main (line 79) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-PSA-bootstrap/src/main.c
  function signal_handler (line 11) | void signal_handler(int signum) {
  function setup_security_object (line 64) | static int
  function main (line 91) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-PSA-management/src/main.c
  function main (line 15) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-SMS-PSK/src/main.c
  function setup_security_object (line 10) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 42) | static int setup_server_object(anjay_t *anjay) {
  function main (line 72) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-SMS-UDP/src/main.c
  function setup_security_object (line 10) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 35) | static int setup_server_object(anjay_t *anjay) {
  function main (line 67) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-SMS/src/main.c
  function setup_security_object (line 10) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 34) | static int setup_server_object(anjay_t *anjay) {
  function main (line 64) | int main(int argc, char *argv[]) {

FILE: examples/commercial-features/CF-SmartCardBootstrap/src/main.c
  type fifo_t (line 29) | typedef struct {
  function fifo_init (line 33) | static int fifo_init(fifo_t *fifo) {
  function fifo_destroy (line 40) | static void fifo_destroy(fifo_t *fifo) {
  function fifo_find_off (line 44) | static int fifo_find_off(fifo_t *fifo, char ch, size_t *out_off) {
  function fifo_pop_n (line 54) | static void fifo_pop_n(fifo_t *fifo, char *out_buffer, size_t size, size...
  function fifo_discard_n (line 63) | static void fifo_discard_n(fifo_t *fifo, size_t n) {
  function fifo_pop_line (line 70) | static int fifo_pop_line(fifo_t *fifo, char *out_line, size_t out_size) {
  function fifo_strip_nullbytes (line 98) | static void fifo_strip_nullbytes(fifo_t *fifo) {
  function avs_error_t (line 132) | static avs_error_t fifo_push_read(fifo_t *fifo, int fd) {
  type modem_ctx_t (line 148) | typedef struct {
  function trim_inplace (line 153) | static void trim_inplace(char *buffer) {
  function modem_getline (line 172) | static int modem_getline(modem_ctx_t *modem_ctx,
  function sim_perform_command (line 230) | static int sim_perform_command(void *modem_ctx_,
  function bootstrap_from_sim (line 307) | static int bootstrap_from_sim(anjay_t *anjay, const char *modem_device) {
  function main (line 338) | int main(int argc, char *argv[]) {

FILE: examples/custom-network/bind/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-network/bind/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 39) | typedef union {
  function avs_error_t (line 46) | static avs_error_t
  function avs_error_t (line 72) | static avs_error_t
  function avs_error_t (line 82) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 113) | static avs_error_t
  function avs_error_t (line 146) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 158) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 173) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 187) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 203) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 214) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 225) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 236) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 271) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 299) | static avs_error_t
  function avs_error_t (line 319) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 326) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-network/ip-stickiness/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-network/ip-stickiness/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-network/minimal/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-network/minimal/src/net_impl.c
  function avs_error_t (line 21) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 25) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 27) | typedef struct {
  function avs_error_t (line 34) | static avs_error_t
  function avs_error_t (line 60) | static avs_error_t
  function avs_error_t (line 70) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 101) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 113) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 128) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 154) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 178) | static avs_error_t
  function avs_error_t (line 198) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 205) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-network/remote-host-port/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-network/remote-host-port/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 39) | typedef union {
  function avs_error_t (line 46) | static avs_error_t
  function avs_error_t (line 72) | static avs_error_t
  function avs_error_t (line 82) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 113) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 125) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 140) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 154) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 170) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 181) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 192) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 218) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 244) | static avs_error_t
  function avs_error_t (line 264) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 271) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-network/shutdown-remote-hostname/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-network/shutdown-remote-hostname/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 41) | typedef union {
  function avs_error_t (line 48) | static avs_error_t
  function avs_error_t (line 79) | static avs_error_t
  function avs_error_t (line 89) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 120) | static avs_error_t
  function avs_error_t (line 155) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 168) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 178) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 193) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 207) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 223) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 234) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 245) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 256) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 304) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 334) | static avs_error_t
  function avs_error_t (line 354) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 361) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-network/stats/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-network/stats/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 43) | typedef union {
  function avs_error_t (line 50) | static avs_error_t
  function avs_error_t (line 81) | static avs_error_t
  function avs_error_t (line 94) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 126) | static avs_error_t
  function avs_error_t (line 161) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 174) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 184) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 199) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 213) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 229) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 240) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 251) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 262) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 273) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 316) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 346) | static avs_error_t
  function avs_error_t (line 366) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 373) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-tls/certificates-advanced-fake-dane/src/main.c
  function load_buffer_from_file (line 8) | static int
  function setup_security_object (line 44) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 90) | static int setup_server_object(anjay_t *anjay) {
  function main (line 120) | int main(int argc, char *argv[]) {

FILE: examples/custom-tls/certificates-advanced-fake-dane/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-tls/certificates-advanced-fake-dane/src/tls_impl.c
  function avs_error_t (line 21) | avs_error_t _avs_net_initialize_global_ssl_state(void) {
  function _avs_net_cleanup_global_ssl_state (line 30) | void _avs_net_cleanup_global_ssl_state(void) {}
  function avs_crypto_clear_buffer (line 32) | void avs_crypto_clear_buffer(void *buf, size_t size) {
  type tls_socket_impl_t (line 36) | typedef struct {
  function dtls_timer_cb (line 57) | static unsigned int dtls_timer_cb(SSL *s, unsigned int timer_us) {
  function avs_error_t (line 74) | static avs_error_t perform_handshake(tls_socket_impl_t *sock,
  function avs_error_t (line 122) | static avs_error_t
  function avs_error_t (line 144) | static avs_error_t
  function avs_error_t (line 154) | static avs_error_t tls_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 192) | static avs_error_t
  function avs_error_t (line 198) | static avs_error_t tls_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 207) | static avs_error_t tls_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 212) | static avs_error_t tls_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 232) | static avs_error_t tls_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 240) | static avs_error_t tls_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 248) | static avs_error_t tls_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 256) | static avs_error_t tls_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 264) | static avs_error_t tls_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 290) | static avs_error_t
  function avs_error_t (line 343) | static avs_error_t tls_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 403) | static avs_error_t configure_dtls_version(tls_socket_impl_t *sock,
  function psk_client_cb (line 420) | static unsigned int psk_client_cb(SSL *ssl,
  function avs_error_t (line 442) | static avs_error_t configure_psk(tls_socket_impl_t *sock,
  function avs_error_t (line 469) | static avs_error_t configure_cert_revocation_lists(
  function avs_error_t (line 524) | static avs_error_t
  function avs_error_t (line 579) | static avs_error_t
  function avs_error_t (line 607) | static avs_error_t configure_certs(tls_socket_impl_t *sock,
  function avs_error_t (line 640) | static avs_error_t configure_dtls_handshake_timeouts(
  function avs_error_t (line 655) | static avs_error_t
  function avs_error_t (line 691) | static avs_error_t configure_sni(tls_socket_impl_t *sock,
  function new_session_cb (line 703) | static int new_session_cb(SSL *ssl, SSL_SESSION *sess) {
  function avs_error_t (line 715) | avs_error_t _avs_net_create_dtls_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 779) | avs_error_t _avs_net_create_ssl_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-tls/certificates-advanced/src/main.c
  function load_buffer_from_file (line 8) | static int
  function setup_security_object (line 44) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 90) | static int setup_server_object(anjay_t *anjay) {
  function main (line 120) | int main(int argc, char *argv[]) {

FILE: examples/custom-tls/certificates-advanced/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-tls/certificates-advanced/src/tls_impl.c
  function avs_error_t (line 21) | avs_error_t _avs_net_initialize_global_ssl_state(void) {
  function _avs_net_cleanup_global_ssl_state (line 30) | void _avs_net_cleanup_global_ssl_state(void) {}
  function avs_crypto_clear_buffer (line 32) | void avs_crypto_clear_buffer(void *buf, size_t size) {
  type tls_socket_impl_t (line 36) | typedef struct {
  function dtls_timer_cb (line 60) | static unsigned int dtls_timer_cb(SSL *s, unsigned int timer_us) {
  function avs_error_t (line 77) | static avs_error_t perform_handshake(tls_socket_impl_t *sock,
  function avs_error_t (line 155) | static avs_error_t
  function avs_error_t (line 177) | static avs_error_t
  function avs_error_t (line 187) | static avs_error_t tls_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 225) | static avs_error_t
  function avs_error_t (line 231) | static avs_error_t tls_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 240) | static avs_error_t tls_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 245) | static avs_error_t tls_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 265) | static avs_error_t tls_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 273) | static avs_error_t tls_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 281) | static avs_error_t tls_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t tls_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 297) | static avs_error_t tls_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 323) | static avs_error_t tls_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 390) | static avs_error_t configure_dtls_version(tls_socket_impl_t *sock,
  function psk_client_cb (line 407) | static unsigned int psk_client_cb(SSL *ssl,
  function avs_error_t (line 429) | static avs_error_t configure_psk(tls_socket_impl_t *sock,
  function avs_error_t (line 456) | static avs_error_t
  function avs_error_t (line 509) | static avs_error_t configure_cert_revocation_lists(
  function avs_error_t (line 564) | static avs_error_t
  function avs_error_t (line 619) | static avs_error_t
  function avs_error_t (line 647) | static avs_error_t configure_certs(tls_socket_impl_t *sock,
  function avs_error_t (line 683) | static avs_error_t configure_dtls_handshake_timeouts(
  function avs_error_t (line 698) | static avs_error_t
  function avs_error_t (line 734) | static avs_error_t configure_sni(tls_socket_impl_t *sock,
  function new_session_cb (line 746) | static int new_session_cb(SSL *ssl, SSL_SESSION *sess) {
  function avs_error_t (line 758) | avs_error_t _avs_net_create_dtls_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 822) | avs_error_t _avs_net_create_ssl_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-tls/certificates-basic/src/main.c
  function load_buffer_from_file (line 8) | static int
  function setup_security_object (line 44) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-tls/certificates-basic/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-tls/certificates-basic/src/tls_impl.c
  function avs_error_t (line 21) | avs_error_t _avs_net_initialize_global_ssl_state(void) {
  function _avs_net_cleanup_global_ssl_state (line 30) | void _avs_net_cleanup_global_ssl_state(void) {}
  function avs_crypto_clear_buffer (line 32) | void avs_crypto_clear_buffer(void *buf, size_t size) {
  type tls_socket_impl_t (line 36) | typedef struct {
  function dtls_timer_cb (line 55) | static unsigned int dtls_timer_cb(SSL *s, unsigned int timer_us) {
  function avs_error_t (line 72) | static avs_error_t perform_handshake(tls_socket_impl_t *sock,
  function avs_error_t (line 120) | static avs_error_t
  function avs_error_t (line 142) | static avs_error_t
  function avs_error_t (line 152) | static avs_error_t tls_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 190) | static avs_error_t
  function avs_error_t (line 196) | static avs_error_t tls_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 205) | static avs_error_t tls_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 210) | static avs_error_t tls_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 230) | static avs_error_t tls_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 238) | static avs_error_t tls_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 246) | static avs_error_t tls_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 254) | static avs_error_t tls_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 262) | static avs_error_t tls_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 288) | static avs_error_t tls_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 313) | static avs_error_t configure_dtls_version(tls_socket_impl_t *sock,
  function psk_client_cb (line 330) | static unsigned int psk_client_cb(SSL *ssl,
  function avs_error_t (line 352) | static avs_error_t configure_psk(tls_socket_impl_t *sock,
  function avs_error_t (line 379) | static avs_error_t
  function avs_error_t (line 432) | static avs_error_t configure_cert_revocation_lists(
  function avs_error_t (line 487) | static avs_error_t
  function avs_error_t (line 512) | static avs_error_t
  function avs_error_t (line 540) | static avs_error_t configure_certs(tls_socket_impl_t *sock,
  function avs_error_t (line 573) | static avs_error_t configure_dtls_handshake_timeouts(
  function avs_error_t (line 588) | static avs_error_t
  function avs_error_t (line 624) | static avs_error_t configure_sni(tls_socket_impl_t *sock,
  function new_session_cb (line 636) | static int new_session_cb(SSL *ssl, SSL_SESSION *sess) {
  function avs_error_t (line 648) | avs_error_t _avs_net_create_dtls_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 712) | avs_error_t _avs_net_create_ssl_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-tls/config-features/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-tls/config-features/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-tls/config-features/src/tls_impl.c
  function avs_error_t (line 20) | avs_error_t _avs_net_initialize_global_ssl_state(void) {
  function _avs_net_cleanup_global_ssl_state (line 29) | void _avs_net_cleanup_global_ssl_state(void) {}
  function avs_crypto_clear_buffer (line 31) | void avs_crypto_clear_buffer(void *buf, size_t size) {
  type tls_socket_impl_t (line 35) | typedef struct {
  function dtls_timer_cb (line 54) | static unsigned int dtls_timer_cb(SSL *s, unsigned int timer_us) {
  function avs_error_t (line 71) | static avs_error_t perform_handshake(tls_socket_impl_t *sock,
  function avs_error_t (line 118) | static avs_error_t
  function avs_error_t (line 140) | static avs_error_t
  function avs_error_t (line 150) | static avs_error_t tls_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 188) | static avs_error_t
  function avs_error_t (line 194) | static avs_error_t tls_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 203) | static avs_error_t tls_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 208) | static avs_error_t tls_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 228) | static avs_error_t tls_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 236) | static avs_error_t tls_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 244) | static avs_error_t tls_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 252) | static avs_error_t tls_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 260) | static avs_error_t tls_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 286) | static avs_error_t tls_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 311) | static avs_error_t configure_dtls_version(tls_socket_impl_t *sock,
  function psk_client_cb (line 328) | static unsigned int psk_client_cb(SSL *ssl,
  function avs_error_t (line 350) | static avs_error_t configure_psk(tls_socket_impl_t *sock,
  function avs_error_t (line 377) | static avs_error_t configure_dtls_handshake_timeouts(
  function avs_error_t (line 392) | static avs_error_t
  function avs_error_t (line 428) | static avs_error_t configure_sni(tls_socket_impl_t *sock,
  function new_session_cb (line 440) | static int new_session_cb(SSL *ssl, SSL_SESSION *sess) {
  function avs_error_t (line 452) | avs_error_t _avs_net_create_dtls_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 513) | avs_error_t _avs_net_create_ssl_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-tls/minimal/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-tls/minimal/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-tls/minimal/src/tls_impl.c
  function avs_error_t (line 20) | avs_error_t _avs_net_initialize_global_ssl_state(void) {
  function _avs_net_cleanup_global_ssl_state (line 29) | void _avs_net_cleanup_global_ssl_state(void) {}
  function avs_crypto_clear_buffer (line 31) | void avs_crypto_clear_buffer(void *buf, size_t size) {
  type tls_socket_impl_t (line 35) | typedef struct {
  function avs_error_t (line 47) | static avs_error_t perform_handshake(tls_socket_impl_t *sock,
  function avs_error_t (line 81) | static avs_error_t
  function avs_error_t (line 100) | static avs_error_t
  function avs_error_t (line 110) | static avs_error_t tls_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 148) | static avs_error_t
  function avs_error_t (line 154) | static avs_error_t tls_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 163) | static avs_error_t tls_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 168) | static avs_error_t tls_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 188) | static avs_error_t tls_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 196) | static avs_error_t tls_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 204) | static avs_error_t tls_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 212) | static avs_error_t tls_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 220) | static avs_error_t tls_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 243) | static avs_error_t tls_set_opt(avs_net_socket_t *sock_,
  function psk_client_cb (line 268) | static unsigned int psk_client_cb(SSL *ssl,
  function avs_error_t (line 290) | static avs_error_t configure_psk(tls_socket_impl_t *sock,
  function avs_error_t (line 317) | avs_error_t _avs_net_create_dtls_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 356) | avs_error_t _avs_net_create_ssl_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-tls/resumption-buffer/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-tls/resumption-buffer/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-tls/resumption-buffer/src/tls_impl.c
  function avs_error_t (line 20) | avs_error_t _avs_net_initialize_global_ssl_state(void) {
  function _avs_net_cleanup_global_ssl_state (line 29) | void _avs_net_cleanup_global_ssl_state(void) {}
  function avs_crypto_clear_buffer (line 31) | void avs_crypto_clear_buffer(void *buf, size_t size) {
  type tls_socket_impl_t (line 35) | typedef struct {
  function avs_error_t (line 50) | static avs_error_t perform_handshake(tls_socket_impl_t *sock,
  function avs_error_t (line 96) | static avs_error_t
  function avs_error_t (line 115) | static avs_error_t
  function avs_error_t (line 125) | static avs_error_t tls_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 163) | static avs_error_t
  function avs_error_t (line 169) | static avs_error_t tls_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 178) | static avs_error_t tls_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 183) | static avs_error_t tls_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 203) | static avs_error_t tls_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 211) | static avs_error_t tls_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 219) | static avs_error_t tls_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 227) | static avs_error_t tls_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 235) | static avs_error_t tls_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 261) | static avs_error_t tls_set_opt(avs_net_socket_t *sock_,
  function psk_client_cb (line 286) | static unsigned int psk_client_cb(SSL *ssl,
  function avs_error_t (line 308) | static avs_error_t configure_psk(tls_socket_impl_t *sock,
  function new_session_cb (line 335) | static int new_session_cb(SSL *ssl, SSL_SESSION *sess) {
  function avs_error_t (line 347) | avs_error_t _avs_net_create_dtls_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 397) | avs_error_t _avs_net_create_ssl_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-tls/resumption-simple/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-tls/resumption-simple/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-tls/resumption-simple/src/tls_impl.c
  function avs_error_t (line 20) | avs_error_t _avs_net_initialize_global_ssl_state(void) {
  function _avs_net_cleanup_global_ssl_state (line 29) | void _avs_net_cleanup_global_ssl_state(void) {}
  function avs_crypto_clear_buffer (line 31) | void avs_crypto_clear_buffer(void *buf, size_t size) {
  type tls_socket_impl_t (line 35) | typedef struct {
  function avs_error_t (line 49) | static avs_error_t perform_handshake(tls_socket_impl_t *sock,
  function avs_error_t (line 91) | static avs_error_t
  function avs_error_t (line 110) | static avs_error_t
  function avs_error_t (line 120) | static avs_error_t tls_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 158) | static avs_error_t
  function avs_error_t (line 164) | static avs_error_t tls_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 173) | static avs_error_t tls_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 178) | static avs_error_t tls_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 201) | static avs_error_t tls_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 209) | static avs_error_t tls_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 217) | static avs_error_t tls_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 225) | static avs_error_t tls_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 233) | static avs_error_t tls_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 259) | static avs_error_t tls_set_opt(avs_net_socket_t *sock_,
  function psk_client_cb (line 284) | static unsigned int psk_client_cb(SSL *ssl,
  function avs_error_t (line 306) | static avs_error_t configure_psk(tls_socket_impl_t *sock,
  function new_session_cb (line 333) | static int new_session_cb(SSL *ssl, SSL_SESSION *sess) {
  function avs_error_t (line 345) | avs_error_t _avs_net_create_dtls_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 388) | avs_error_t _avs_net_create_ssl_socket(avs_net_socket_t **socket_ptr,

FILE: examples/custom-tls/stub/src/main.c
  function main_loop (line 8) | int main_loop(anjay_t *anjay) {
  function setup_security_object (line 55) | static int setup_security_object(anjay_t *anjay) {
  function setup_server_object (line 85) | static int setup_server_object(anjay_t *anjay) {
  function main (line 115) | int main(int argc, char *argv[]) {

FILE: examples/custom-tls/stub/src/net_impl.c
  function avs_error_t (line 26) | avs_error_t _avs_net_initialize_global_compat_state(void) {
  function _avs_net_cleanup_global_compat_state (line 30) | void _avs_net_cleanup_global_compat_state(void) {}
  type net_socket_impl_t (line 32) | typedef struct {
  type sockaddr_union_t (line 44) | typedef union {
  function avs_error_t (line 51) | static avs_error_t
  function avs_error_t (line 108) | static avs_error_t
  function avs_error_t (line 121) | static avs_error_t net_receive(avs_net_socket_t *sock_,
  function avs_error_t (line 153) | static avs_error_t
  function avs_error_t (line 188) | static avs_error_t net_close(avs_net_socket_t *sock_) {
  function avs_error_t (line 201) | static avs_error_t net_shutdown(avs_net_socket_t *sock_) {
  function avs_error_t (line 211) | static avs_error_t net_cleanup(avs_net_socket_t **sock_ptr) {
  function avs_error_t (line 226) | static avs_error_t stringify_sockaddr_host(const sockaddr_union_t *addr,
  function avs_error_t (line 240) | static avs_error_t stringify_sockaddr_port(const sockaddr_union_t *addr,
  function avs_error_t (line 256) | static avs_error_t net_remote_host(avs_net_socket_t *sock_,
  function avs_error_t (line 267) | static avs_error_t net_remote_hostname(avs_net_socket_t *sock_,
  function avs_error_t (line 278) | static avs_error_t net_remote_port(avs_net_socket_t *sock_,
  function avs_error_t (line 289) | static avs_error_t net_local_port(avs_net_socket_t *sock_,
  function avs_error_t (line 300) | static avs_error_t net_get_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 343) | static avs_error_t net_set_opt(avs_net_socket_t *sock_,
  function avs_error_t (line 373) | static avs_error_t
  function avs_error_t (line 394) | avs_error_t _avs_net_create_udp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 401) | avs_error_t _avs_net_create_tcp_socket(avs_net_socket_t **socket_ptr,
  function avs_error_t (line 408) | avs_error_t

FILE: examples/custom-tls/stub/src/tls_impl.c
  function avs_error_t (line 20) | avs_error_t _avs_net_initialize_global_ssl_state(void) {
  function _avs_net_cleanup_global_ssl_state (line 29) | void _avs_net_cleanup_global_ssl_state(void) {}
  function avs_crypto_clear_buffer (line 31) | void avs_crypto_clear_buffer(void *buf, size_t size) {
  type tls_socket_impl_t (line 35) | typedef struct {
  function avs_error_t (line 
Copy disabled (too large) Download .json
Condensed preview — 989 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (11,495K chars).
[
  {
    "path": ".dockerignore",
    "chars": 963,
    "preview": "# binaries\n*.a\n*.so\n*.so.*\n/demo/demo\n\n# NetBeans Project\nnbproject\n\n# IDEA-based IDE project\n.idea/\n\n# VSCode\n.vscode/\n"
  },
  {
    "path": ".github/workflows/anjay-tests.yml",
    "chars": 6757,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": ".github/workflows/coverity.yml",
    "chars": 1714,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": ".gitignore",
    "chars": 1116,
    "preview": "# binaries\n*.a\n*.so\n*.so.*\n/demo/demo\n\n# NetBeans Project\nnbproject\n\n# IDEA-based IDE project\n.idea/\n\n# VSCode\n.vscode/\n"
  },
  {
    "path": ".gitmodules",
    "chars": 107,
    "preview": "[submodule \"deps/avs_commons\"]\n\tpath = deps/avs_commons\n\turl = https://github.com/AVSystem/avs_commons.git\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 100690,
    "preview": "# Changelog\n\n## 3.13.1 (April 2nd, 2026)\n\n### Bugfixes\n\n- Tests and documentation corrections\n\n\n## 3.13.0 (March 31st, 2"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 44119,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": "CONTRIBUTING.rst",
    "chars": 6121,
    "preview": "..\n   Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n   AVSystem Anjay LwM2M SDK\n   All rights reserved.\n\n   Licen"
  },
  {
    "path": "Dockerfile",
    "chars": 442,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": "Doxyfile.in",
    "chars": 127105,
    "preview": "# Doxyfile 1.9.8\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
  },
  {
    "path": "LICENSE",
    "chars": 4624,
    "preview": "AVSystem Anjay LwM2M Client SDK - Non-Commercial License\n========================================================\n\nVersi"
  },
  {
    "path": "NOTICE",
    "chars": 551,
    "preview": "Anjay\nCopyright 2017-2026 AVSystem\n\nThis product includes software developed at AVSystem (www.avsystem.com).\n\nThis produ"
  },
  {
    "path": "README.Windows.md",
    "chars": 2248,
    "preview": "# Anjay on Windows\n\n## Limitations\n\nAnjay is currently not supported or regularly tested (which means that builds may br"
  },
  {
    "path": "README.md",
    "chars": 13435,
    "preview": "# Anjay LwM2M library [<img align=\"right\" height=\"50px\" src=\"https://docs.avsystem.com/hubfs/Anjay_Docs/_images/avsystem"
  },
  {
    "path": "cmake/anjay-config.cmake.in",
    "chars": 965,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": "cmake/anjay-version.cmake.in",
    "chars": 540,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": "cmake/requirePython3venv.cmake",
    "chars": 1246,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": "cmake/toolchain/afl-gcc.cmake",
    "chars": 416,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": "demo/CMakeLists.txt",
    "chars": 3608,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": "demo/advanced_firmware_update.c",
    "chars": 48749,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/advanced_firmware_update.h",
    "chars": 6300,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/advanced_firmware_update_addimg.c",
    "chars": 4360,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/advanced_firmware_update_app.c",
    "chars": 9426,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo.c",
    "chars": 47834,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo.h",
    "chars": 3233,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo_args.c",
    "chars": 103551,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo_args.h",
    "chars": 7655,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo_cmds.c",
    "chars": 76761,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo_cmds.h",
    "chars": 462,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo_time.c",
    "chars": 1822,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo_utils.c",
    "chars": 8984,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/demo_utils.h",
    "chars": 2698,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/firmware_update.c",
    "chars": 30793,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/firmware_update.h",
    "chars": 1905,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/lwm2m_gateway.c",
    "chars": 8126,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/lwm2m_gateway.h",
    "chars": 1324,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/net_traffic_interceptor.c",
    "chars": 5183,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/net_traffic_interceptor.h",
    "chars": 528,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/apn_conn_profile.c",
    "chars": 11828,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/binary_app_data_container.c",
    "chars": 16189,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/cell_connectivity.c",
    "chars": 11592,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/conn_monitoring.c",
    "chars": 7358,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/conn_statistics.c",
    "chars": 8469,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/device.c",
    "chars": 17284,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/download_diagnostics.c",
    "chars": 10158,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/event_log.c",
    "chars": 13198,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/ext_dev_info.c",
    "chars": 7078,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/gateway_end_devices/binary_app_data_container.c",
    "chars": 16230,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/gateway_end_devices/binary_app_data_container.h",
    "chars": 914,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/gateway_end_devices/push_button_object.c",
    "chars": 7592,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/gateway_end_devices/push_button_object.h",
    "chars": 650,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/gateway_end_devices/temperature_object.c",
    "chars": 11276,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/gateway_end_devices/temperature_object.h",
    "chars": 621,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/geopoints.c",
    "chars": 11415,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/ip_ping.c",
    "chars": 17349,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/ipso_objects.c",
    "chars": 5816,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/location.c",
    "chars": 12658,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/portfolio.c",
    "chars": 12013,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects/test.c",
    "chars": 34094,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/objects.h",
    "chars": 7458,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/software_mgmt.c",
    "chars": 32755,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "demo/software_mgmt.h",
    "chars": 2099,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem Anjay LwM2M SDK\n * All rights reserved.\n *\n * Lic"
  },
  {
    "path": "deps/avs_coap/.gitignore",
    "chars": 839,
    "preview": "# binaries\n*.o\n*.a\n*.so\n*.so.*\navs_*_test\n/tools/dtls_echo_server\n/certs\n/ensure-no-warnings-from-headers-if-cpp.cpp\n\n# "
  },
  {
    "path": "deps/avs_coap/CMakeLists.txt",
    "chars": 16389,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserved.\n#\n# Licensed under"
  },
  {
    "path": "deps/avs_coap/Doxyfile.in",
    "chars": 112926,
    "preview": "# Doxyfile 1.8.18\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org)"
  },
  {
    "path": "deps/avs_coap/LICENSE",
    "chars": 4624,
    "preview": "AVSystem Anjay LwM2M Client SDK - Non-Commercial License\n========================================================\n\nVersi"
  },
  {
    "path": "deps/avs_coap/NOTICE",
    "chars": 326,
    "preview": "AVSystem CoAP Library\nCopyright 2017-2026 AVSystem\n\nThis product includes software developed at AVSystem (www.avsystem.c"
  },
  {
    "path": "deps/avs_coap/README.md",
    "chars": 24,
    "preview": "# AVSystem CoAP Library\n"
  },
  {
    "path": "deps/avs_coap/cmake/AddHeaderSelfSufficiencyTests.cmake",
    "chars": 4475,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserved.\n#\n# Licensed under"
  },
  {
    "path": "deps/avs_coap/cmake/avs_coap-config.cmake.in",
    "chars": 569,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserved.\n#\n# Licensed under"
  },
  {
    "path": "deps/avs_coap/cmake/fill-placeholders.cmake",
    "chars": 583,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserved.\n#\n# Licensed under"
  },
  {
    "path": "deps/avs_coap/devconfig",
    "chars": 1489,
    "preview": "#!/usr/bin/env bash\n#\n# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserv"
  },
  {
    "path": "deps/avs_coap/doc/CMakeLists.txt",
    "chars": 3392,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserved.\n#\n# Licensed under"
  },
  {
    "path": "deps/avs_coap/doc/sphinx/make.bat",
    "chars": 799,
    "preview": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sp"
  },
  {
    "path": "deps/avs_coap/doc/sphinx/source/ErrorHandling.rst",
    "chars": 1811,
    "preview": "..\n   Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n   AVSystem CoAP library\n   All rights reserved.\n\n   Licensed"
  },
  {
    "path": "deps/avs_coap/doc/sphinx/source/Fuzzing.rst",
    "chars": 3025,
    "preview": "..\n   Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n   AVSystem CoAP library\n   All rights reserved.\n\n   Licensed"
  },
  {
    "path": "deps/avs_coap/doc/sphinx/source/Overview.rst",
    "chars": 8891,
    "preview": "..\n   Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n   AVSystem CoAP library\n   All rights reserved.\n\n   Licensed"
  },
  {
    "path": "deps/avs_coap/doc/sphinx/source/_static/theme_overrides.css",
    "chars": 1578,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/doc/sphinx/source/conf.py.in",
    "chars": 2542,
    "preview": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common op"
  },
  {
    "path": "deps/avs_coap/doc/sphinx/source/index.rst",
    "chars": 645,
    "preview": "..\n   Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n   AVSystem CoAP library\n   All rights reserved.\n\n   Licensed"
  },
  {
    "path": "deps/avs_coap/examples/CMakeLists.txt",
    "chars": 2199,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserved.\n#\n# Licensed under"
  },
  {
    "path": "deps/avs_coap/examples/async-client/CMakeLists.txt",
    "chars": 413,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserved.\n#\n# Licensed under"
  },
  {
    "path": "deps/avs_coap/examples/async-client/src/main.c",
    "chars": 2706,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/async.h",
    "chars": 2439,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/async_client.h",
    "chars": 10600,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/async_exchange.h",
    "chars": 1881,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/async_server.h",
    "chars": 10667,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/avs_coap_config.h.in",
    "chars": 6901,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/coap.h",
    "chars": 3840,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/code.h",
    "chars": 5121,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/ctx.h",
    "chars": 17427,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/observe.h",
    "chars": 15878,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/option.h",
    "chars": 27955,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/streaming.h",
    "chars": 9366,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/tcp.h",
    "chars": 2897,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/token.h",
    "chars": 2075,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/udp.h",
    "chars": 8050,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/include_public/avsystem/coap/writer.h",
    "chars": 4052,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/requirements.txt",
    "chars": 17,
    "preview": "pyparsing\npyyaml\n"
  },
  {
    "path": "deps/avs_coap/src/async/avs_coap_async_client.c",
    "chars": 45522,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/async/avs_coap_async_client.h",
    "chars": 2182,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/async/avs_coap_async_server.c",
    "chars": 57194,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/async/avs_coap_async_server.h",
    "chars": 10916,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/async/avs_coap_exchange.c",
    "chars": 16191,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/async/avs_coap_exchange.h",
    "chars": 4811,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_code_utils.c",
    "chars": 5307,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_code_utils.h",
    "chars": 1616,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_common_utils.c",
    "chars": 2436,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_common_utils.h",
    "chars": 1093,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_ctx.c",
    "chars": 17778,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_ctx.h",
    "chars": 11616,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_ctx_vtable.h",
    "chars": 12501,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_init.h",
    "chars": 2215,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_observe.c",
    "chars": 10259,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_observe.h",
    "chars": 1698,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_parse_utils.h",
    "chars": 928,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_poison.h",
    "chars": 2930,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/avs_coap_x_log_config.h",
    "chars": 1153,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/options/avs_coap_iterator.c",
    "chars": 9125,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/options/avs_coap_iterator.h",
    "chars": 1940,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/options/avs_coap_option.c",
    "chars": 12140,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/options/avs_coap_option.h",
    "chars": 11177,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/options/avs_coap_options.c",
    "chars": 46291,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/options/avs_coap_options.h",
    "chars": 7761,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/streaming/avs_coap_streaming_client.c",
    "chars": 24852,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/streaming/avs_coap_streaming_client.h",
    "chars": 1701,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/streaming/avs_coap_streaming_server.c",
    "chars": 44305,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/streaming/avs_coap_streaming_server.h",
    "chars": 2183,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_ctx.c",
    "chars": 36599,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_ctx.h",
    "chars": 2447,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_header.c",
    "chars": 6455,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_header.h",
    "chars": 1733,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_msg.c",
    "chars": 5446,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_msg.h",
    "chars": 2857,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_pending_requests.c",
    "chars": 11274,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_pending_requests.h",
    "chars": 2067,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_signaling.c",
    "chars": 6021,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_signaling.h",
    "chars": 1971,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_utils.c",
    "chars": 1627,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/tcp/avs_coap_tcp_utils.h",
    "chars": 1089,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_ctx.c",
    "chars": 60493,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_ctx.h",
    "chars": 4424,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_header.h",
    "chars": 8140,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_msg.c",
    "chars": 8765,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_msg.h",
    "chars": 4471,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_msg_cache.c",
    "chars": 13017,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_msg_cache.h",
    "chars": 3504,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_tx_params.c",
    "chars": 2980,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/src/udp/avs_coap_udp_tx_params.h",
    "chars": 2615,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/CMakeLists.txt",
    "chars": 1225,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserved.\n#\n# Licensed under"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/coap_async_api_tcp.c",
    "chars": 16317,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/coap_async_api_udp.c",
    "chars": 15653,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/coap_parse.c",
    "chars": 559,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/input/coap_async_api_tcp.hex/recv_get_send_content",
    "chars": 1202,
    "preview": "0008 # in buf size\n0008 # out buf size\n0008 # opts buf size\n05 # request timeout in seconds\n00 # default mtu\n\n00 # mock_"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/input/coap_async_api_udp.hex/recv_get_send_content",
    "chars": 801,
    "preview": "0008 # in buf size\n0008 # out buf size\n00 # default tx params\n00 # no response cache\n00 # default mtu\n\n03 # handle incom"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/input/coap_async_api_udp.hex/send_block_put_recv_changed",
    "chars": 1142,
    "preview": "0008 # in buf size = 2 KB\n2200 # out buf size = 34 B\n00 # default tx params\n00 # no response cache\n00 # default mtu\n\n01 "
  },
  {
    "path": "deps/avs_coap/tests/fuzz/input/coap_async_api_udp.hex/send_get_recv_block_content",
    "chars": 1198,
    "preview": "0008 # in buf size\n0008 # out buf size\n00 # default tx params\n00 # no response cache\n00 # default mtu\n\n01 # send request"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/input/coap_async_api_udp.hex/send_get_recv_content",
    "chars": 549,
    "preview": "0008 # in buf size\n0008 # out buf size\n00 # default tx params\n00 # no response cache\n00 # default mtu\n\n01 # send request"
  },
  {
    "path": "deps/avs_coap/tests/fuzz/input/hex-to-fuzz-input.sh",
    "chars": 95,
    "preview": "#!/usr/bin/env bash\n\nsed -e 's/#.*$//g' | paste -sd\\  | sed -e 's/[^0-9a-fA-F]//g' | xxd -r -p\n"
  },
  {
    "path": "deps/avs_coap/tests/mock_clock.c",
    "chars": 1923,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/mock_clock.h",
    "chars": 527,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/options/option.c",
    "chars": 4245,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/options/options.c",
    "chars": 43032,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/socket.c",
    "chars": 730,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/socket.h",
    "chars": 606,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/async_client.c",
    "chars": 18935,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/async_server.c",
    "chars": 50276,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/csm.c",
    "chars": 9499,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/ctx.c",
    "chars": 1572,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/env.h",
    "chars": 8007,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/header.c",
    "chars": 4375,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/helper_functions.h",
    "chars": 3618,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/payload_escaper.c",
    "chars": 3207,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/requesting.c",
    "chars": 36583,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/responding.c",
    "chars": 24991,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/setsock.c",
    "chars": 976,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/tcp/utils.h",
    "chars": 7970,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/async_client.c",
    "chars": 73725,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/async_client_with_big_data.c",
    "chars": 2998,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/async_observe.c",
    "chars": 43621,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/async_server.c",
    "chars": 43317,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/big_data.h",
    "chars": 779,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/fuzzer_cases.c",
    "chars": 14702,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/msg.c",
    "chars": 16731,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/msg_cache.c",
    "chars": 16625,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/setsock.c",
    "chars": 1099,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/streaming_client.c",
    "chars": 18408,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/streaming_observe.c",
    "chars": 39381,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/streaming_server.c",
    "chars": 46474,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/tx_params_mock.h",
    "chars": 760,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/udp_tx_params.c",
    "chars": 17941,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/udp/utils.h",
    "chars": 32400,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/utils.c",
    "chars": 1332,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tests/utils.h",
    "chars": 18301,
    "preview": "/*\n * Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n * AVSystem CoAP library\n * All rights reserved.\n *\n * Licens"
  },
  {
    "path": "deps/avs_coap/tools/conditional_headers_whitelist.json",
    "chars": 158,
    "preview": "{\n    \"\": [\n        \"avs_coap_init\\\\.h\",\n        \"avs_coap_x_log_config\\\\.h\",\n        \"avsystem/coap/[^.]*\\\\.h\",\n       "
  },
  {
    "path": "deps/avs_coap/tools/coverage",
    "chars": 1754,
    "preview": "#!/usr/bin/env bash\n#\n# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem CoAP library\n# All rights reserv"
  },
  {
    "path": "devconfig",
    "chars": 5438,
    "preview": "#!/usr/bin/env bash\n#\n# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights res"
  },
  {
    "path": "doc/CMakeLists.txt",
    "chars": 6402,
    "preview": "# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights reserved.\n#\n# Licensed un"
  },
  {
    "path": "doc/sphinx/extensions/builders/__init__.py",
    "chars": 251,
    "preview": "# -*- coding: utf-8 -*-\n# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights r"
  },
  {
    "path": "doc/sphinx/extensions/builders/dummy.py",
    "chars": 798,
    "preview": "# -*- coding: utf-8 -*-\n#\n# Copyright 2017-2026 AVSystem <avsystem@avsystem.com>\n# AVSystem Anjay LwM2M SDK\n# All rights"
  }
]

// ... and 789 more files (download for full content)

About this extraction

This page contains the full source code of the AVSystem/Anjay GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 989 files (10.6 MB), approximately 2.8M tokens, and a symbol index with 9534 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!