Packages
mist
6.0.3
6.0.3
6.0.2
6.0.1
6.0.0
5.0.4
5.0.3
5.0.2
5.0.1
5.0.0
5.0.0-rc1
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.0.0
1.2.0
1.1.0
1.0.0
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.17.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
a misty Gleam web server
Current section
Files
Jump to
Current section
Files
src/mist@internal@http2@flow_control.erl
-module(mist@internal@http2@flow_control).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/mist/internal/http2/flow_control.gleam").
-export([compute_receive_window/2, update_send_window/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/mist/internal/http2/flow_control.gleam", 3).
?DOC(false).
-spec compute_receive_window(integer(), integer()) -> {integer(), integer()}.
compute_receive_window(Receive_window_size, Data_size) ->
New_receive_window_size = Receive_window_size - Data_size,
Max_window_increment = erlang:'bsl'(1, 31) - 1,
Max_window_size = Max_window_increment,
Min_window_size = erlang:'bsl'(1, 30),
case New_receive_window_size > Min_window_size of
true ->
{New_receive_window_size, 0};
false ->
Updated_receive_window_size = gleam@int:min(
New_receive_window_size + Max_window_increment,
Max_window_size
),
Increment = Updated_receive_window_size - New_receive_window_size,
{Updated_receive_window_size, Increment}
end.
-file("src/mist/internal/http2/flow_control.gleam", 27).
?DOC(false).
-spec update_send_window(integer(), integer()) -> {ok, integer()} |
{error, binary()}.
update_send_window(Current_send_window, Increment) ->
Max_window_size = erlang:'bsl'(1, 31) - 1,
Update = Current_send_window + Increment,
case Update > Max_window_size of
true ->
{error, <<"Invalid update increment"/utf8>>};
false ->
{ok, Update}
end.