in neqo-http3/src/connection_client.rs [2050:2118]
fn read_response_and_push_events(
client: &mut Http3Client,
push_promises: &[PushPromiseInfo],
push_streams: &[PushId],
response_stream_id: StreamId,
) {
let mut num_push_promises = 0;
let mut num_push_stream_headers = 0;
let mut num_push_stream_data = 0;
while let Some(e) = client.next_event() {
match e {
Http3ClientEvent::PushPromise {
push_id,
request_stream_id,
headers,
} => {
assert!(push_promises
.iter()
.any(|p| p.push_id == push_id && p.ref_stream_id == request_stream_id));
check_pushpromise_header(&headers[..]);
num_push_promises += 1;
}
Http3ClientEvent::PushHeaderReady {
push_id,
headers,
interim,
fin,
} => {
assert!(push_streams.contains(&push_id));
check_push_response_header(&headers);
num_push_stream_headers += 1;
assert!(!fin);
assert!(!interim);
}
Http3ClientEvent::PushDataReadable { push_id } => {
assert!(push_streams.contains(&push_id));
let mut buf = [0_u8; 100];
let (amount, fin) = client.push_read_data(now(), push_id, &mut buf).unwrap();
assert!(fin);
assert_eq!(amount, EXPECTED_PUSH_RESPONSE_DATA_FRAME.len());
assert_eq!(&buf[..amount], EXPECTED_PUSH_RESPONSE_DATA_FRAME);
num_push_stream_data += 1;
}
Http3ClientEvent::HeaderReady {
stream_id,
headers,
interim,
fin,
} => {
assert_eq!(stream_id, response_stream_id);
check_response_header_2(&headers);
assert!(!fin);
assert!(!interim);
}
Http3ClientEvent::DataReadable { stream_id } => {
assert_eq!(stream_id, response_stream_id);
let mut buf = [0_u8; 100];
let (amount, _) = client.read_data(now(), stream_id, &mut buf).unwrap();
assert_eq!(amount, EXPECTED_RESPONSE_DATA_2_FRAME_1.len());
assert_eq!(&buf[..amount], EXPECTED_RESPONSE_DATA_2_FRAME_1);
}
_ => {}
}
}
assert_eq!(num_push_promises, push_promises.len());
assert_eq!(num_push_stream_headers, push_streams.len());
assert_eq!(num_push_stream_data, push_streams.len());
}