Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

For create customized WebtransportSession #195 #196

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions h3-webtransport/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,22 @@ pin_project! {
}
}

impl<'a, C: quic::Connection<B>, B: Buf> OpenBi<'a, C, B> {
#[allow(missing_docs)]
pub fn new(opener: &'a Mutex<C::OpenStreams>, session_id: SessionId) -> Self {
Self {
opener,
stream: None,
session_id,
}
}
#[allow(missing_docs)]
pub fn with_stream(mut self, stream: impl Into<Option<PendingStreams<C, B>>>) -> Self {
self.stream = stream.into();
self
}
}

impl<'a, B, C> Future for OpenBi<'a, C, B>
where
C: quic::Connection<B>,
Expand Down Expand Up @@ -312,6 +328,21 @@ pin_project! {
session_id: SessionId,
}
}
impl<'a, C: quic::Connection<B>, B: Buf> OpenUni<'a, C, B> {
#[allow(missing_docs)]
pub fn new(opener: &'a Mutex<C::OpenStreams>, session_id: SessionId) -> Self {
Self {
opener,
stream: None,
session_id,
}
}
#[allow(missing_docs)]
pub fn with_stream(mut self, stream: impl Into<Option<PendingUniStreams<C, B>>>) -> Self {
self.stream = stream.into();
self
}
}

impl<'a, C, B> Future for OpenUni<'a, C, B>
where
Expand Down Expand Up @@ -368,6 +399,19 @@ where
conn: &'a Mutex<Connection<C, B>>,
_marker: PhantomData<B>,
}
impl<'a, C, B> ReadDatagram<'a, C, B>
where
C: quic::Connection<B>,
B: Buf,
{
#[allow(missing_docs)]
pub fn new(conn: &'a Mutex<Connection<C, B>>) -> Self {
Self {
conn,
_marker: PhantomData,
}
}
}

impl<'a, C, B> Future for ReadDatagram<'a, C, B>
where
Expand Down Expand Up @@ -400,6 +444,16 @@ where
conn: &'a Mutex<server::Connection<C, B>>,
}

impl<'a, C, B> AcceptUni<'a, C, B>
where
C: quic::Connection<B>,
B: Buf,
{
#[allow(missing_docs)]
pub fn new(conn: &'a Mutex<server::Connection<C, B>>) -> Self {
Self { conn }
}
}
impl<'a, C, B> Future for AcceptUni<'a, C, B>
where
C: quic::Connection<B>,
Expand Down
5 changes: 3 additions & 2 deletions h3-webtransport/src/stream.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ impl<S, B> std::fmt::Debug for SendStream<S, B> {

impl<S, B> SendStream<S, B> {
#[allow(missing_docs)]
pub(crate) fn new(stream: BufRecvStream<S, B>) -> Self {
pub fn new(stream: BufRecvStream<S, B>) -> Self {
Self { stream }
}
}
Expand Down Expand Up @@ -210,7 +210,8 @@ pin_project! {
}

impl<S, B> BidiStream<S, B> {
pub(crate) fn new(stream: BufRecvStream<S, B>) -> Self {
#[allow(missing_docs)]
pub fn new(stream: BufRecvStream<S, B>) -> Self {
Self { stream }
}
}
Expand Down
14 changes: 14 additions & 0 deletions h3/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -820,6 +820,20 @@ pin_project! {
}
}

impl<'a, C, B> ReadDatagram<'a, C, B>
where
C: quic::Connection<B>,
B: Buf,
{
#[allow(missing_docs)]
pub fn new(conn: &'a mut Connection<C, B>) -> Self {
Copy link
Contributor

@Ruben2424 Ruben2424 Jun 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR.
This should be part of the feature i-implement-a-third-party-backend-and-opt-into-breaking-changes because it is not part of the http3 spec.

In general I am not sure if just adding new functions is the right way to go.
The examples you mentions do not break the WebTransport RFC and sound reasonable to me. In my opinion this should be supported by our WebTransportSession. So the right step would be to improve our API.
What do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request<()> only be used in fn validate_wt_connect(request: &Request<()>) -> bool, is it possible move this validate outside and remove argument request: Request<()> from function accept?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it help to make WebTransport::accept(...) generic like WebTransport::accept<T>(request: Request<T>,...)?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately, I use CustomRequest here, not just Request<Custom>.
Another issue is that even if Request<()> is needed, it seems that ownership is not required here, and &Request<()> will suffice.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any new ideas or plans on this?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, i didn't have much time the last months. So nothing new from my side.

I am still not a big fan of just adding the new methods.
But since this is just experimental, maybe we could just merge it (with feature flag i-implement-a-third-party-backend-and-opt-into-breaking-changes) until we find a way to make the API more flexible? What do you think @hyperium/h3 ?

Self {
conn,
_marker: PhantomData,
}
}
}

impl<'a, C, B> Future for ReadDatagram<'a, C, B>
where
C: quic::Connection<B> + RecvDatagramExt,
Expand Down