diff --git a/src/stream/stream_network.h b/src/stream/stream_network.h index 2ae9b0b4..54f9b3a2 100644 --- a/src/stream/stream_network.h +++ b/src/stream/stream_network.h @@ -24,7 +24,17 @@ struct stream_receive_info { struct stream_metric_snapshot metrics, supplier_metrics; uint32_t rtt_ms; int metrics_valid, supplier_metrics_valid, rtt_valid, close_requested; + struct stream_path path; + uint64_t first_available, last_available, info_ms, supplier_queue_bytes, progress_age_ms; + uint32_t path_rtt_ms; + uint16_t free_slots, cpu_basis_points; + uint8_t subblock; + int info_ready, probe_only, accepting, path_rtt_valid, progress_valid, cpu_valid; }; +/* INFO без выделения remote handle и без DATA; close обязателен также после detach. + * После ready можно тем же NCD-владением последовательно опросить остальные субпотоки. */ +int stream_probe_open(struct STREAM_HANDLE *subscription, uint64_t peer, uint8_t subblock, struct STREAM_RECEIVE **out); +int stream_probe_next(struct STREAM_RECEIVE *probe, uint8_t subblock); /* out заранее NULL; seq=UINT64_MAX: первая выдача с конца, остальные ждут её проверенный общий старт. * peer должен быть онлайн-кандидатом группы. Повтор peer+stream+sub не создаёт вторую выдачу. */ int stream_receive_open(struct STREAM_HANDLE *subscription, uint64_t peer, uint8_t subblock, uint64_t seq, struct STREAM_RECEIVE **out); diff --git a/src/stream/stream_wire.h b/src/stream/stream_wire.h index 0b9f4532..c405a478 100644 --- a/src/stream/stream_wire.h +++ b/src/stream/stream_wire.h @@ -10,14 +10,15 @@ extern "C" { #endif -#define STREAM_WIRE_VERSION 2 +#define STREAM_WIRE_VERSION 3 #define STREAM_WIRE_HEADER 52 #define STREAM_PATH_MAX 32 #define STREAM_END_SIZE 106 #define STREAM_METRIC_WIRE_SIZE 49 #define STREAM_INFO_METRIC_OFF 36 -#define STREAM_INFO_PATH_OFF (STREAM_INFO_METRIC_OFF + STREAM_METRIC_WIRE_SIZE) -#define STREAM_INFO_SIZE (STREAM_INFO_PATH_OFF + 1) /* probe:8, границы/FEC:28, метрики:49, count:1 */ +#define STREAM_INFO_OFFER_OFF (STREAM_INFO_METRIC_OFF + STREAM_METRIC_WIRE_SIZE) +#define STREAM_INFO_PATH_OFF (STREAM_INFO_OFFER_OFF + 25) +#define STREAM_INFO_SIZE (STREAM_INFO_PATH_OFF + 1) /* probe:8, границы/FEC:28, метрики:49, предложение:25, count:1 */ #define STREAM_OVERLOAD_MAX 64 #define STREAM_OVERLOAD_HEADER 18