Current section

Files

Jump to
shadowsocks lib shadowsocks event.ex
Raw

lib/shadowsocks/event.ex

defmodule Shadowsocks.Event do
require Logger
defmacro start_listener(port) do
quote do
:gen_event.notify(Shadowsocks.Event, {:port, :open, unquote(port)})
end
end
defmacro open_conn(port, pid, sock) do
quote do
{:ok, {addr, _}} = :inet.peername(unquote(sock))
:gen_event.notify(Shadowsocks.Event, {:conn, :open, {unquote(port), unquote(pid), addr}})
end
end
defmacro close_conn(port, pid, reason, flow) do
quote do
:gen_event.notify(Shadowsocks.Event, {:conn, :close, {unquote(port), unquote(pid), unquote(reason), unquote(flow)}})
end
end
defmacro connect(port, info) do
quote do
Logger.debug "#{inspect unquote(info)}"
:gen_event.notify(Shadowsocks.Event, {:conn, :connect, {unquote(port), unquote(self()), unquote(info)}})
end
end
defmacro flow(port, down, up) do
quote do
:gen_event.notify(Shadowsocks.Event, {:port, :flow, {unquote(port),unquote(down), unquote(up)}})
end
end
defmacro sync_flow(port, down, up) do
quote do
:gen_event.sync_notify(Shadowsocks.Event, {:port, :flow, {unquote(port),unquote(down), unquote(up)}})
end
end
end