Skip to content

Commit

Permalink
Make phoenix_websocket_upgrade temporarily configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
josevalim committed Nov 1, 2022
1 parent 2978f92 commit 08c6e61
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 19 deletions.
22 changes: 22 additions & 0 deletions lib/phoenix/endpoint/cowboy2_adapter.ex
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,26 @@ defmodule Phoenix.Endpoint.Cowboy2Adapter do
defp port_to_integer({:system, env_var}), do: port_to_integer(System.get_env(env_var))
defp port_to_integer(port) when is_binary(port), do: String.to_integer(port)
defp port_to_integer(port) when is_integer(port), do: port

@doc false
def websocket_upgrade(conn, handler, state, opts) do
cowboy_opts =
opts
|> Enum.flat_map(fn
{:timeout, timeout} -> [idle_timeout: timeout]
{:compress, _} = opt -> [opt]
{:max_frame_size, _} = opt -> [opt]
_other -> []
end)
|> Map.new()

process_flags =
opts
|> Keyword.take([:fullsweep_after])
|> Map.new()

handler_args = {handler, process_flags, state}
upgrade_args = {Phoenix.Endpoint.Cowboy2Handler, handler_args, cowboy_opts}
Plug.Conn.upgrade_adapter(conn, :websocket, upgrade_args)
end
end
24 changes: 5 additions & 19 deletions lib/phoenix/transports/websocket.ex
Original file line number Diff line number Diff line change
Expand Up @@ -43,27 +43,13 @@ defmodule Phoenix.Transports.WebSocket do
}

case handler.connect(config) do
{:ok, state} ->
cowboy_opts =
opts
|> Enum.flat_map(fn
{:timeout, timeout} -> [idle_timeout: timeout]
{:compress, _} = opt -> [opt]
{:max_frame_size, _} = opt -> [opt]
_other -> []
end)
|> Map.new()

process_flags =
opts
|> Keyword.take([:fullsweep_after])
|> Map.new()

handler_args = {handler, process_flags, state}
upgrade_args = {Phoenix.Endpoint.Cowboy2Handler, handler_args, cowboy_opts}
{:ok, arg} ->
upgrade =
conn.private[:phoenix_websocket_upgrade] ||
(&Phoenix.Endpoint.Cowboy2Adapter.websocket_upgrade/4)

conn
|> upgrade_adapter(:websocket, upgrade_args)
|> upgrade.(handler, arg, opts)
|> halt()

:error ->
Expand Down

0 comments on commit 08c6e61

Please sign in to comment.