Current section

Files

Jump to
websockex_wt lib websockex errors.ex
Raw

lib/websockex/errors.ex

defmodule WebSockex.ApplicationError do
@moduledoc false
defexception [:reason]
def message(%__MODULE__{reason: :not_started}) do
"""
The :websockex application is not started.
Please start the applications with Application.ensure_all_started(:websockex)
"""
end
end
defmodule WebSockex.ConnError do
@moduledoc false
defexception [:original]
def message(%__MODULE__{original: :nxdomain}),
do: "Connection Error: Could not resolve domain name."
def message(%__MODULE__{original: error}), do: "Connection Error: #{inspect(error)}"
end
defmodule WebSockex.RequestError do
defexception [:code, :message]
def message(%__MODULE__{code: code, message: message}) do
"Didn't get a proper response from the server. The response was: #{inspect(code)} #{inspect(message)}"
end
end
defmodule WebSockex.URLError do
@moduledoc false
defexception [:url]
def message(%__MODULE__{url: url}), do: "Invalid URL: #{inspect(url)}"
end
defmodule WebSockex.HandshakeError do
@moduledoc false
defexception [:challenge, :response]
def message(%__MODULE__{challenge: challenge, response: response}) do
[
"Handshake Failed: Response didn't match challenge.",
"Response: #{inspect(response)}",
"Challenge: #{inspect(challenge)}"
]
|> Enum.join("\n")
end
end
defmodule WebSockex.BadResponseError do
@moduledoc false
defexception [:response, :module, :function, :args]
def message(%__MODULE__{} = error) do
"Bad Response: Got #{inspect(error.response)} from #{inspect(Exception.format_mfa(error.module, error.function, error.args))}"
end
end
defmodule WebSockex.FrameError do
defexception [:reason, :opcode, :buffer]
def message(%__MODULE__{reason: :nonfin_control_frame} = exception) do
"Fragmented Control Frame: Control Frames Can't Be Fragmented\nbuffer: #{exception.buffer}"
end
def message(%__MODULE__{reason: :control_frame_too_large} = exception) do
"Control Frame Too Large: Control Frames Can't Be Larger Than 125 Bytes\nbuffer: #{exception.buffer}"
end
def message(%__MODULE__{reason: :invalid_utf8} = exception) do
"Invalid UTF-8: Text and Close frames must have UTF-8 payloads.\nbuffer: #{exception.buffer}"
end
def message(%__MODULE__{reason: :invalid_close_code} = exception) do
"Invalid Close Code: Close Codes must be in range of 1000 through 4999\nbuffer: #{exception.buffer}"
end
def message(%__MODULE__{} = exception) do
"Frame Error: #{inspect(exception)}"
end
end
defmodule WebSockex.FrameEncodeError do
defexception [:reason, :frame_type, :frame_payload, :close_code]
def message(%__MODULE__{reason: :control_frame_too_large} = error) do
"""
Control frame payload too large: Payload must be less than 126 bytes.
Frame: {#{inspect(error.frame_type)}, #{inspect(error.frame_payload)}}
"""
end
def message(%__MODULE__{reason: :close_code_out_of_range} = error) do
"""
Close Code Out of Range: Close code must be between 1000-4999.
Frame: {#{inspect(error.frame_type)}, #{inspect(error.close_code)}, #{inspect(error.frame_payload)}}
"""
end
end
defmodule WebSockex.InvalidFrameError do
defexception [:frame]
def message(%__MODULE__{frame: frame}) do
"The following frame is an invalid frame: #{inspect(frame)}"
end
end
defmodule WebSockex.FragmentParseError do
defexception [:reason, :fragment, :continuation]
def message(%__MODULE__{reason: :two_start_frames} = error) do
"""
Cannot Add Another Start Frame to a Existing Fragment.
Fragment: #{inspect(error.fragment)}
Continuation: #{inspect(error.continuation)}
"""
end
end
defmodule WebSockex.NotConnectedError do
defexception [:connection_state]
def message(%__MODULE__{connection_state: :opening}) do
"Not Connected: Currently Opening the Connection."
end
end
defmodule WebSockex.CallingSelfError do
defexception [:function]
def message(%__MODULE__{function: :send_frame}) do
"""
Process attempted to call itself.
The function send_frame/2 cannot be used inside of a callback. Instead try returning {:reply, frame, state} from the callback.
"""
end
def message(%__MODULE__{}) do
"Process attempted to call itself."
end
end