Quantcast
Channel: Active questions tagged https - Stack Overflow
Viewing all articles
Browse latest Browse all 1634

ESP32 Ethernet HTTPS Request Fails with "tcpip_send_msg_wait_sem" Assertion Error

$
0
0

I'm trying to make an HTTPS GET request using Ethernet on an ESP32 with a W5500 Ethernet module. My HTTP request (non-secure) works fine, but when I switch to HTTPS using mbedTLS, I get the following error:

assert failed: tcpip_send_msg_wait_sem IDF/components/lwip/lwip/src/api/tcpip.c:455 (Invalid mbox)

Here is the part of my code:

#include <SPI.h>#include <Ethernet.h>#include "mbedtls/net_sockets.h"#include "mbedtls/ssl.h"#include "mbedtls/x509.h"#include "mbedtls/entropy.h"#include "mbedtls/ctr_drbg.h"#define W5500_CS 5  // Chip Select for W5500byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };IPAddress ip(192, 168, 1, 100);const char *SERVER_HOST = "api.example.com";const char *SERVER_PORT = "443";mbedtls_ssl_context ssl;mbedtls_ssl_config conf;mbedtls_net_context server_fd;mbedtls_entropy_context entropy;mbedtls_ctr_drbg_context ctr_drbg;mbedtls_x509_crt cacert;void setup() {    Serial.begin(115200);    SPI.begin();    Ethernet.init(W5500_CS);    if (Ethernet.begin(mac) == 0) {        Serial.println("Ethernet init failed!");        return;    }    // Initialize mbedTLS    mbedtls_net_init(&server_fd);    mbedtls_ssl_init(&ssl);    mbedtls_ssl_config_init(&conf);    mbedtls_entropy_init(&entropy);    mbedtls_ctr_drbg_init(&ctr_drbg);    mbedtls_x509_crt_init(&cacert);    mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, NULL, 0);    mbedtls_ssl_config_defaults(&conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT);    mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctr_drbg);    mbedtls_ssl_setup(&ssl, &conf);    mbedtls_ssl_set_hostname(&ssl, SERVER_HOST);    // Connect to server    if (mbedtls_net_connect(&server_fd, SERVER_HOST, SERVER_PORT, MBEDTLS_NET_PROTO_TCP) != 0) {        Serial.println("Failed to connect to server");        return;    }    mbedtls_ssl_set_bio(&ssl, &server_fd, mbedtls_net_send, mbedtls_net_recv, NULL);    // Perform SSL Handshake    int handshake_status = mbedtls_ssl_handshake(&ssl);    if (handshake_status != 0) {        Serial.printf("TLS Handshake failed! Error code: %d\n", handshake_status);        return;    }    // Send HTTPS GET Request    const char *GET_REQUEST = "GET /data HTTP/1.1\r\nHost: api.example.com\r\nConnection: close\r\n\r\n";    if (mbedtls_ssl_write(&ssl, (const unsigned char *)GET_REQUEST, strlen(GET_REQUEST)) < 0) {        Serial.println("Failed to send request");        return;    }    // Read Response    char buffer[1024];    int len = mbedtls_ssl_read(&ssl, (unsigned char *)buffer, sizeof(buffer) - 1);    if (len > 0) {        buffer[len] = '\0';        Serial.println(buffer);    } else {        Serial.println("No response received");    }    mbedtls_ssl_close_notify(&ssl);    mbedtls_net_free(&server_fd);}void loop() {}```

Viewing all articles
Browse latest Browse all 1634

Trending Articles