Current section
30 Versions
Jump to
Current section
30 Versions
Compare versions
11
files changed
+131
additions
-100
deletions
| @@ -20,12 +20,14 @@ | |
| 20 20 | {<<"maintainers">>,[<<"Henry Popp">>]}. |
| 21 21 | {<<"name">>,<<"kadabra">>}. |
| 22 22 | {<<"requirements">>, |
| 23 | - [[{<<"app">>,<<"hpack">>}, |
| 24 | - {<<"name">>,<<"hpack_erl">>}, |
| 25 | - {<<"optional">>,false}, |
| 26 | - {<<"requirement">>,<<"~> 0.2.3">>}], |
| 27 | - [{<<"app">>,<<"scribe">>}, |
| 23 | + [[{<<"app">>,<<"scribe">>}, |
| 28 24 | {<<"name">>,<<"scribe">>}, |
| 29 25 | {<<"optional">>,true}, |
| 30 | - {<<"requirement">>,<<"~> 0.4">>}]]}. |
| 31 | - {<<"version">>,<<"0.3.1">>}. |
| 26 | + {<<"repository">>,<<"hexpm">>}, |
| 27 | + {<<"requirement">>,<<"~> 0.4">>}], |
| 28 | + [{<<"app">>,<<"hpack">>}, |
| 29 | + {<<"name">>,<<"hpack_erl">>}, |
| 30 | + {<<"optional">>,false}, |
| 31 | + {<<"repository">>,<<"hexpm">>}, |
| 32 | + {<<"requirement">>,<<"~> 0.2.3">>}]]}. |
| 33 | + {<<"version">>,<<"0.3.2">>}. |
| @@ -14,8 +14,8 @@ defmodule Kadabra.Connection do | |
| 14 14 | use GenServer |
| 15 15 | require Logger |
| 16 16 | |
| 17 | - alias Kadabra.{Connection, Encodable, Error, |
| 18 | - Frame, Hpack, Http2, Stream} |
| 17 | + alias Kadabra.{Connection, Encodable, Error, Frame, Hpack, Http2, Stream} |
| 18 | + alias Kadabra.Connection.Ssl |
| 19 19 | alias Kadabra.Frame.{Continuation, Data, Goaway, Headers, Ping, |
| 20 20 | PushPromise, RstStream, WindowUpdate} |
| 21 21 | |
| @@ -58,7 +58,7 @@ defmodule Kadabra.Connection do | |
| 58 58 | end |
| 59 59 | |
| 60 60 | def init({:ok, uri, pid, opts}) do |
| 61 | - case Connection.Ssl.connect(uri, opts) do |
| 61 | + case Ssl.connect(uri, opts) do |
| 62 62 | {:ok, socket} -> |
| 63 63 | send_preface_and_settings(socket, opts[:settings]) |
| 64 64 | state = initial_state(socket, uri, pid, opts) |
| @@ -165,12 +165,11 @@ defmodule Kadabra.Connection do | |
| 165 165 | old_settings = flow.settings |
| 166 166 | flow = Connection.FlowControl.update_settings(flow, settings) |
| 167 167 | |
| 168 | - notify_initial_window_change(ref, old_settings, flow) |
| 168 | + notify_settings_change(ref, old_settings, flow) |
| 169 169 | |
| 170 170 | pid = Hpack.via_tuple(ref, :encoder) |
| 171 171 | Hpack.update_max_table_size(pid, settings.max_header_list_size) |
| 172 172 | |
| 173 | - |
| 174 173 | bin = Frame.Settings.ack |> Encodable.to_bin |
| 175 174 | :ssl.send(state.socket, bin) |
| 176 175 | |
| @@ -192,15 +191,16 @@ defmodule Kadabra.Connection do | |
| 192 191 | |
| 193 192 | def recv(_else, state), do: {:noreply, state} |
| 194 193 | |
| 195 | - def notify_initial_window_change(ref, |
| 196 | - %{initial_window_size: old_window}, |
| 197 | - %{settings: settings} = flow) do |
| 194 | + def notify_settings_change(ref, |
| 195 | + %{initial_window_size: old_window}, |
| 196 | + %{settings: settings} = flow) do |
| 197 | + max_frame_size = settings.max_frame_size |
| 198 198 | new_window = settings.initial_window_size |
| 199 199 | window_diff = new_window - old_window |
| 200 200 | |
| 201 201 | for stream_id <- flow.active_streams do |
| 202 202 | pid = Stream.via_tuple(ref, stream_id) |
| 203 | - Stream.cast_recv(pid, {:window_change, window_diff}) |
| 203 | + Stream.cast_recv(pid, {:settings_change, window_diff, max_frame_size}) |
| 204 204 | end |
| 205 205 | end |
| 206 206 | |
| @@ -263,7 +263,7 @@ defmodule Kadabra.Connection do | |
| 263 263 | end |
| 264 264 | |
| 265 265 | def parse_ssl(socket, bin, state) do |
| 266 | - case Kadabra.Frame.new(bin) do |
| 266 | + case Frame.new(bin) do |
| 267 267 | {:ok, frame, rest} -> |
| 268 268 | state = handle_response(frame, state) |
| 269 269 | parse_ssl(socket, rest, state) |
| @@ -301,7 +301,7 @@ defmodule Kadabra.Connection do | |
| 301 301 | |
| 302 302 | @spec process(frame, t) :: :ok |
| 303 303 | def process(%Frame.Data{stream_id: 0}, state) do |
| 304 | - # TODO: This is an error |
| 304 | + # This is an error |
| 305 305 | state |
| 306 306 | end |
| 307 307 | def process(%Frame.Data{stream_id: stream_id} = frame, state) do |
| @@ -27,13 +27,7 @@ defmodule Kadabra.Connection.Settings do | |
| 27 27 | @max_header_list_size 0x6 |
| 28 28 | |
| 29 29 | def default do |
| 30 | - %__MODULE__{ |
| 31 | - initial_window_size: 1_048_576, |
| 32 | - max_frame_size: 1_048_576, |
| 33 | - enable_push: true, |
| 34 | - max_header_list_size: 4_096, |
| 35 | - max_concurrent_streams: 1_000 |
| 36 | - } |
| 30 | + %__MODULE__{} |
| 37 31 | end |
| 38 32 | |
| 39 33 | @doc ~S""" |
| @@ -91,11 +85,10 @@ defmodule Kadabra.Connection.Settings do | |
| 91 85 | end |
| 92 86 | |
| 93 87 | def put(settings, @max_frame_size, value) do |
| 94 | - cond do |
| 95 | - value < 16_384 or value > 16_777_215 -> |
| 96 | - {:error, Error.protocol_error, settings} |
| 97 | - true -> |
| 98 | - {:ok, %{settings | max_frame_size: value}} |
| 88 | + if value < 16_384 or value > 16_777_215 do |
| 89 | + {:error, Error.protocol_error, settings} |
| 90 | + else |
| 91 | + {:ok, %{settings | max_frame_size: value}} |
| 99 92 | end |
| 100 93 | end |
| @@ -65,25 +65,21 @@ defmodule Kadabra.Error do | |
| 65 65 | 0xfff |
| 66 66 | """ |
| 67 67 | @spec string(integer) :: String.t | integer |
| 68 | - def string(code) do |
| 69 | - case code do |
| 70 | - 0x0 -> "NO_ERROR" |
| 71 | - 0x1 -> "PROTOCOL_ERROR" |
| 72 | - 0x2 -> "INTERNAL_ERROR" |
| 73 | - 0x3 -> "FLOW_CONTROL_ERROR" |
| 74 | - 0x4 -> "SETTINGS_TIMEOUT" |
| 75 | - 0x5 -> "STREAM_CLOSED" |
| 76 | - 0x6 -> "FRAME_SIZE_ERROR" |
| 77 | - 0x7 -> "REFUSED_STREAM" |
| 78 | - 0x8 -> "CANCEL" |
| 79 | - 0x9 -> "COMPRESSION_ERROR" |
| 80 | - 0xa -> "CONNECT_ERROR" |
| 81 | - 0xb -> "ENHANCE_YOUR_CALM" |
| 82 | - 0xc -> "INADEQUATE_SECURITY" |
| 83 | - 0xd -> "HTTP_1_1_REQUIRED" |
| 84 | - error -> error |
| 85 | - end |
| 86 | - end |
| 68 | + def string(0x0), do: "NO_ERROR" |
| 69 | + def string(0x1), do: "PROTOCOL_ERROR" |
| 70 | + def string(0x2), do: "INTERNAL_ERROR" |
| 71 | + def string(0x3), do: "FLOW_CONTROL_ERROR" |
| 72 | + def string(0x4), do: "SETTINGS_TIMEOUT" |
| 73 | + def string(0x5), do: "STREAM_CLOSED" |
| 74 | + def string(0x6), do: "FRAME_SIZE_ERROR" |
| 75 | + def string(0x7), do: "REFUSED_STREAM" |
| 76 | + def string(0x8), do: "CANCEL" |
| 77 | + def string(0x9), do: "COMPRESSION_ERROR" |
| 78 | + def string(0xa), do: "CONNECT_ERROR" |
| 79 | + def string(0xb), do: "ENHANCE_YOUR_CALM" |
| 80 | + def string(0xc), do: "INADEQUATE_SECURITY" |
| 81 | + def string(0xd), do: "HTTP_1_1_REQUIRED" |
| 82 | + def string(error), do: error |
| 87 83 | |
| 88 84 | @doc ~S""" |
| 89 85 | Returns integer error code given string error. |
| @@ -95,23 +91,19 @@ defmodule Kadabra.Error do | |
| 95 91 | iex> Kadabra.Error.code("NOT_AN_ERROR") |
| 96 92 | "NOT_AN_ERROR" |
| 97 93 | """ |
| 98 | - def code(string) do |
| 99 | - case string do |
| 100 | - "NO_ERROR" -> 0x0 |
| 101 | - "PROTOCOL_ERROR" -> 0x1 |
| 102 | - "INTERNAL_ERROR" -> 0x2 |
| 103 | - "FLOW_CONTROL_ERROR" -> 0x3 |
| 104 | - "SETTINGS_TIMEOUT" -> 0x4 |
| 105 | - "STREAM_CLOSED" -> 0x5 |
| 106 | - "FRAME_SIZE_ERROR" -> 0x6 |
| 107 | - "REFUSED_STREAM" -> 0x7 |
| 108 | - "CANCEL" -> 0x8 |
| 109 | - "COMPRESSION_ERROR" -> 0x9 |
| 110 | - "CONNECT_ERROR" -> 0xa |
| 111 | - "ENHANCE_YOUR_CALM" -> 0xb |
| 112 | - "INADEQUATE_SECURITY" -> 0xc |
| 113 | - "HTTP_1_1_REQUIRED" -> 0xd |
| 114 | - error -> error |
| 115 | - end |
| 116 | - end |
| 94 | + def code("NO_ERROR"), do: 0x0 |
| 95 | + def code("PROTOCOL_ERROR"), do: 0x1 |
| 96 | + def code("INTERNAL_ERROR"), do: 0x2 |
| 97 | + def code("FLOW_CONTROL_ERROR"), do: 0x3 |
| 98 | + def code("SETTINGS_TIMEOUT"), do: 0x4 |
| 99 | + def code("STREAM_CLOSED"), do: 0x5 |
| 100 | + def code("FRAME_SIZE_ERROR"), do: 0x6 |
| 101 | + def code("REFUSED_STREAM"), do: 0x7 |
| 102 | + def code("CANCEL"), do: 0x8 |
| 103 | + def code("COMPRESSION_ERROR"), do: 0x9 |
| 104 | + def code("CONNECT_ERROR"), do: 0xa |
| 105 | + def code("ENHANCE_YOUR_CALM"), do: 0xb |
| 106 | + def code("INADEQUATE_SECURITY"), do: 0xc |
| 107 | + def code("HTTP_1_1_REQUIRED"), do: 0xd |
| 108 | + def code(error), do: error |
| 117 109 | end |
| @@ -14,7 +14,6 @@ defmodule Kadabra.Frame.Continuation do | |
| 14 14 | @doc ~S""" |
| 15 15 | Initializes a new `Frame.Continuation` given a `Frame`. |
| 16 16 | |
| 17 | - |
| 18 17 | ## Examples |
| 19 18 | |
| 20 19 | iex> frame = %Kadabra.Frame{payload: <<136>>, flags: 0x4} |
Loading more files…