|
|
|
@ -1096,9 +1096,11 @@ static void relay_test_status(struct ETCP_CONN *conn, struct ll_entry *entry) { |
|
|
|
&& entry->dgram[ROUTER_SVC_PAYLOAD_OFF + 2] == STREAM_CMD_RELAY_STATUS) { |
|
|
|
&& entry->dgram[ROUTER_SVC_PAYLOAD_OFF + 2] == STREAM_CMD_RELAY_STATUS) { |
|
|
|
relay_statuses_seen++; |
|
|
|
relay_statuses_seen++; |
|
|
|
size_t payload = ROUTER_SVC_PAYLOAD_OFF + STREAM_WIRE_HEADER; |
|
|
|
size_t payload = ROUTER_SVC_PAYLOAD_OFF + STREAM_WIRE_HEADER; |
|
|
|
if (relay_race.hold_ready && entry->len > payload && entry->dgram[payload] == STREAM_RELAY_READY) { |
|
|
|
if (relay_race.hold_ready && entry->len > payload |
|
|
|
|
|
|
|
&& (entry->dgram[payload] == STREAM_RELAY_READY || entry->dgram[payload] == STREAM_RELAY_BOUND)) { |
|
|
|
relay_race.ready_held++; |
|
|
|
relay_race.ready_held++; |
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_STREAM, "bootstrap test holds READY ordinal=%u", relay_race.ready_held); |
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_STREAM, "bootstrap test holds availability status=%u ordinal=%u", |
|
|
|
|
|
|
|
entry->dgram[payload], relay_race.ready_held); |
|
|
|
queue_dgram_free(entry); queue_entry_free(entry); return; |
|
|
|
queue_dgram_free(entry); queue_entry_free(entry); return; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1206,7 +1208,7 @@ static void test_supernode_relay(void) { |
|
|
|
CHECK(stream_subscribe_open(nodes[2], GROUP2, nodes[3]->node_id, &viewers[2]) == STREAM_OK); |
|
|
|
CHECK(stream_subscribe_open(nodes[2], GROUP2, nodes[3]->node_id, &viewers[2]) == STREAM_OK); |
|
|
|
test_clock_run_for(ua, 500); stream_close(viewers[2]); viewers[2] = NULL; |
|
|
|
test_clock_run_for(ua, 500); stream_close(viewers[2]); viewers[2] = NULL; |
|
|
|
test_clock_run_for(ua, 2000); CHECK(relay_requests_seen == requests_before); |
|
|
|
test_clock_run_for(ua, 2000); CHECK(relay_requests_seen == requests_before); |
|
|
|
/* Merkle объявляет буфер помощника раньше STATUS READY: выбранная выдача должна удержать STARTING-запрос. */ |
|
|
|
/* Merkle объявляет буфер до STATUS READY/BOUND: выбранная выдача должна удержать STARTING-запрос. */ |
|
|
|
memset(&relay_race, 0, sizeof(relay_race)); relay_race.hold_ready = relay_race.watch_provider = 1; |
|
|
|
memset(&relay_race, 0, sizeof(relay_race)); relay_race.hold_ready = relay_race.watch_provider = 1; |
|
|
|
relay_race.epoch = origin.descriptor.source_epoch; |
|
|
|
relay_race.epoch = origin.descriptor.source_epoch; |
|
|
|
relay_drop_source = 1; |
|
|
|
relay_drop_source = 1; |
|
|
|
@ -1222,7 +1224,7 @@ static void test_supernode_relay(void) { |
|
|
|
CHECK(relay_race.provider_info_tb - relay_race.provider_tb < 2000); |
|
|
|
CHECK(relay_race.provider_info_tb - relay_race.provider_tb < 2000); |
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "[PASS] provider callback starts INFO without 1s roster wait: elapsed_ms=%llu", |
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "[PASS] provider callback starts INFO without 1s roster wait: elapsed_ms=%llu", |
|
|
|
(unsigned long long)((relay_race.provider_info_tb - relay_race.provider_tb) / 10)); |
|
|
|
(unsigned long long)((relay_race.provider_info_tb - relay_race.provider_tb) / 10)); |
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "[PASS] helper INFO before delayed READY keeps selected pending issuance; no premature CANCEL"); |
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_STREAM, "[PASS] helper INFO before delayed READY/BOUND keeps selected pending issuance; no premature CANCEL"); |
|
|
|
test_clock_run_for(ua, 2000); |
|
|
|
test_clock_run_for(ua, 2000); |
|
|
|
struct stream_selection_info stable_before, stable_after; |
|
|
|
struct stream_selection_info stable_before, stable_after; |
|
|
|
CHECK(stream_selection_get_info(viewers[2], &stable_before) == STREAM_OK); |
|
|
|
CHECK(stream_selection_get_info(viewers[2], &stable_before) == STREAM_OK); |
|
|
|
|