diff --git a/zx b/zx index b7d768b..c01203e 100755 --- a/zx +++ b/zx @@ -308,23 +308,37 @@ ensure_installed(PackageID = {Realm, Name, Version}) -> ensure_installed(Realm, Name, Version) -> Socket = connect_user(Realm), - {ok, LatestVersion} = query_latest(Socket, {Realm, Name, Version}), - LatestID = {Realm, Name, LatestVersion}, - ok = ensure_dep(Socket, LatestID), - ok = disconnect(Socket), - {ok, LatestID}. + case query_latest(Socket, {Realm, Name, Version}) of + {ok, LatestVersion} -> + LatestID = {Realm, Name, LatestVersion}, + ok = ensure_dep(Socket, LatestID), + ok = disconnect(Socket), + {ok, LatestID}; + {error, bad_realm} -> + PackageString = package_string({Realm, Name, Version}), + ok = log(warning, "Bad realm: ~ts.", [PackageString]), + halt(1); + {error, bad_package} -> + PackageString = package_string({Realm, Name, Version}), + ok = log(warning, "Bad package: ~ts.", [PackageString]), + halt(1); + {error, bad_version} -> + PackageString = package_string({Realm, Name, Version}), + ok = log(warning, "Bad version: ~s.", [PackageString]), + halt(1) + end. query_latest(Socket, {Realm, Name}) -> ok = send(Socket, {latest, Realm, Name}), receive - {tcp, Socket, Bin} -> binary_to_term(Bin, [safe]) + {tcp, Socket, Bin} -> binary_to_term(Bin) after 5000 -> {error, timeout} end; query_latest(Socket, {Realm, Name, Version}) -> ok = send(Socket, {latest, Realm, Name, Version}), receive - {tcp, Socket, Bin} -> binary_to_term(Bin, [safe]) + {tcp, Socket, Bin} -> binary_to_term(Bin) after 5000 -> {error, timeout} end. @@ -779,7 +793,7 @@ submit(PackageFile) -> ok = receive {tcp, Socket, Response1} -> - case binary_to_term(Response1, [safe]) of + case binary_to_term(Response1) of ready -> ok; {error, Reason} -> @@ -834,7 +848,7 @@ connect_user(Realm) -> connect_user(Realm, []) -> {Host, Port} = get_prime(Realm), - ok = log(info, "Realm host at ~tp:~tp", [Host, Port]), + ok = log(info, "Realm host at ~ts:~tp", [inet:ntoa(Host), Port]), case gen_tcp:connect(Host, Port, connect_options(), 5000) of {ok, Socket} -> confirm_user(Realm, Socket, []); @@ -865,9 +879,9 @@ confirm_user(Realm, Socket, Hosts) -> ok = gen_tcp:send(Socket, <<"OTPR USER 1">>), receive {tcp, Socket, Bin} -> - case binary_to_term(Bin, [safe]) of + case binary_to_term(Bin) of ok -> - ok = log(info, "Connected to ~s:~p", [Host, Port]), + ok = log(info, "Connected to ~ts:~p", [Host, Port]), confirm_serial(Realm, Socket, Hosts); {redirect, Next} -> ok = log(info, "Redirected..."), @@ -875,7 +889,7 @@ confirm_user(Realm, Socket, Hosts) -> connect_user(Realm, Next ++ Hosts) end after 5000 -> - ok = log(warning, "Host ~s:~p timed out.", [Host, Port]), + ok = log(warning, "Host ~ts:~p timed out.", [Host, Port]), ok = disconnect(Socket), connect_user(Realm, Hosts) end. @@ -898,13 +912,13 @@ confirm_serial(Realm, Socket, Hosts) -> end, Serial = case lists:keyfind(Realm, 1, Serials) of - false -> 1; + false -> 0; {Realm, S} -> S end, ok = send(Socket, {latest, Realm}), receive {tcp, Socket, Bin} -> - case binary_to_term(Bin, [safe]) of + case binary_to_term(Bin) of {ok, Serial} -> ok = log(info, "Node's serial same as ours."), Socket; @@ -1442,7 +1456,7 @@ request_zrp(Socket, PackageID) -> ok = send(Socket, {fetch, PackageID}), receive {tcp, Socket, Bin} -> - case binary_to_term(Bin, [safe]) of + case binary_to_term(Bin) of {sending, LatestID} -> {ok, LatestID}; Error = {error, Reason} ->