I'm trying to build the zephyr/samples/net/sockets/http_client. I selected thingy91_nrf9160_ns for the board config and it builds and works fine. However when I enable
[235/288] Building C object zephyr/subsys/net/CMakeFiles/subsys__net.dir/lib/sockets/sockets_tls.c.obj C:/ncs/v2.6.1/zephyr/subsys/net/lib/sockets/sockets_tls.c: In function 'tls_session_store': C:/ncs/v2.6.1/zephyr/subsys/net/lib/sockets/sockets_tls.c:663:15: warning: implicit declaration of function 'mbedtls_ssl_get_session'; did you mean 'mbedtls_ssl_get_version'? [-Wimplicit-function-declaration] 663 | ret = mbedtls_ssl_get_session(&context->ssl, &session); | ^~~~~~~~~~~~~~~~~~~~~~~ | mbedtls_ssl_get_version
/* * Copyright (c) 2019 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #include <zephyr/logging/log.h> LOG_MODULE_REGISTER(lte_app, LOG_LEVEL_DBG); #include <zephyr/net/net_ip.h> #include <zephyr/net/socket.h> #include <zephyr/net/conn_mgr_monitor.h> #include <zephyr/net/conn_mgr_connectivity.h> #if defined(CONFIG_NET_SOCKETS_SOCKOPT_TLS) #include <modem/modem_key_mgmt.h> #include <zephyr/net/tls_credentials.h> #include "ca_certificate.h" #endif #include <zephyr/net/http/client.h> #include <zephyr/kernel.h> #include <zephyr/device.h> #include <zephyr/drivers/gpio.h> #include <dk_buttons_and_leds.h> #include <hal/nrf_power.h> // For the NVIC_SystemReset function #include <modem/lte_lc.h> #include <modem/nrf_modem_lib.h> #define BUTTON_PORT DT_GPIO_LABEL(DT_ALIAS(sw0), gpios) #define BUTTON_PIN DT_GPIO_PIN(DT_ALIAS(sw0), gpios) #define BUTTON_FLAGS (GPIO_INPUT | DT_GPIO_FLAGS(DT_ALIAS(sw0), gpios)) #define CHECK(r) { if (r == -1) { LOG_ERR("Error: " #r "\n"); exit(1); } } #if defined(CONFIG_NET_SOCKETS_SOCKOPT_TLS) #define HTTP_PORT 443 #else #define HTTP_PORT 80 #endif #define MAX_RECV_BUF_LEN 512 K_SEM_DEFINE(lte_connected, 0, 1); static uint8_t recv_buf[MAX_RECV_BUF_LEN]; static void button_handler(uint32_t button_state, uint32_t has_changed) { switch (has_changed) { case DK_BTN1_MSK: printk("Button pressed, restarting MCU...\n"); k_msleep(100); // Small delay to allow print message to be sent NVIC_SystemReset(); // Trigger a system reset break; } } static void lte_handler(const struct lte_lc_evt *const evt) { switch (evt->type) { case LTE_LC_EVT_NW_REG_STATUS: if ((evt->nw_reg_status != LTE_LC_NW_REG_REGISTERED_HOME) && (evt->nw_reg_status != LTE_LC_NW_REG_REGISTERED_ROAMING)) { break; } LOG_INF("Network registration status: %s", evt->nw_reg_status == LTE_LC_NW_REG_REGISTERED_HOME ? "Connected - home network" : "Connected - roaming"); k_sem_give(<e_connected); break; case LTE_LC_EVT_RRC_UPDATE: LOG_INF("RRC mode: %s", evt->rrc_mode == LTE_LC_RRC_MODE_CONNECTED ? "Connected" : "Idle"); break; default: break; } } static int modem_configure(void) { LOG_INF("Initializing modem library"); int err = nrf_modem_lib_init(); if (err) { LOG_ERR("Failed to initialize the modem library, error: %d", err); return err; } LOG_INF("Connecting to LTE network"); err = lte_lc_connect_async(lte_handler); if (err) { LOG_ERR("Error in lte_lc_connect_async, error: %d", err); return err; } k_sem_take(<e_connected, K_FOREVER); LOG_INF("Connected to LTE network"); dk_set_led_on(DK_LED2); return 0; } static int setup_socket(sa_family_t family, const char *server, int port, int *sock, struct sockaddr *addr, socklen_t addr_len) { const char *family_str = family == AF_INET ? "IPv4" : "IPv6"; int ret = 0; memset(addr, 0, addr_len); net_sin(addr)->sin_family = AF_INET; net_sin(addr)->sin_port = htons(port); inet_pton(family, server, &net_sin(addr)->sin_addr); if (IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS)) { sec_tag_t sec_tag_list[] = { CA_CERTIFICATE_TAG, }; *sock = socket(family, SOCK_STREAM, IPPROTO_TLS_1_2); if (*sock >= 0) { ret = setsockopt(*sock, SOL_TLS, TLS_SEC_TAG_LIST, sec_tag_list, sizeof(sec_tag_list)); if (ret < 0) { LOG_ERR("Failed to set %s secure option (%d)", family_str, -errno); ret = -errno; } ret = setsockopt(*sock, SOL_TLS, TLS_HOSTNAME, TLS_PEER_HOSTNAME, sizeof(TLS_PEER_HOSTNAME)); if (ret < 0) { LOG_ERR("Failed to set %s TLS_HOSTNAME option (%d)", family_str, -errno); ret = -errno; } } } else { *sock = socket(family, SOCK_STREAM, IPPROTO_TCP); LOG_INF("Socket created: %d", *sock); } if (*sock < 0) { LOG_ERR("Failed to create %s HTTP socket (%d)", family_str, -errno); } return ret; } static void response_cb(struct http_response *rsp, enum http_final_call final_data, void *user_data) { if (final_data == HTTP_DATA_MORE) { LOG_INF("Partial data received (%zd bytes)", rsp->data_len); } else if (final_data == HTTP_DATA_FINAL) { LOG_INF("All the data received (%zd bytes)", rsp->data_len); } LOG_INF("Response to %s", (const char *)user_data); LOG_INF("Response status %s", rsp->http_status); } static int connect_socket(sa_family_t family, const char *server, int port, int *sock, struct sockaddr *addr, socklen_t addr_len) { int ret = setup_socket(family, server, port, sock, addr, addr_len); if (ret < 0 || *sock < 0) { return -1; } ret = connect(*sock, addr, addr_len); if (ret < 0) { LOG_ERR("Cannot connect to %s remote (%d)", family == AF_INET ? "IPv4" : "IPv6", -errno); ret = -errno; } return ret; } static int run_query(void) { LOG_INF("Running query"); struct sockaddr_in addr4; int sock = -1; int32_t timeout = 3 * MSEC_PER_SEC; int ret = 0; if (IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS)) { ret = tls_credential_add(CA_CERTIFICATE_TAG, TLS_CREDENTIAL_CA_CERTIFICATE, ca_certificate, sizeof(ca_certificate)); if (ret < 0) { LOG_ERR("Failed to register public certificate: %d", ret); return ret; } } if (IS_ENABLED(CONFIG_NET_IPV4)) { (void)connect_socket(AF_INET, CONFIG_NET_CONFIG_PEER_IPV4_ADDR, HTTP_PORT, &sock, (struct sockaddr *)&addr4, sizeof(addr4)); } if (sock < 0) { LOG_ERR("Cannot create HTTP connection."); return -ECONNABORTED; } if (IS_ENABLED(CONFIG_NET_IPV4)) { struct http_request req; memset(&req, 0, sizeof(req)); req.method = HTTP_GET; req.url = "/"; req.host = CONFIG_NET_CONFIG_PEER_IPV4_ADDR; req.protocol = "HTTP/1.1"; req.response = response_cb; req.recv_buf = recv_buf; req.recv_buf_len = sizeof(recv_buf); ret = http_client_req(sock, &req, timeout, "IPv4 GET"); close(sock); } sock = -1; return ret; } int main(void) { if (dk_buttons_init(button_handler) != 0) { LOG_ERR("Failed to initialize the buttons library"); } if (dk_leds_init() != 0) { LOG_ERR("Failed to initialize the LED library"); } if (modem_configure()) { LOG_ERR("Failed to configure the modem"); return 0; } run_query(); dk_set_led_on(DK_LED2); k_sleep(K_FOREVER); exit(0); return 0; }
# Networking config CONFIG_NETWORKING=y CONFIG_NET_IPV4=y CONFIG_NET_TCP=y CONFIG_NET_NATIVE=n # Sockets CONFIG_NET_SOCKETS=y CONFIG_NET_SOCKETS_OFFLOAD=y CONFIG_NET_SOCKETS_POSIX_NAMES=y CONFIG_NET_SOCKETS_POLL_MAX=4 # Modem library CONFIG_NRF_MODEM_LIB=y # LTE link control CONFIG_LTE_LINK_CONTROL=y # Button and LED support CONFIG_DK_LIBRARY=y # Network driver config CONFIG_TEST_RANDOM_GENERATOR=y # Network address config CONFIG_NET_CONFIG_SETTINGS=y CONFIG_NET_CONFIG_NEED_IPV4=y CONFIG_NET_CONFIG_PEER_IPV4_ADDR="https://catfact.ninja/fact" # HTTP CONFIG_HTTP_CLIENT=y # Network debug config CONFIG_LOG=y CONFIG_LOG_MODE_IMMEDIATE=y CONFIG_NET_LOG=y CONFIG_NET_SOCKETS_LOG_LEVEL_DBG=y CONFIG_NET_HTTP_LOG_LEVEL_DBG=y # Memory CONFIG_MAIN_STACK_SIZE=4096 CONFIG_NET_BUF_RX_COUNT=80 CONFIG_NET_BUF_TX_COUNT=80 # TLS configuration CONFIG_NET_SOCKETS_SOCKOPT_TLS=y # CONFIG_MBEDTLS=y # CONFIG_MBEDTLS_BUILTIN=y # CONFIG_MBEDTLS_DEBUG=y # CONFIG_MBEDTLS_ENABLE_HEAP=y # CONFIG_MBEDTLS_HEAP_SIZE=60000 # CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=2048 # CONFIG_NET_SOCKETS_ENABLE_DTLS=y # CONFIG_NET_SOCKETS_TLS_MAX_CONTEXTS=6 # # CONFIG_MBEDTLS_CIPHER_C=y # # CONFIG_NRF_SECURITY=y # # CONFIG_MBEDTLS_TLS_LIBRARY=y # CONFIG_MODEM_KEY_MGMT=y ############## from https example code for nrf9160 ################# # CONFIG_HEAP_MEM_POOL_SIZE=1024 # CONFIG_NET_IPV6=y # CONFIG_NET_CONNECTION_MANAGER=y # CONFIG_NET_CONNECTION_MANAGER_MONITOR_STACK_SIZE=1024 # CONFIG_TFM_PROFILE_TYPE_NOT_SET=y # CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=4096 # CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 # CONFIG_MBEDTLS_RSA_C=y # CONFIG_MBEDTLS_TLS_LIBRARY=y # CONFIG_MBEDTLS_X509_LIBRARY=y # CONFIG_MBEDTLS_PKCS1_V15=y # CONFIG_NRF_SECURITY_ADVANCED=y # CONFIG_NORDIC_SECURITY_BACKEND=y # CONFIG_PSA_CRYPTO_DRIVER_CC3XX=y # CONFIG_PSA_WANT_ALG_SHA_1=y # CONFIG_PSA_WANT_ALG_RSA_PKCS1V15_CRYPT=y # CONFIG_PSA_WANT_ALG_RSA_PKCS1V15_SIGN=y # CONFIG_PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY=y # CONFIG_PSA_WANT_RSA_KEY_SIZE_1024=y # CONFIG_SAMPLE_TFM_MBEDTLS=y