diff --git a/include/net/mqtt.h b/include/net/mqtt.h index 8e726bdd28d..a939be9f6b0 100644 --- a/include/net/mqtt.h +++ b/include/net/mqtt.h @@ -354,6 +354,9 @@ struct mqtt_sec_config { * May be NULL to skip hostname verification. */ const char *hostname; + + /** Indicates the preference for copying certificates to the heap. */ + int cert_nocopy; }; /** @brief MQTT transport type. */ diff --git a/subsys/net/lib/mqtt/mqtt_transport_socket_tls.c b/subsys/net/lib/mqtt/mqtt_transport_socket_tls.c index 7f6faf6e4d5..faf5e5c00c7 100644 --- a/subsys/net/lib/mqtt/mqtt_transport_socket_tls.c +++ b/subsys/net/lib/mqtt/mqtt_transport_socket_tls.c @@ -78,6 +78,15 @@ int mqtt_client_tls_connect(struct mqtt_client *client) } } + if (tls_config->cert_nocopy != TLS_CERT_NOCOPY_NONE) { + ret = zsock_setsockopt(client->transport.tls.sock, SOL_TLS, + TLS_CERT_NOCOPY, &tls_config->cert_nocopy, + sizeof(tls_config->cert_nocopy)); + if (ret < 0) { + goto error; + } + } + size_t peer_addr_size = sizeof(struct sockaddr_in6); if (broker->sa_family == AF_INET) {