Packages
ace
0.18.3
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/0_data.ex
defmodule Ace.HTTP2.Frame.Data do
@moduledoc false
alias Ace.HTTP2.Frame
@type t :: %__MODULE__{data: binary}
@enforce_keys [:data, :stream_id, :end_stream]
defstruct @enforce_keys
def new(stream_id, data, end_stream) do
%__MODULE__{data: data, stream_id: stream_id, end_stream: end_stream}
end
@spec decode({0, Frame.flags(), Frame.stream_id(), binary}) :: {:ok, t}
def decode({0, flags, stream_id, payload}) do
{data, end_stream} = read(flags, payload)
{:ok, new(stream_id, data, end_stream)}
end
# DEBT handle padding
def serialize(frame) do
length = :erlang.iolist_size(frame.data)
end_stream_flag = if frame.end_stream, do: 1, else: 0
padded_flag = 0
flags = <<0::4, padded_flag::1, 0::2, end_stream_flag::1>>
<<length::24, 0::8, flags::binary, 0::1, frame.stream_id::31, frame.data::binary>>
end
def read(flags, payload) do
%{padded: padded, end_stream: end_stream} = parse_flags(flags)
data =
if padded do
Frame.remove_padding(payload)
else
payload
end
{data, end_stream}
end
def parse_flags(<<_::4, padded_flag::1, _::2, end_stream_flag::1>>) do
%{
end_stream: end_stream_flag == 1,
padded: padded_flag == 1
}
end
defimpl Inspect, for: Frame.Data do
def inspect(%{data: data, end_stream: end_stream, stream_id: stream_id}, _opts) do
{preview, rest} = String.split_at(data, 50)
end_preview = if rest == "", do: "", else: "..."
"DATA(stream_id: #{stream_id}, end_stream: #{end_stream}, data: #{inspect(preview)}#{
end_preview
})"
end
end
end