Current section
Files
Jump to
Current section
Files
lib/radius.ex
defmodule Radius do
alias Radius.Packet
@doc """
wrapper of gen_udp.open
"""
def listen(port) do
:gen_udp.open(port, [{:active, :false}, {:mode, :binary}])
end
@doc """
recv and decode packet.
sk :: socket
secret :: string | fn({host,port}) -> string
"""
def recv(sk, secret) when is_binary(secret) do
recv(sk, fn(_) -> secret end)
end
def recv(sk, secret_fn) when is_function(secret_fn) do
{:ok, {host, port, data}} = :gen_udp.recv(sk, 5000)
secret = secret_fn.({host, port})
packet = Packet.decode(data, secret)
{:ok, {host, port}, packet}
end
@doc """
encode and send packet
sk :: socket
packet:: %Radius.Packet{}
"""
def send(sk, {host, port}, packet) do
data = Packet.encode(packet)
:gen_udp.send(sk, host, port, data)
end
end