Packages
ace
0.12.0
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
Retired package: Release invalid - incorrectly specified dependencies, use 0.12.1 or later
Current section
Files
Jump to
Current section
Files
lib/ace/http2/settings.ex
defmodule Ace.HTTP2.Settings do
@enforce_keys [:max_frame_size, :initial_window_size]
defstruct @enforce_keys
@max_frame_size_default 16_384
@max_frame_size_maximum 16_777_215
@initial_window_size_default 65_535
@initial_window_size_minimum 0
@initial_window_size_maximum 2_147_483_647
def for_server(values \\ []) do
# Difference for server is that push may never be true
for_client(values)
end
def for_client(values \\ []) do
max_frame_size = Keyword.get(values, :max_frame_size, @max_frame_size_default)
case max_frame_size do
value when value < @max_frame_size_default ->
{:error, :max_frame_size_too_small}
value when @max_frame_size_maximum < value ->
{:error, :max_frame_size_too_large}
max_frame_size ->
case Keyword.get(values, :initial_window_size, @initial_window_size_default) do
value when value < @initial_window_size_minimum ->
{:error, :initial_window_size_too_small}
value when @initial_window_size_maximum < value ->
{:error, :initial_window_size_too_large}
initial_window_size ->
settings = %__MODULE__{
max_frame_size: max_frame_size,
initial_window_size: initial_window_size,
}
{:ok, settings}
end
end
end
def update_frame(next, previous) do
changed = if next.max_frame_size != previous.max_frame_size do
[max_frame_size: next.max_frame_size]
else
[]
end
changed = if next.initial_window_size != previous.initial_window_size do
[initial_window_size: next.initial_window_size]
else
[]
end ++ changed
Ace.HTTP2.Frame.Settings.new(changed)
end
def apply_frame(frame, settings) do
settings = if new_value = frame.max_frame_size do
Map.put(settings, :max_frame_size, new_value)
else
settings
end
if new_value = frame.initial_window_size do
Map.put(settings, :initial_window_size, new_value)
else
settings
end
end
end