mirror of
https://github.com/amineo/t2_server_query_elixir.git
synced 2026-04-29 16:15:21 +00:00
feat(query): IPv4 validation handler
This commit is contained in:
parent
9740fc8438
commit
916e738ca0
2 changed files with 34 additions and 12 deletions
|
|
@ -72,6 +72,14 @@ defmodule T2ServerQuery do
|
||||||
"""
|
"""
|
||||||
def query(server_ip, port \\ 28_000, timeout \\ 3_500) do
|
def query(server_ip, port \\ 28_000, timeout \\ 3_500) do
|
||||||
Logger.info "query: #{server_ip}"
|
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}])
|
{:ok, socket} = :gen_udp.open(0, [:binary, {:active, false}])
|
||||||
|
|
||||||
|
|
@ -99,6 +107,15 @@ defmodule T2ServerQuery do
|
||||||
end
|
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
|
defp handle_udp_response({:ok, {_ip, port, packet}}, _server_ip, port) do
|
||||||
packet
|
packet
|
||||||
|> Base.encode16
|
|> Base.encode16
|
||||||
|
|
|
||||||
|
|
@ -21,30 +21,35 @@ defmodule T2ServerQueryTest do
|
||||||
test "Live test a number of Tribes 2 servers" do
|
test "Live test a number of Tribes 2 servers" do
|
||||||
tasks = [
|
tasks = [
|
||||||
Task.async(T2ServerQuery, :query, ["35.239.88.241", 28_000]),
|
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)
|
Task.yield_many(tasks)
|
||||||
|> Enum.map(fn {_task, result} ->
|
|> Enum.each(fn {_task, result} ->
|
||||||
test_server_status(result)
|
case result do
|
||||||
|
{:ok, _ } -> assert true
|
||||||
|
{:error, _} -> assert false
|
||||||
|
_ -> assert false
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp test_server_status({:ok, _}) do
|
|
||||||
assert true
|
test "Invalid IP" do
|
||||||
end
|
{:error, result} = T2ServerQuery.query("fake.ip")
|
||||||
defp test_server_status({:error, _}) do
|
|> T2ServerQuery.log
|
||||||
assert false
|
|
||||||
end
|
assert result.server_status == :offline
|
||||||
defp test_server_status(nil) do
|
assert result.server_name == "fake.ip - Invalid IP"
|
||||||
assert false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#qry_test = T2ServerQuery.query("127.0.0.1")
|
#qry_test = T2ServerQuery.query("127.0.0.1")
|
||||||
#IO.inspect qry_test
|
#IO.inspect qry_test
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue