use neqo_common::event::Provider; use neqo_crypto::AuthenticationStatus; use neqo_http3::{
Header, Http3Client, Http3ClientEvent, Http3Server, Http3ServerEvent, Http3State, Priority,
}; use test_fixture::*;
fn exchange_packets(client: &mut Http3Client, server: &e='color:red'>mut Http3Server) { letmut out = None; loop {
out = client.process(out, now()).dgram(); let client_done = out.is_none();
out = server.process(out, now()).dgram(); if out.is_none() && client_done { break;
}
}
}
// Perform only Quic transport handshake. fn connect_with(client: &mut Http3Client, server: &mut Http3Server) {
assert_eq!(client.state(), Http3State::Initializing); let out = client.process_output(now());
assert_eq!(client.state(), Http3State::Initializing);
let out = server.process(out.dgram(), now()); let out = client.process(out.dgram(), now()); let out = server.process(out.dgram(), now());
assert!(out.as_dgram_ref().is_none());
let authentication_needed = |e| matches!(e, Http3ClientEvent::AuthenticationNeeded);
assert!(client.events().any(authentication_needed));
client.authenticated(AuthenticationStatus::Ok, now());
let out = client.process(out.dgram(), now()); let connected = |e| matches!(e, Http3ClientEvent::StateChange(Http3State::Connected));
assert!(client.events().any(connected));
assert_eq!(client.state(), Http3State::Connected); // Exchange H3 setttings let out = server.process(out.dgram(), now()); let out = client.process(out.dgram(), now()); let out = server.process(out.dgram(), now()); let out = client.process(out.dgram(), now());
_ = server.process(out.dgram(), now());
}
// get event of the above request, skipping events of the connection setup let header_event = loop { let event = server.next_event().unwrap(); if matches!(event, Http3ServerEvent::Headers { .. }) { break event;
}
};
match header_event {
Http3ServerEvent::Headers {
stream: _,
headers,
fin,
} => { let expected_headers = &[
Header::new(":method", "GET"),
Header::new(":scheme", "https"),
Header::new(":authority", "something.com"),
Header::new(":path", "/"),
Header::new("priority", "u=4,i"),
];
assert_eq!(&headers, expected_headers);
assert!(!fin);
}
other => panic!("unexpected server event: {other:?}"),
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.