Current section

Files

Jump to
mist src mist@internal@http2@flow_control.erl
Raw

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.