0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

WIP close

This commit is contained in:
Loïc Hoguin 2025-06-03 16:02:27 +02:00
parent 70629673c5
commit b63e18d2cc
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
2 changed files with 41 additions and 6 deletions

View file

@ -460,11 +460,42 @@ close_wt_session_server(Config) ->
%% @todo close_wt_session_app_code_msg_client %% @todo close_wt_session_app_code_msg_client
%% @todo close_wt_session_app_code_server(Config) ->
%close_wt_session_app_code_server(Config) -> doc("The WT server can close a single session with an application error code. "
% error(todo). "(draft_webtrans_http3 4.6)"),
%close_wt_session_app_code_msg_server(Config) -> %% Connect to the WebTransport server.
% error(todo). #{
conn := Conn,
connect_stream_ref := ConnectStreamRef,
session_id := SessionID
} = do_webtransport_connect(Config),
%% Create a bidi stream, send a special instruction to make it initiate the close.
{ok, LocalStreamRef} = quicer:start_stream(Conn, #{}),
{ok, _} = quicer:send(LocalStreamRef, <<1:2, 16#41:14, 0:2, SessionID:6,
"TEST:close_app_code">>),
%% Receive the CLOSE_WEBTRANSPORT_SESSION capsule on the CONNECT stream.
CloseWTSessionCapsule = cow_capsule:close_wt_session(1234567890, <<>>),
{fin, CloseWTSessionCapsule} = do_receive_data(ConnectStreamRef),
ok.
close_wt_session_app_code_msg_server(Config) ->
doc("The WT server can close a single session with an application error code "
"and an application error message. (draft_webtrans_http3 4.6)"),
%% Connect to the WebTransport server.
#{
conn := Conn,
connect_stream_ref := ConnectStreamRef,
session_id := SessionID
} = do_webtransport_connect(Config),
%% Create a bidi stream, send a special instruction to make it initiate the close.
{ok, LocalStreamRef} = quicer:start_stream(Conn, #{}),
{ok, _} = quicer:send(LocalStreamRef, <<1:2, 16#41:14, 0:2, SessionID:6,
"TEST:close_app_code_msg">>),
%% Receive the CLOSE_WEBTRANSPORT_SESSION capsule on the CONNECT stream.
CloseWTSessionCapsule = iolist_to_binary(cow_capsule:close_wt_session(1234567890,
<<"onetwothreefourfivesixseveneightnineten">>)),
{fin, CloseWTSessionCapsule} = do_receive_data(ConnectStreamRef),
ok.
%% An endpoint that sends a CLOSE_WEBTRANSPORT_SESSION capsule MUST immediately send a FIN. The endpoint MAY send a STOP_SENDING to indicate it is no longer reading from the CONNECT stream. The recipient MUST either close or reset the stream in response. (6) %% An endpoint that sends a CLOSE_WEBTRANSPORT_SESSION capsule MUST immediately send a FIN. The endpoint MAY send a STOP_SENDING to indicate it is no longer reading from the CONNECT stream. The recipient MUST either close or reset the stream in response. (6)
%% @todo close_wt_session_server_fin %% @todo close_wt_session_server_fin

View file

@ -52,7 +52,11 @@ webtransport_handle(Event = {stream_data, _StreamID, _IsFin, <<"TEST:", Test/bit
<<"initiate_close">> -> <<"initiate_close">> ->
{[initiate_close], Streams}; {[initiate_close], Streams};
<<"close">> -> <<"close">> ->
{[close], Streams} {[close], Streams};
<<"close_app_code">> ->
{[{close, 1234567890}], Streams};
<<"close_app_code_msg">> ->
{[{close, 1234567890, <<"onetwothreefourfivesixseveneightnineten">>}], Streams}
end; end;
webtransport_handle(Event = {stream_data, StreamID, IsFin, Data}, Streams) -> webtransport_handle(Event = {stream_data, StreamID, IsFin, Data}, Streams) ->
ct:pal("WT handle ~p~n", [Event]), ct:pal("WT handle ~p~n", [Event]),