已合并
HTTP多路并发指定网卡 #94
kurumi创建于 2025年12月25日
HTTP多路并发指定网卡 #94
已合并
共 6 个文件变更+43-3
| @@ -146,12 +146,14 @@ action("installCares") { | |||
| 146 | rebase_path(src_path, root_build_dir), | 146 | rebase_path(src_path, root_build_dir), |
| 147 | rebase_path(code_dir, root_build_dir), | 147 | rebase_path(code_dir, root_build_dir), |
| 148 | ] | 148 | ] |
| 149 | - inputs = [ src_path ] | 149 | + inputs = [] |
| 150 | outputs = [] | 150 | outputs = [] |
| 151 | foreach(src, cares_srcs) { | 151 | foreach(src, cares_srcs) { |
| 152 | + inputs += [ "$src_path/src/lib/" + src ] | ||
| 152 | outputs += [ "$code_dir/src/lib/" + src ] | 153 | outputs += [ "$code_dir/src/lib/" + src ] |
| 153 | } | 154 | } |
| 154 | foreach(test, sources_test) { | 155 | foreach(test, sources_test) { |
| 156 | + inputs += [ "$src_path/" + test ] | ||
| 155 | outputs += [ "$code_dir/" + test ] | 157 | outputs += [ "$code_dir/" + test ] |
| 156 | } | 158 | } |
| 157 | } | 159 | } |
| @@ -519,6 +519,9 @@ CARES_EXTERN void ares_set_local_ip6(ares_channel_t *channel, | |||
| 519 | CARES_EXTERN void ares_set_local_dev(ares_channel_t *channel, | 519 | CARES_EXTERN void ares_set_local_dev(ares_channel_t *channel, |
| 520 | const char *local_dev_name); | 520 | const char *local_dev_name); |
| 521 | 521 | ||
| 522 | +CARES_EXTERN void ares_set_dns_netid(ares_channel_t *channel, | ||
| 523 | + int32_t netId); | ||
| 524 | + | ||
| 522 | CARES_EXTERN void ares_set_socket_callback(ares_channel_t *channel, | 525 | CARES_EXTERN void ares_set_socket_callback(ares_channel_t *channel, |
| 523 | ares_sock_create_callback callback, | 526 | ares_sock_create_callback callback, |
| 524 | void *user_data); | 527 | void *user_data); |
| @@ -478,8 +478,11 @@ ares_cached_addrinfo_to_ares_addrinfo(const ares_cached_addrinfo cached_addrinfo | |||
| 478 | } | 478 | } |
| 479 | 479 | ||
| 480 | struct ares_addrinfo * | 480 | struct ares_addrinfo * |
| 481 | -ares_get_dns_cache(const char *host, const char *service, const struct ares_addrinfo_hints *hints) { | 481 | +#ifdef HAS_NETMANAGER_BASE |
| 482 | - ares_cache_key_param_wrapper param = {0}; | 482 | + ares_get_dns_cache(const char *host, const char *service, const struct ares_addrinfo_hints *hints, int32_t netId) { |
| 483 | + | ||
| 484 | + ares_get_dns_cache(const char *host, const char *service, const struct ares_addrinfo_hints *hints) { | ||
| 485 | + | ||
| 483 | param.host = (char *) host; | 486 | param.host = (char *) host; |
| 484 | param.serv = (char *) service; | 487 | param.serv = (char *) service; |
| 485 | struct addrinfo hint = {0}; | 488 | struct addrinfo hint = {0}; |
| @@ -496,7 +499,11 @@ ares_get_dns_cache(const char *host, const char *service, const struct ares_addr | |||
| 496 | } | 499 | } |
| 497 | 500 | ||
| 498 | void ares_set_dns_cache(const char *host, const char *service, const struct ares_addrinfo_hints *hints, | 501 | void ares_set_dns_cache(const char *host, const char *service, const struct ares_addrinfo_hints *hints, |
| 502 | + | ||
| 503 | + const struct ares_addrinfo *res, int32_t netId) { | ||
| 504 | + | ||
| 499 | const struct ares_addrinfo *res) { | 505 | const struct ares_addrinfo *res) { |
| 506 | + | ||
| 500 | ares_cache_key_param_wrapper param = {0}; | 507 | ares_cache_key_param_wrapper param = {0}; |
| 501 | param.host = (char *) host; | 508 | param.host = (char *) host; |
| 502 | param.serv = (char *) service; | 509 | param.serv = (char *) service; |
| @@ -775,7 +782,11 @@ static void end_hquery(struct host_query *hquery, ares_status_t status) | |||
| 775 | 782 | ||
| 776 | char serv[12] = {0}; | 783 | char serv[12] = {0}; |
| 777 | sprintf(serv, "%d", hquery->port); | 784 | sprintf(serv, "%d", hquery->port); |
| 785 | + | ||
| 786 | + ares_set_dns_cache(hquery->name, serv, &hquery->hints, hquery->ai, hquery->channel->netId); | ||
| 787 | + | ||
| 778 | ares_set_dns_cache(hquery->name, serv, &hquery->hints, hquery->ai); | 788 | ares_set_dns_cache(hquery->name, serv, &hquery->hints, hquery->ai); |
| 789 | + | ||
| 779 | hquery->process_info.hostname = hquery->name; | 790 | hquery->process_info.hostname = hquery->name; |
| 780 | hquery->process_info.retCode = status; | 791 | hquery->process_info.retCode = status; |
| 781 | int allDuration = ares_get_now_time() - hquery->process_info.queryTime; | 792 | int allDuration = ares_get_now_time() - hquery->process_info.queryTime; |
| @@ -1026,7 +1037,11 @@ static void ares_getaddrinfo_int(ares_channel_t *channel, const char *name, | |||
| 1026 | { | 1037 | { |
| 1027 | 1038 | ||
| 1028 | long long time_now = ares_get_now_time(); | 1039 | long long time_now = ares_get_now_time(); |
| 1040 | + | ||
| 1041 | + struct ares_addrinfo *cache_res = ares_get_dns_cache(name, service, hints, channel->netId); | ||
| 1042 | + | ||
| 1029 | struct ares_addrinfo *cache_res = ares_get_dns_cache(name, service, hints); | 1043 | struct ares_addrinfo *cache_res = ares_get_dns_cache(name, service, hints); |
| 1044 | + | ||
| 1030 | if (cache_res && cache_res->nodes) { | 1045 | if (cache_res && cache_res->nodes) { |
| 1031 | ares_record_process(ARES_SUCCESS, name, time_now, cache_res, NULL); | 1046 | ares_record_process(ARES_SUCCESS, name, time_now, cache_res, NULL); |
| 1032 | callback(arg, ARES_SUCCESS, 0, cache_res); | 1047 | callback(arg, ARES_SUCCESS, 0, cache_res); |
| @@ -498,6 +498,9 @@ int ares_dup(ares_channel_t **dest, const ares_channel_t *src) | |||
| 498 | (*dest)->legacy_sock_funcs_cb_data = src->legacy_sock_funcs_cb_data; | 498 | (*dest)->legacy_sock_funcs_cb_data = src->legacy_sock_funcs_cb_data; |
| 499 | (*dest)->server_state_cb = src->server_state_cb; | 499 | (*dest)->server_state_cb = src->server_state_cb; |
| 500 | (*dest)->server_state_cb_data = src->server_state_cb_data; | 500 | (*dest)->server_state_cb_data = src->server_state_cb_data; |
| 501 | + | ||
| 502 | + (*dest)->netId = src->netId; | ||
| 503 | + | ||
| 501 | 504 | ||
| 502 | ares_strcpy((*dest)->local_dev_name, src->local_dev_name, | 505 | ares_strcpy((*dest)->local_dev_name, src->local_dev_name, |
| 503 | sizeof((*dest)->local_dev_name)); | 506 | sizeof((*dest)->local_dev_name)); |
| @@ -577,6 +580,18 @@ void ares_set_local_dev(ares_channel_t *channel, const char *local_dev_name) | |||
| 577 | ares_channel_unlock(channel); | 580 | ares_channel_unlock(channel); |
| 578 | } | 581 | } |
| 579 | 582 | ||
| 583 | + | ||
| 584 | +void ares_set_dns_netid(ares_channel_t *channel, int32_t netId) | ||
| 585 | +{ | ||
| 586 | + if (channel == NULL) { | ||
| 587 | + return; | ||
| 588 | + } | ||
| 589 | + ares_channel_lock(channel); | ||
| 590 | + channel->netId = netId; | ||
| 591 | + ares_channel_unlock(channel); | ||
| 592 | +} | ||
| 593 | + | ||
| 594 | + | ||
| 580 | int ares_set_sortlist(ares_channel_t *channel, const char *sortstr) | 595 | int ares_set_sortlist(ares_channel_t *channel, const char *sortstr) |
| 581 | { | 596 | { |
| 582 | size_t nsort = 0; | 597 | size_t nsort = 0; |
| @@ -222,6 +222,7 @@ struct ares_channeldata { | |||
| 222 | char local_dev_name[32]; | 222 | char local_dev_name[32]; |
| 223 | unsigned int local_ip4; | 223 | unsigned int local_ip4; |
| 224 | unsigned char local_ip6[16]; | 224 | unsigned char local_ip6[16]; |
| 225 | + int32_t netId; | ||
| 225 | 226 | ||
| 226 | /* Thread safety lock */ | 227 | /* Thread safety lock */ |
| 227 | ares_thread_mutex_t *lock; | 228 | ares_thread_mutex_t *lock; |
| @@ -76,7 +76,11 @@ static ares_status_t ares_init_sysconfig_netsys(const ares_channel_t *channel, | |||
| 76 | { | 76 | { |
| 77 | struct resolv_config config = {0}; | 77 | struct resolv_config config = {0}; |
| 78 | int ret = 0; | 78 | int ret = 0; |
| 79 | + | ||
| 80 | + int netid = channel->netId; | ||
| 81 | + | ||
| 79 | int netid = 0; | 82 | int netid = 0; |
| 83 | + | ||
| 80 | ares_status_t status = ARES_EFILE; | 84 | ares_status_t status = ARES_EFILE; |
| 81 | 85 | ||
| 82 | ret = NetSysGetResolvConfExt(netid, &config); | 86 | ret = NetSysGetResolvConfExt(netid, &config); |