Packages
ace
0.18.7
0.19.0
0.18.10
0.18.9
0.18.8
0.18.7
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.8
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
retired
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
retired
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
HTTP web server and client, supports http1 and http2
Current section
Files
Jump to
Current section
Files
lib/ace/http2/frame/8_window_update.ex
defmodule Ace.HTTP2.Frame.WindowUpdate do
@moduledoc false
@type t :: %__MODULE__{stream_id: Ace.HTTP2.Frame.stream_id()}
@enforce_keys [:stream_id, :increment]
defstruct @enforce_keys
@max_increment :math.pow(2, 31) - 1
def new(stream_id, increment) when increment <= @max_increment do
%__MODULE__{stream_id: stream_id, increment: increment}
end
def decode({8, _flags, stream_id, <<0::1, increment::31>>})
when 0 < increment and increment <= @max_increment do
{:ok, new(stream_id, increment)}
end
def decode({8, _flags, _stream_id, <<0::1, increment::31>>}) when increment > @max_increment do
{:error, {:flow_control_error, "window update too large"}}
end
def decode({8, _flags, _stream_id, <<0::1, 0::31>>}) do
# DEBT this is a stream level error
{:error, {:protocol_error, "window update cannot be of size 0"}}
end
def decode({8, _flags, _stream_id, _payload}) do
{:error, {:frame_size_error, "window update frame payload must be 4 octets"}}
end
def serialize(%{stream_id: stream_id, increment: increment}) do
<<4::24, 8::8, 0::8, 0::1, stream_id::31, 0::1, increment::31>>
end
defimpl Inspect, for: Ace.HTTP2.Frame.WindowUpdate do
def inspect(%{stream_id: stream_id, increment: increment}, _opts) do
"WINDOWN_UPDATE(stream_id: #{stream_id}, increment: #{increment})"
end
end
end