fix heartbeat

This commit is contained in:
anlicheng 2026-05-09 18:33:32 +08:00
parent 9b70cadf64
commit d506ec98d5

View File

@ -100,7 +100,7 @@ code_change(_OldVsn, State, _Extra) ->
-spec send_heartbeat(#state{}) -> ok.
send_heartbeat(#state{socket = Socket, host = Host, port = Port, uuid = UUID, heartbeat_secret = HeartbeatSecret}) ->
Packet = heartbeat_packet(UUID, HeartbeatSecret),
Packet = heartbeat_packet_iodata(UUID, HeartbeatSecret),
case gen_udp:send(Socket, Host, Port, Packet) of
ok ->
ok;
@ -109,11 +109,11 @@ send_heartbeat(#state{socket = Socket, host = Host, port = Port, uuid = UUID, he
ok
end.
-spec heartbeat_packet(binary(), binary()) -> binary().
heartbeat_packet(UUID, HeartbeatSecret) when is_binary(UUID), is_binary(HeartbeatSecret) ->
-spec heartbeat_packet_iodata(binary(), binary()) -> iodata().
heartbeat_packet_iodata(UUID, HeartbeatSecret) when is_binary(UUID), is_binary(HeartbeatSecret) ->
UUIDLen = byte_size(UUID),
Timestamp = efka_util:timestamp(),
Nonce = crypto:strong_rand_bytes(?HEARTBEAT_NONCE_BYTES),
Payload = <<?HEARTBEAT_VERSION:8, UUIDLen:16, UUID:UUIDLen/binary, Timestamp:64/unsigned-big, Nonce/binary>>,
Mac = crypto:mac(hmac, sha256, HeartbeatSecret, Payload),
<<Payload/binary, Mac/binary>>.
[Payload, Mac].