mirror of
https://github.com/telemt/telemt.git
synced 2026-09-19 00:38:31 +03:00
Bounded Debugging + Websocket Carriers + Carriers Negotiation
Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
+32
-18
@@ -200,7 +200,6 @@ impl AsyncRead for ConnectionIo {
|
||||
Poll::Ready(Ok(())) => {
|
||||
let filled = limited.filled().len();
|
||||
boundary.observe(limited.filled());
|
||||
drop(limited);
|
||||
buffer.advance(filled);
|
||||
Poll::Ready(Ok(()))
|
||||
}
|
||||
@@ -244,6 +243,7 @@ struct ParsedUpgrade {
|
||||
protocol: String,
|
||||
accept: String,
|
||||
carrier: ParsedCarrier,
|
||||
acknowledge_commit: bool,
|
||||
}
|
||||
|
||||
pub(super) async fn handle(
|
||||
@@ -325,6 +325,7 @@ pub(super) async fn handle(
|
||||
connection,
|
||||
lane_reservation.take(),
|
||||
trace_context,
|
||||
parsed.acknowledge_commit,
|
||||
)
|
||||
.await;
|
||||
});
|
||||
@@ -376,21 +377,18 @@ fn parse_upgrade<B>(request: &Request<B>) -> Option<ParsedUpgrade> {
|
||||
{
|
||||
return None;
|
||||
}
|
||||
let (token, carrier) = if let Some(token) = protocol.strip_prefix("tproxy-v1.") {
|
||||
(token, ParsedCarrier::Multiplex)
|
||||
let (token, carrier, acknowledge_commit) = if let Some(token) =
|
||||
protocol.strip_prefix("tproxy-auto-v1.")
|
||||
{
|
||||
(token, ParsedCarrier::Multiplex, true)
|
||||
} else if let Some(lane) = protocol.strip_prefix("tproxy-auto-lane-v1.") {
|
||||
let (token, lane_id) = parse_lane_protocol(lane)?;
|
||||
(token, ParsedCarrier::Lane(lane_id), true)
|
||||
} else if let Some(token) = protocol.strip_prefix("tproxy-v1.") {
|
||||
(token, ParsedCarrier::Multiplex, false)
|
||||
} else if let Some(lane) = protocol.strip_prefix("tproxy-lane-v1.") {
|
||||
let (token, lane_id) = lane.split_once('.')?;
|
||||
if lane_id.is_empty()
|
||||
|| lane_id.starts_with('+')
|
||||
|| (lane_id.len() > 1 && lane_id.starts_with('0'))
|
||||
{
|
||||
return None;
|
||||
}
|
||||
let lane_id = lane_id
|
||||
.parse::<u32>()
|
||||
.ok()
|
||||
.filter(|value| (1..=crate::web::frame::MAX_STREAM_ID).contains(value))?;
|
||||
(token, ParsedCarrier::Lane(lane_id))
|
||||
let (token, lane_id) = parse_lane_protocol(lane)?;
|
||||
(token, ParsedCarrier::Lane(lane_id), false)
|
||||
} else {
|
||||
return None;
|
||||
};
|
||||
@@ -412,13 +410,29 @@ fn parse_upgrade<B>(request: &Request<B>) -> Option<ParsedUpgrade> {
|
||||
protocol: protocol.to_string(),
|
||||
accept: base64::engine::general_purpose::STANDARD.encode(accept.finalize()),
|
||||
carrier,
|
||||
acknowledge_commit,
|
||||
})
|
||||
}
|
||||
|
||||
fn single_header<'a, B>(
|
||||
request: &'a Request<B>,
|
||||
fn parse_lane_protocol(value: &str) -> Option<(&str, u32)> {
|
||||
let (token, lane_id) = value.split_once('.')?;
|
||||
if lane_id.is_empty()
|
||||
|| lane_id.starts_with('+')
|
||||
|| (lane_id.len() > 1 && lane_id.starts_with('0'))
|
||||
{
|
||||
return None;
|
||||
}
|
||||
let lane_id = lane_id
|
||||
.parse::<u32>()
|
||||
.ok()
|
||||
.filter(|value| (1..=crate::web::frame::MAX_STREAM_ID).contains(value))?;
|
||||
Some((token, lane_id))
|
||||
}
|
||||
|
||||
fn single_header<B>(
|
||||
request: &Request<B>,
|
||||
name: impl hyper::header::AsHeaderName,
|
||||
) -> Option<&'a str> {
|
||||
) -> Option<&str> {
|
||||
let mut values = request.headers().get_all(name).iter();
|
||||
let value = values.next()?.to_str().ok()?;
|
||||
values.next().is_none().then_some(value)
|
||||
|
||||
Reference in New Issue
Block a user