1 defmodule Phoenix.Transports.WebSocket.Raw do
2 import Plug.Conn, only: [
6 alias Phoenix.Socket.Transport
12 cowboy: Phoenix.Endpoint.CowboyWebSocket
16 def init(%Plug.Conn{method: "GET"} = conn, {endpoint, handler, transport}) do
17 {_, opts} = handler.__transport__(transport)
21 |> Transport.transport_log(opts[:transport_log])
22 |> Transport.force_ssl(handler, endpoint, opts)
23 |> Transport.check_origin(handler, endpoint, opts)
26 %{halted: false} = conn ->
27 case Transport.connect(endpoint, handler, transport, __MODULE__, nil, conn.params) do
29 {:ok, conn, {__MODULE__, {socket, opts}}}
31 send_resp(conn, :forbidden, "")
40 send_resp(conn, :bad_request, "")
44 def ws_init({socket, config}) do
45 Process.flag(:trap_exit, true)
46 {:ok, %{socket: socket}, config[:timeout]}
49 def ws_handle(op, data, state) do
51 |> apply(:handle, [op, data, state])
54 {:reply, {op, data}, state}
56 {:reply, {op, data}, state}
64 def ws_info({_,_} = tuple, state) do
65 {:reply, tuple, state}
68 def ws_info(_tuple, state), do: {:ok, state}
70 def ws_close(state) do
71 ws_handle(:closed, :normal, state)
74 def ws_terminate(reason, state) do
75 ws_handle(:closed, reason, state)