From ae81b7eb0a0ed1f33dd0527227b984730a9fb26d Mon Sep 17 00:00:00 2001 From: Craig Everett Date: Wed, 5 Mar 2025 20:06:26 +0900 Subject: [PATCH] Update --- src/hz.erl | 7 ++++--- src/hz_fetcher.erl | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/hz.erl b/src/hz.erl index 255aef8..a8e3030 100644 --- a/src/hz.erl +++ b/src/hz.erl @@ -1144,9 +1144,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 end; Error -> Error diff --git a/src/hz_fetcher.erl b/src/hz_fetcher.erl index 5758bea..277eb81 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 -> @@ -241,3 +241,40 @@ log(Level, Format, Args) -> Raw = io_lib:format("~w ~w: " ++ Format, [?MODULE, self() | Args]), Entry = unicode:characters_to_list(Raw), logger:log(Level, Entry). + + +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.