dns_client: repeat same arguments with SSL_write

This commit is contained in:
Nick Peng
2020-08-13 00:56:51 +08:00
parent a300873b3f
commit da74e877c5
2 changed files with 16 additions and 1 deletions

View File

@@ -105,6 +105,7 @@ struct dns_server_info {
int ttl; int ttl;
int ttl_range; int ttl_range;
SSL *ssl; SSL *ssl;
int ssl_write_len;
SSL_CTX *ssl_ctx; SSL_CTX *ssl_ctx;
SSL_SESSION *ssl_session; SSL_SESSION *ssl_session;
char skip_check_cert; char skip_check_cert;
@@ -937,6 +938,7 @@ static void _dns_client_close_socket(struct dns_server_info *server_info)
} }
SSL_free(server_info->ssl); SSL_free(server_info->ssl);
server_info->ssl = NULL; server_info->ssl = NULL;
server_info->ssl_write_len = -1;
} }
/* remove fd from epoll */ /* remove fd from epoll */
@@ -1659,6 +1661,7 @@ static int _DNS_client_create_socket_tls(struct dns_server_info *server_info, ch
server_info->fd = fd; server_info->fd = fd;
server_info->ssl = ssl; server_info->ssl = ssl;
server_info->ssl_write_len = -1;
server_info->status = DNS_SERVER_STATUS_CONNECTING; server_info->status = DNS_SERVER_STATUS_CONNECTING;
tlog(TLOG_DEBUG, "tls server %s connecting.\n", server_info->ip); tlog(TLOG_DEBUG, "tls server %s connecting.\n", server_info->ip);
@@ -1891,7 +1894,18 @@ static int _dns_client_socket_send(struct dns_server_info *server_info)
} else if (server_info->type == DNS_SERVER_TCP) { } else if (server_info->type == DNS_SERVER_TCP) {
return send(server_info->fd, server_info->send_buff.data, server_info->send_buff.len, MSG_NOSIGNAL); return send(server_info->fd, server_info->send_buff.data, server_info->send_buff.len, MSG_NOSIGNAL);
} else if (server_info->type == DNS_SERVER_TLS || server_info->type == DNS_SERVER_HTTPS) { } else if (server_info->type == DNS_SERVER_TLS || server_info->type == DNS_SERVER_HTTPS) {
return _dns_client_socket_ssl_send(server_info->ssl, server_info->send_buff.data, server_info->send_buff.len); int write_len = server_info->send_buff.len;
if (server_info->ssl_write_len > 0) {
write_len = server_info->ssl_write_len;
server_info->ssl_write_len = -1;
}
int ret = _dns_client_socket_ssl_send(server_info->ssl, server_info->send_buff.data, write_len);
if (ret != 0) {
if (errno == EAGAIN) {
server_info->ssl_write_len = write_len;
}
}
return ret;
} else { } else {
return -1; return -1;
} }

View File

@@ -2439,6 +2439,7 @@ int dns_server_query(char *domain, int qtype, dns_result_callback callback, void
return ret; return ret;
errout: errout:
if (request) { if (request) {
_dns_server_request_set_callback(request, NULL, NULL);
_dns_server_request_release(request); _dns_server_request_release(request);
} }