mirror of
https://github.com/MercuryWorkshop/epoxy-tls.git
synced 2025-05-12 14:00:01 -04:00
parent
2dfcb0021f
commit
cbbe5308f5
3 changed files with 156 additions and 164 deletions
|
@ -20,6 +20,7 @@ event-listener = "5.3.1"
|
|||
fastwebsockets = { version = "0.8.0", features = ["unstable-split"], optional = true }
|
||||
flume = "0.11.0"
|
||||
futures = "0.3.30"
|
||||
futures-timer = "3.0.3"
|
||||
getrandom = { version = "0.2.15", features = ["std"], optional = true }
|
||||
nohash-hasher = "0.2.0"
|
||||
pin-project-lite = "0.2.14"
|
||||
|
@ -29,7 +30,7 @@ tokio = { version = "1.39.3", optional = true, default-features = false }
|
|||
default = ["generic_stream", "certificate"]
|
||||
fastwebsockets = ["dep:fastwebsockets", "dep:tokio"]
|
||||
generic_stream = []
|
||||
wasm = ["getrandom/js"]
|
||||
wasm = ["futures-timer/wasm-bindgen", "getrandom/js"]
|
||||
certificate = ["dep:ed25519", "dep:bitflags", "dep:getrandom"]
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
|
|
|
@ -21,7 +21,8 @@ pub use crate::{packet::*, stream::*};
|
|||
|
||||
use extensions::{udp::UdpProtocolExtension, AnyProtocolExtension, AnyProtocolExtensionBuilder};
|
||||
use flume as mpsc;
|
||||
use futures::{channel::oneshot, Future};
|
||||
use futures::{channel::oneshot, select, Future, FutureExt};
|
||||
use futures_timer::Delay;
|
||||
use inner::{MuxInner, WsEvent};
|
||||
use std::{
|
||||
ops::DerefMut,
|
||||
|
@ -30,6 +31,7 @@ use std::{
|
|||
atomic::{AtomicBool, Ordering},
|
||||
Arc,
|
||||
},
|
||||
time::Duration,
|
||||
};
|
||||
use ws::{AppendingWebSocketRead, LockedWebSocketWrite, Payload};
|
||||
|
||||
|
@ -187,18 +189,21 @@ where
|
|||
let mut downgraded = true;
|
||||
|
||||
let extension_ids: Vec<_> = builders.iter().map(|x| x.get_id()).collect();
|
||||
|
||||
let frame = read.wisp_read_frame(write).await?;
|
||||
let packet = Packet::maybe_parse_info(frame, role, builders)?;
|
||||
if let PacketType::Info(info) = packet.packet_type {
|
||||
supported_extensions = info
|
||||
.extensions
|
||||
.into_iter()
|
||||
.filter(|x| extension_ids.contains(&x.get_id()))
|
||||
.collect();
|
||||
downgraded = false;
|
||||
} else {
|
||||
extra_packet.replace(ws::Frame::from(packet).clone());
|
||||
if let Some(frame) = select! {
|
||||
x = read.wisp_read_frame(write).fuse() => Some(x?),
|
||||
_ = Delay::new(Duration::from_secs(5)).fuse() => None
|
||||
} {
|
||||
let packet = Packet::maybe_parse_info(frame, role, builders)?;
|
||||
if let PacketType::Info(info) = packet.packet_type {
|
||||
supported_extensions = info
|
||||
.extensions
|
||||
.into_iter()
|
||||
.filter(|x| extension_ids.contains(&x.get_id()))
|
||||
.collect();
|
||||
downgraded = false;
|
||||
} else {
|
||||
extra_packet.replace(ws::Frame::from(packet).clone());
|
||||
}
|
||||
}
|
||||
|
||||
for extension in supported_extensions.iter_mut() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue