Packages
ankh
0.6.0
0.17.0
0.16.0
0.15.0
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.0
0.10.0
0.9.0
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Pure Elixir HTTP/2 implementation
Current section
Files
Jump to
Current section
Files
lib/ankh/frame/data/splittable.ex
defimpl Ankh.Frame.Splittable, for: Ankh.Frame.Data do
def split(frame, frame_size),
do: do_split(frame, frame_size, [])
defp do_split(
%{flags: %{end_stream: end_stream} = flags, payload: %{data: data}} = frame,
frame_size,
frames
)
when byte_size(data) <= frame_size do
frame = %{frame | flags: %{flags | end_stream: end_stream}}
Enum.reverse([frame | frames])
end
defp do_split(%{flags: flags, payload: %{data: data} = payload} = frame, frame_size, frames) do
<<chunk::size(frame_size), rest::binary>> = data
frames = [
%{frame | flags: %{flags | end_stream: false}, payload: %{payload | data: chunk}} | frames
]
do_split(%{frame | payload: %{payload | data: rest}}, frame_size, frames)
end
end