feat(query): IPv4 validation handler

This commit is contained in:
Anthony Mineo 2022-04-13 14:52:16 -04:00
parent 9740fc8438
commit 916e738ca0
2 changed files with 34 additions and 12 deletions

View file

@ -72,6 +72,14 @@ defmodule T2ServerQuery do
"""
def query(server_ip, port \\ 28_000, timeout \\ 3_500) do
Logger.info "query: #{server_ip}"
case is_valid_ip?(server_ip) do
true -> handle_query(server_ip, port, timeout)
false -> PacketParser.init({:error, "#{server_ip} - Invalid IP" }, nil)
end
end
defp handle_query(server_ip, port, timeout) do
{:ok, socket} = :gen_udp.open(0, [:binary, {:active, false}])
@ -99,6 +107,15 @@ defmodule T2ServerQuery do
end
defp is_valid_ip?(nil), do: false
defp is_valid_ip?(server_ip) do
case Regex.match?(~r/^([1-2]?[0-9]{1,2}\.){3}([1-2]?[0-9]{1,2})$/, server_ip) do
false -> false
true -> true
end
end
defp handle_udp_response({:ok, {_ip, port, packet}}, _server_ip, port) do
packet
|> Base.encode16

View file

@ -21,30 +21,35 @@ defmodule T2ServerQueryTest do
test "Live test a number of Tribes 2 servers" do
tasks = [
Task.async(T2ServerQuery, :query, ["35.239.88.241", 28_000]),
Task.async(T2ServerQuery, :query, ["67.222.138.13"])
Task.async(T2ServerQuery, :query, ["148.170.171.67"])
]
Task.yield_many(tasks)
|> Enum.map(fn {_task, result} ->
test_server_status(result)
|> Enum.each(fn {_task, result} ->
case result do
{:ok, _ } -> assert true
{:error, _} -> assert false
_ -> assert false
end
end)
end
defp test_server_status({:ok, _}) do
assert true
end
defp test_server_status({:error, _}) do
assert false
end
defp test_server_status(nil) do
assert false
test "Invalid IP" do
{:error, result} = T2ServerQuery.query("fake.ip")
|> T2ServerQuery.log
assert result.server_status == :offline
assert result.server_name == "fake.ip - Invalid IP"
end
end
#qry_test = T2ServerQuery.query("127.0.0.1")
#IO.inspect qry_test