From 916e738ca00496406b8ff57ef0298d2c00976561 Mon Sep 17 00:00:00 2001 From: Anthony Mineo Date: Wed, 13 Apr 2022 14:52:16 -0400 Subject: [PATCH] feat(query): IPv4 validation handler --- lib/t2_server_query.ex | 17 +++++++++++++++++ test/t2_server_query_test.exs | 29 +++++++++++++++++------------ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/lib/t2_server_query.ex b/lib/t2_server_query.ex index 19e1621..51e9e39 100644 --- a/lib/t2_server_query.ex +++ b/lib/t2_server_query.ex @@ -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 diff --git a/test/t2_server_query_test.exs b/test/t2_server_query_test.exs index 2926ce6..66a8880 100644 --- a/test/t2_server_query_test.exs +++ b/test/t2_server_query_test.exs @@ -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