Merge pull request #10 from chenyong111/master

修复开启TLS时webclient_close重复释放socket问题
master
朱天龙 (Armink) 7 years ago committed by GitHub
commit 14fa92757b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -163,7 +163,6 @@ static int webclient_resolve_address(struct webclient_session *session, struct a
int rc = WEBCLIENT_OK; int rc = WEBCLIENT_OK;
char *ptr; char *ptr;
char port_str[6] = "80"; /* default port of 80(http) */ char port_str[6] = "80"; /* default port of 80(http) */
char port_tls_str[6] = "443"; /* default port of 443(https) */
const char *host_addr = 0; const char *host_addr = 0;
int url_len, host_addr_len = 0; int url_len, host_addr_len = 0;
@ -177,6 +176,7 @@ static int webclient_resolve_address(struct webclient_session *session, struct a
} }
else if(strncmp(url, "https://", 8) == 0) else if(strncmp(url, "https://", 8) == 0)
{ {
strncpy(port_str, "443", 4);
host_addr = url + 8; host_addr = url + 8;
} }
else else
@ -240,7 +240,7 @@ static int webclient_resolve_address(struct webclient_session *session, struct a
{ {
int port_tls_len = ptr - port_tls_ptr - 1; int port_tls_len = ptr - port_tls_ptr - 1;
strncpy(port_tls_str, port_tls_ptr + 1, port_tls_len); strncpy(port_str, port_tls_ptr + 1, port_tls_len);
port_str[port_tls_len] = '\0'; port_str[port_tls_len] = '\0';
host_addr_len = port_tls_ptr - host_addr; host_addr_len = port_tls_ptr - host_addr;
@ -310,8 +310,8 @@ static int webclient_resolve_address(struct webclient_session *session, struct a
#ifdef WEBCLIENT_USING_TLS #ifdef WEBCLIENT_USING_TLS
if(session->tls_session) if(session->tls_session)
{ {
session->tls_session->port = rt_strdup(port_tls_str); session->tls_session->port = rt_strdup(port_str);
ret = getaddrinfo(session->tls_session->host, port_tls_str, &hint, res); ret = getaddrinfo(session->tls_session->host, port_str, &hint, res);
if (ret != 0) if (ret != 0)
{ {
rt_kprintf("getaddrinfo err: %d '%s'\n", ret, session->host); rt_kprintf("getaddrinfo err: %d '%s'\n", ret, session->host);
@ -1105,9 +1105,10 @@ int webclient_close(struct webclient_session *session)
#ifdef WEBCLIENT_USING_TLS #ifdef WEBCLIENT_USING_TLS
if(session->tls_session) if(session->tls_session)
mbedtls_client_close(session->tls_session); mbedtls_client_close(session->tls_session);
#endif #else
if (session->socket >= 0) if (session->socket >= 0)
closesocket(session->socket); closesocket(session->socket);
#endif
if(session->transfer_encoding) if(session->transfer_encoding)
web_free(session->transfer_encoding); web_free(session->transfer_encoding);
if(session->content_type) if(session->content_type)

Loading…
Cancel
Save