TlsTransportStatus_t TLS_FreeRTOS_Connect()

in components/network_transport/source/tls_freertos.c [42:109]


TlsTransportStatus_t TLS_FreeRTOS_Connect( NetworkContext_t * pNetworkContext,
                                           const char * pHostName,
                                           uint16_t port,
                                           const NetworkCredentials_t * pNetworkCredentials,
                                           uint32_t receiveTimeoutMs,
                                           uint32_t sendTimeoutMs )
{
    TlsTransportStatus_t returnStatus = TLS_TRANSPORT_SUCCESS;

    if( ( pNetworkContext == NULL ) ||
        ( pHostName == NULL ) ||
        ( pNetworkCredentials == NULL ) )
    {
        ESP_LOGE(TAG, "Invalid input parameter(s): Arguments cannot be NULL. pNetworkContext=%p, "
                    "pHostName=%p, pNetworkCredentials=%p.",
                    pNetworkContext,
                    pHostName,
                    pNetworkCredentials);
        return TLS_TRANSPORT_INVALID_PARAMETER;
    }
    
    pNetworkContext->transport = esp_transport_ssl_init();
    pNetworkContext->receiveTimeoutMs = receiveTimeoutMs;
    pNetworkContext->sendTimeoutMs = sendTimeoutMs;
    if (pNetworkCredentials->pAlpnProtos) {
        esp_transport_ssl_set_alpn_protocol(pNetworkContext->transport, pNetworkCredentials->pAlpnProtos);
    }

    if (pNetworkCredentials->disableSni) {
        esp_transport_ssl_skip_common_name_check(pNetworkContext->transport);
    }

    if (pNetworkCredentials->pRootCa) {
        esp_transport_ssl_set_cert_data_der(pNetworkContext->transport, (const char *)pNetworkCredentials->pRootCa, pNetworkCredentials->rootCaSize);
    }

    if (pNetworkCredentials->pClientCert) {
        esp_transport_ssl_set_client_cert_data_der(pNetworkContext->transport, (const char *)pNetworkCredentials->pClientCert, pNetworkCredentials->clientCertSize);
    }

    if (pNetworkCredentials->pPrivateKey) {
        esp_transport_ssl_set_client_key_data_der(pNetworkContext->transport, (const char *)pNetworkCredentials->pPrivateKey, pNetworkCredentials->privateKeySize);
    }

    if (esp_transport_connect(pNetworkContext->transport, pHostName, port, receiveTimeoutMs) < 0) {
        returnStatus = TLS_TRANSPORT_CONNECT_FAILURE;
    } else {
        returnStatus = TLS_TRANSPORT_SUCCESS;
    }

    /* Clean up on failure. */
    if( returnStatus != TLS_TRANSPORT_SUCCESS )
    {
        if( pNetworkContext != NULL )
        {
            esp_transport_close( pNetworkContext->transport );
            esp_transport_destroy( pNetworkContext->transport );
        }
    }
    else
    {
        ESP_LOGI(TAG, "(Network connection %p) Connection to %s established.",
                   pNetworkContext,
                   pHostName);
    }

    return returnStatus;
}