Packages
ace
0.18.9
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/2_priority.ex
defmodule Ace.HTTP2.Frame.Priority do
@moduledoc false
@type t :: %__MODULE__{stream_id: Ace.HTTP2.Frame.stream_id()}
@enforce_keys [:stream_id, :stream_dependency, :weight, :exclusive]
defstruct @enforce_keys
def new(stream_id, stream_dependency, weight, exclusive) do
%__MODULE__{
stream_id: stream_id,
stream_dependency: stream_dependency,
weight: weight,
exclusive: exclusive
}
end
def decode({2, _flags, stream_id, <<exclusive::1, stream_dependency::31, weight::8>>})
when stream_id > 0 do
exclusive = exclusive == 1
if stream_id == stream_dependency do
{:error, {:protocol_error, "Priority frame can not be dependent on own stream"}}
else
{:ok, new(stream_id, stream_dependency, weight, exclusive)}
end
end
def decode({2, _flags, 0, <<_::40>>}) do
{:error, {:protocol_error, "Priority frame not valid on stream 0"}}
end
def decode({2, _flags, _stream_id, _payload}) do
{:error, {:protocol_error, "Priority frame invalid payload length"}}
end
def serialize(frame) do
exclusive = if frame.exclusive, do: 1, else: 0
<<
5::24,
2::8,
0::8,
0::1,
frame.stream_id::31,
exclusive::1,
frame.stream_dependency::31,
frame.weight::8
>>
end
defimpl Inspect, for: Ace.HTTP2.Frame.Priority do
def inspect(
%{
stream_id: stream_id,
stream_dependency: stream_dependency,
weight: weight,
exclusive: exclusive
},
_opts
) do
"PRIORITY(stream_id: #{stream_id}, stream_dependency: #{stream_dependency}, weight: #{
weight
}, exclusive: #{exclusive})"
end
end
end