|
|
|
|
@ -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); |
|
|
|
|
|