defmodule SocksServer.Packet do @ipv4Address 1 @fqdnAddress 3 @ipv6Address 4 def parse_hello(<> <> _rest = data) do %{ version: version, auth_type: (for <>,do: method) } end def parse_hello(data) do :error end def parse_auth(<> <> _rest) do {:error,:not_implemented} end def parse_auth(data) do :error end def parse_request(<> <> _rest) do %{ version: version, method: method, type: :ipv4, ip: ((for <>,do: to_string(i)) |> Enum.join(".")), port: port } end def parse_request(<> <> _rest) do %{ version: version, method: method, type: :ipv6, ip: ((for <>,do: i |> Base.encode16) |> Enum.join(":")), port: port } end def parse_request(<> <> _rest) do %{ version: version, method: method, type: :fqdn, addr: addr, port: port } end def parse_addr(_) do :error end def ip_to_addr({ip1,ip2,ip3,ip4}) do <> end end