diff --git a/src/hz.erl b/src/hz.erl index f76b6ab..e09ad7b 100644 --- a/src/hz.erl +++ b/src/hz.erl @@ -1143,9 +1143,10 @@ assemble_calldata2(OwnerID, Nonce, Amount, TTL, Gas, GasPrice, Compiled, CallDat read_aci(Path) -> case file:read_file(Path) of {ok, Bin} -> - case zx_lib:b_to_ts(Bin) of - error -> {error, bad_aci}; - OK -> OK + try + {ok, binary_to_term(Bin, [safe])} + catch + error:badarg -> {error, bad_aci} end; Error -> Error diff --git a/src/hz_fetcher.erl b/src/hz_fetcher.erl index 864eac9..0651716 100644 --- a/src/hz_fetcher.erl +++ b/src/hz_fetcher.erl @@ -76,7 +76,7 @@ parse(Received, Sock, From, Timer) -> <<"HTTP/1.1 500 Internal Server Error\r\n", Tail/binary>> -> parse2(500, Tail, Sock, From, Timer); _ -> - ok = zx_net:disconnect(Sock), + ok = disconnect(Sock), ok = erlang:cancel_timer(Timer, [{async, true}]), gen_server:reply(From, {error, {received, Received}}) end. @@ -113,7 +113,7 @@ consume2(Length, Received, Sock, From, Timer) -> if Size == Length -> ok = erlang:cancel_timer(Timer, [{async, true}]), - ok = zx_net:disconnect(Sock), + ok = disconnect(Sock), Result = zj:decode(Received), gen_server:reply(From, Result); Size < Length -> @@ -236,6 +236,42 @@ url({Node, Port}, Path) when is_tuple(Node) -> ["https://", inet:ntoa(Node), ":", integer_to_list(Port), Path]. +disconnect(Socket) -> + case peername(Socket) of + {ok, {Addr, Port}} -> + Host = inet:ntoa(Addr), + disconnect(Socket, Host, Port); + {error, Reason} -> + log(warning, "Disconnect failed with: ~w", [Reason]) + end. + +disconnect(Socket, Host, Port) -> + case gen_tcp:shutdown(Socket, read_write) of + ok -> + ok; + {error, enotconn} -> + receive + {tcp_closed, Socket} -> ok + after 0 -> ok + end; + {error, E} -> + ok = log(warning, "~ts:~w disconnect failed with: ~w", [Host, Port, E]), + receive + {tcp_closed, Socket} -> ok + after 0 -> ok + end + end. + +peername(Socket) -> + case inet:peername(Socket) of + {ok, {{0, 0, 0, 0, 0, 65535, X, Y}, Port}} -> + <> = <>, + {ok, {{A, B, C, D}, Port}}; + Other -> + Other + end. + + log(Level, Format, Args) -> Raw = io_lib:format("~w ~w: " ++ Format, [?MODULE, self() | Args]), Entry = unicode:characters_to_list(Raw), diff --git a/src/hz_key_master.erl b/src/hz_key_master.erl index dbd91e4..0d9638e 100644 --- a/src/hz_key_master.erl +++ b/src/hz_key_master.erl @@ -91,9 +91,8 @@ chunksize(N, C, A) -> chunksize(N div C, C, A + 1). read_words() -> - {ok, V} = zx_lib:string_to_version(proplists:get_value(vsn, module_info(attributes))), - HZ_Lib = zx_lib:ppath(lib, {"otpr", "hakuzaru", V}), - Path = filename:join([HZ_Lib, "priv", "words4096.txt"]), + ModPath = code:which(?MODULE), + Path = filename:join([filename:dirname(filename:dirname(ModPath)), "priv", "words4096.txt"]), {ok, Bin} = file:read_file(Path), string:lexemes(Bin, "\n").