From 8a9dc26e8be23e06901db8f8c2e8ce866843cb71 Mon Sep 17 00:00:00 2001 From: chenyong <1521761801@qq.com> Date: Thu, 15 Nov 2018 10:33:07 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BF=AE=E5=A4=8D=E3=80=91=E5=BC=80?= =?UTF-8?q?=E5=90=AF=20MbedTLS=20=E6=94=AF=E6=8C=81=E5=90=8E=20getaddrinfo?= =?UTF-8?q?()=20=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenyong <1521761801@qq.com> --- src/webclient.c | 48 +++++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/src/webclient.c b/src/webclient.c index 1a12202..9d68fa1 100644 --- a/src/webclient.c +++ b/src/webclient.c @@ -225,39 +225,30 @@ static int webclient_resolve_address(struct webclient_session *session, struct a memcpy(host_addr_new, host_addr, host_addr_len); host_addr_new[host_addr_len] = '\0'; session->host = host_addr_new; - -#ifdef WEBCLIENT_USING_MBED_TLS - if (session->tls_session) - { - session->tls_session->host = web_strdup(host_addr_new); - } -#endif } LOG_D("host address: %s , port: %s", session->host, port_str); +#ifdef WEBCLIENT_USING_MBED_TLS + if (session->tls_session) + { + session->tls_session->port = web_strdup(port_str); + session->tls_session->host = web_strdup(session->host); + if (session->tls_session->port == RT_NULL || session->tls_session->host == RT_NULL) + { + return -WEBCLIENT_NOMEM; + } + + return rc; + } +#endif + /* resolve the host name. */ { struct addrinfo hint; int ret; rt_memset(&hint, 0, sizeof(hint)); - -#ifdef WEBCLIENT_USING_MBED_TLS - if (session->tls_session) - { - session->tls_session->port = web_strdup(port_str); - ret = getaddrinfo(session->tls_session->host, port_str, &hint, res); - if (ret != 0) - { - LOG_E("getaddrinfo err: %d '%s'", ret, session->host); - rc = -WEBCLIENT_ERROR; - } - - goto __exit; - } -#endif - ret = getaddrinfo(session->host, port_str, &hint, res); if (ret != 0) { @@ -265,8 +256,8 @@ static int webclient_resolve_address(struct webclient_session *session, struct a rc = -WEBCLIENT_ERROR; goto __exit; } - } + __exit: if (rc != WEBCLIENT_OK) { @@ -379,7 +370,8 @@ static int webclient_connect(struct webclient_session *session, const char *URI) goto __exit; } - if (!res) + /* Not use 'getaddrinfo()' for https connection */ + if (session->is_tls == RT_FALSE && res == RT_NULL) { rc = -WEBCLIENT_ERROR; goto __exit; @@ -411,8 +403,7 @@ static int webclient_connect(struct webclient_session *session, const char *URI) if ((tls_ret = mbedtls_client_connect(session->tls_session)) < 0) { LOG_E("connect failed, https client connect return: -0x%x", -tls_ret); - rc = -WEBCLIENT_CONNECT_FAILED; - goto __exit; + return -WEBCLIENT_CONNECT_FAILED; } socket_handle = session->tls_session->server_fd.fd; @@ -425,8 +416,7 @@ static int webclient_connect(struct webclient_session *session, const char *URI) session->socket = socket_handle; - rc = WEBCLIENT_OK; - goto __exit; + return WEBCLIENT_OK; } #endif