{data, actions}
nil ->
+ Logger.error("Message not supported by roles: #{inspect(roles)}")
{data, [{:next_event, :internal, :abort}]}
end
{:ok, %SL{data | data: %Sess{data.data | message: nil}}, actions}
+ rescue
+ er ->
+ Logger.error(inspect(er))
+ {:ok, data, [{:next_event, :internal, :transition}]}
end
@impl true
{:ok, %SL{sl | data: %Sess{sl.data | peer: peer, proxy: proxy}}, actions}
end
- @impl true
- def handle_resource(
- @handle_hello,
- _,
- @hello,
- %SL{
- data:
- %Sess{
- hello_received: true
- } = data
- } = sl
- ) do
- {:ok,
- %SL{
- sl
- | data: %Sess{
- data
- | error: "wamp.error.protocol_violation"
- }
- }, [{:next_event, :internal, :transition}, {:next_event, :internal, :abort}]}
- end
-
@impl true
def handle_resource(
@handle_subscribe,
end
@impl true
- def handle_info({:set_message, message}, _, %SL{data: %Sess{} = sess} = data) do
+ def handle_info({:set_message, message}, _, %SL{data: sess} = data) do
{:ok, %SL{data | data: %Sess{sess | message: message}}, [{:next_event, :internal, :message_received}]}
end
end
@impl true
- def handle_termination(reason, _, %SL{
+ def handle_termination(_reason, _, %SL{
data: %Sess{
db: db,
- transport: tt,
- transport_pid: t,
registrations: regs,
realm: realm,
subscriptions: subs,
proxy: proxy
}
}) do
- debug("Router session terminating #{inspect(reason)}")
-
Enum.each(inv, fn {call_id, _, {pid, node}} ->
send(
{proxy, node},
Enum.each(subs, fn {id, _proc, _} ->
RealmSession.unsubscribe(db, realm, {id, {self(), Node.self()}}, subs)
end)
-
- send_to_peer(
- Peer.abort(%Abort{reason: "wamp.error.protocol_violation"}),
- tt,
- t
- )
end
defp maybe_welcome(
{[{:next_event, :internal, :transition}], proxy, peer}
{false, peer} ->
+ Logger.error("Invalid Authentication: #{inspect(authid)}")
{[{:next_event, :internal, :transition}, {:next_event, :internal, :abort}], nil, peer}
end
end
{[], ch}
false ->
+ Logger.error("Not a supported authentication method: #{am}")
{[{:next_event, :internal, :abort}], nil}
end
%{} ->
+ Logger.error("No authentication details given")
{[{:next_event, :internal, :abort}], nil}
end
end
@json "wamp.2.json"
@msgpack "wamp.2.msgpack"
- defstruct [:serializer, :session]
+ defstruct [:serializer, :session, :last_message]
def send_request(transport, message) do
send(transport, {:send_request, message})
def websocket_init({state, db, name, atm, azm}) do
{:ok, session} = Realms.start_session(Router.realms_name(name), db, name, WebSocket, self(), atm, azm)
Process.link(session)
- Logger.debug("Websocket Initialized: #{inspect(state)}")
+ Logger.debug("#{__MODULE__} Websocket Initialized: #{inspect(state)}")
{:ok, %WebSocket{state | session: session}}
end
def websocket_handle({type, payload}, state) do
Logger.debug("Received #{type} Payload: #{payload}")
handle_payload({payload, state})
- {:ok, state}
end
@impl true
@impl true
def websocket_handle(unknown, state) do
- Logger.warn("Unknown websocket frame #{inspect(unknown)}")
+ Logger.warn("#{__MODULE__} Unknown websocket frame #{inspect(unknown)}")
{:ok, state}
end
@impl true
def websocket_info(
{:EXIT, _pid = session_pid, reason},
- %WebSocket{session: session_pid} = state
+ %WebSocket{session: session_pid, last_message: lm} = state
) do
- Logger.warn("Session ended because #{inspect(reason)}, closing connection")
+ Logger.warn(
+ "#{__MODULE__} Session ended because #{inspect(reason)}, closing connection. Last message #{inspect(lm)}"
+ )
+
{:stop, state}
end
@impl true
def websocket_info(event, state) do
- Logger.debug("Received unhandled event: #{inspect(event)}")
+ Logger.debug("#{__MODULE__} Received unhandled event: #{inspect(event)}")
{:ok, state}
end
@impl true
def terminate(reason, _req, _state) do
- Logger.debug("Websocket closing for reason #{inspect(reason)}")
+ Logger.debug("#{__MODULE__} Websocket closing for reason #{inspect(reason)}")
:ok
end
defp handle_event(ms, %WebSocket{session: s} = state) do
send(s, {:set_message, ms})
- {:ok, state}
+ {:ok, %WebSocket{state | last_message: ms}}
end
defp get_serializer(req) do
version: "0.1.0",
elixir: "~> 1.9",
start_permanent: Mix.env() == :prod,
- elixirc_paths: elixirc_paths(Mix.env()),
aliases: aliases(),
deps: deps(),
- preferred_cli_env: [
- coveralls: :test,
- "coveralls.detail": :test,
- "coveralls.post": :test,
- "coveralls.html": :test,
- all_tests: :test
- ],
- test_coverage: [tool: ExCoveralls],
docs: [
main: "readme",
extras: ["README.md"],
]
end
- defp elixirc_paths(:test), do: ["lib", "test/support"]
- defp elixirc_paths(_), do: ["lib"]
-
def application do
[
extra_applications: [:logger],
{:credo, "~> 1.2", only: [:test], runtime: false},
{:dialyxir, "~> 0.5.1", only: [:test], runtime: false},
{:ex_doc, "~> 0.21", only: :dev, runtime: false},
- {:jason, "~> 1.1"},
{:plug_cowboy, "~> 2.1"},
{:states_language, "~> 0.2"},
{:wampex, git: "https://gitlab.com/entropealabs/wampex.git", tag: "ecba713117f1e048829be79f19373952638c6ece"}