in neqo-http3/src/connection_client.rs [989:1060]
fn check_connection_events(&mut self) -> Res<()> {
qtrace!("[{self}] Check connection events");
while let Some(e) = self.conn.next_event() {
qdebug!("[{self}] check_connection_events - event {e:?}");
match e {
ConnectionEvent::NewStream { stream_id } => {
// During this event we only add a new stream to the Http3Connection stream
// list, with NewStreamHeadReader stream handler.
// This function will not read from the stream and try to decode the stream.
// RecvStreamReadable will be emitted after this event and reading, i.e.
// decoding of a stream will happen during that event.
self.base_handler.add_new_stream(stream_id);
}
ConnectionEvent::SendStreamWritable { stream_id } => {
if let Some(s) = self.base_handler.send_streams.get_mut(&stream_id) {
s.stream_writable();
}
}
ConnectionEvent::RecvStreamReadable { stream_id } => {
self.handle_stream_readable(stream_id)?;
}
ConnectionEvent::RecvStreamReset {
stream_id,
app_error,
} => self
.base_handler
.handle_stream_reset(stream_id, app_error, &mut self.conn)?,
ConnectionEvent::SendStreamStopSending {
stream_id,
app_error,
} => self.base_handler.handle_stream_stop_sending(
stream_id,
app_error,
&mut self.conn,
)?,
ConnectionEvent::SendStreamCreatable { stream_type } => {
self.events.new_requests_creatable(stream_type);
}
ConnectionEvent::AuthenticationNeeded => self.events.authentication_needed(),
ConnectionEvent::EchFallbackAuthenticationNeeded { public_name } => {
self.events.ech_fallback_authentication_needed(public_name);
}
ConnectionEvent::StateChange(state) => {
if self
.base_handler
.handle_state_change(&mut self.conn, &state)?
{
self.events
.connection_state_change(self.base_handler.state());
}
}
ConnectionEvent::ZeroRttRejected => {
self.base_handler.handle_zero_rtt_rejected()?;
self.events.zero_rtt_rejected();
self.push_handler.borrow_mut().handle_zero_rtt_rejected();
}
ConnectionEvent::ResumptionToken(token) => {
if let Some(t) = self.encode_resumption_token(&token) {
self.events.resumption_token(t);
}
}
ConnectionEvent::Datagram(dgram) => {
self.base_handler.handle_datagram(&dgram);
}
ConnectionEvent::SendStreamComplete { .. }
| ConnectionEvent::OutgoingDatagramOutcome { .. }
| ConnectionEvent::IncomingDatagramDropped => {}
}
}
Ok(())
}