fix(nat): keep fresh ingress checks active during profile rechecks
This commit is contained in:
1 parent
6ad3674904
commit
a72e514dc5
2 files changed
+9
-2
No files matched your search
@@ -77,6 +77,11 @@ IP:порт тестового сокета на том же локальном
|
|||||||
Уже знакомый помощник пригоден для измерения типа NAT, хотя проверить незнакомый
|
Уже знакомый помощник пригоден для измерения типа NAT, хотя проверить незнакомый
|
||||||
вход через него нельзя. Потеря результата входящих не останавливает сравнение
|
вход через него нельзя. Потеря результата входящих не останавливает сравнение
|
||||||
адресов через доступные публичные узлы; ожидание одного этапа ограничено по времени.
|
адресов через доступные публичные узлы; ожидание одного этапа ограничено по времени.
|
||||||
|
Измеренный mapping сохраняется сразу, а проверка незнакомого входа продолжается
|
||||||
|
через остальных помощников. Порядок обхода фиксирован на его начало; фактический
|
||||||
|
source всегда проверяется по актуальной истории. При паузе по общему бюджету
|
||||||
|
незавершённая попытка повторяется с новыми идентификаторами, без сброса обхода.
|
||||||
|
Старый сохранённый результат входящих не считается успехом новой проверки.
|
||||||
|
|
||||||
Соединения по LAN работают независимо и не сбрасывают интернет-профиль.
|
Соединения по LAN работают независимо и не сбрасывают интернет-профиль.
|
||||||
Если доступны только локальные узлы, измерить тип интернет-NAT для UDP нельзя.
|
Если доступны только локальные узлы, измерить тип интернет-NAT для UDP нельзя.
|
||||||
|
|||||||
@@ -1421,7 +1421,8 @@ uint64_t nat_detection_probe_delay(struct NAT_DETECTION *detector) {
|
|||||||
if (state->socket->is_tcp || !state->reservation_fingerprint || state->cold_until <= now ||
|
if (state->socket->is_tcp || !state->reservation_fingerprint || state->cold_until <= now ||
|
||||||
(!detector->automatic && !state->phase && !state->forced) ||
|
(!detector->automatic && !state->phase && !state->forced) ||
|
||||||
(state->completed_tb && !state->phase && !state->cycling && !state->forced && state->due > now + 2500) ||
|
(state->completed_tb && !state->phase && !state->cycling && !state->forced && state->due > now + 2500) ||
|
||||||
(state->measured_profile.source == ADDRESS_SOURCE_ETCP && state->measured_profile.mapping && state->measured_profile.inbound))
|
(!state->phase && !state->cycling && !state->forced && state->measured_profile.source == ADDRESS_SOURCE_ETCP &&
|
||||||
|
state->measured_profile.mapping && state->measured_profile.inbound))
|
||||||
continue;
|
continue;
|
||||||
if (state->cold_until - now > delay) delay = state->cold_until - now;
|
if (state->cold_until - now > delay) delay = state->cold_until - now;
|
||||||
}
|
}
|
||||||
@@ -1437,7 +1438,8 @@ int nat_detection_ping_allowed(struct NAT_DETECTION *detector, struct ETCP_SOCKE
|
|||||||
if (!state || (!state->reservation_fingerprint && !state->available_fingerprint) || state->cold_until <= get_time_tb() ||
|
if (!state || (!state->reservation_fingerprint && !state->available_fingerprint) || state->cold_until <= get_time_tb() ||
|
||||||
(!detector->automatic && !state->phase && !state->forced) ||
|
(!detector->automatic && !state->phase && !state->forced) ||
|
||||||
(state->completed_tb && !state->phase && !state->cycling && !state->forced && state->due > get_time_tb() + 2500) ||
|
(state->completed_tb && !state->phase && !state->cycling && !state->forced && state->due > get_time_tb() + 2500) ||
|
||||||
(state->measured_profile.source == ADDRESS_SOURCE_ETCP && state->measured_profile.mapping && state->measured_profile.inbound)) return 1;
|
(!state->phase && !state->cycling && !state->forced && state->measured_profile.source == ADDRESS_SOURCE_ETCP &&
|
||||||
|
state->measured_profile.mapping && state->measured_profile.inbound)) return 1;
|
||||||
uint64_t peer = sc_derive_node_id_from_pubkey(peer_key);
|
uint64_t peer = sc_derive_node_id_from_pubkey(peer_key);
|
||||||
if (!(flags & ETCP_PING_FLAG_OBSERVE)) {
|
if (!(flags & ETCP_PING_FLAG_OBSERVE)) {
|
||||||
history_load(state);
|
history_load(state);
|
||||||
|
|||||||
Reference in new issue
Block a user