fix transport

This commit is contained in:
anlicheng 2026-05-03 14:26:11 +08:00
parent c15a38e8c8
commit ce2e8a4d60

View File

@ -29,9 +29,6 @@
session :: sdlan_session:session(),
frames_recv = 0,
bytes_recv = 0,
close_reason = undefined
}).
@ -63,8 +60,7 @@ callback_mode() ->
handle_event_function.
handle_event(info, {handshake, Ref, Transport, Socket, Timeout}, handshaking,
State = #state{ref = Ref, transport = Transport, max_packet_size = MaxPacketSize,
heartbeat_sec = HeartbeatSec}) ->
State = #state{ref = Ref, transport = Transport, max_packet_size = MaxPacketSize, heartbeat_sec = HeartbeatSec}) ->
case Transport:handshake(Socket, [], Timeout) of
{ok, SslSocket} ->
ok = Transport:setopts(SslSocket, [{mode, binary}, {packet, 2}, {active, true}]),
@ -75,19 +71,8 @@ handle_event(info, {handshake, Ref, Transport, Socket, Timeout}, handshaking,
{stop, {ssl_handshake_failed, Reason}, State}
end;
handle_event(info, {ssl, Socket, Data}, _StateName,
State = #state{socket = Socket, bytes_recv = BytesRecv, frames_recv = FramesRecv}) when is_binary(Data) ->
{keep_state, State#state{bytes_recv = BytesRecv + byte_size(Data), frames_recv = FramesRecv + 1},
[{next_event, internal, {frame, Data}}]};
handle_event(info, {ssl_closed, Socket}, _StateName, State = #state{socket = Socket}) ->
expected_stop(socket_closed, State);
handle_event(info, {ssl_error, Socket, Reason}, _StateName, State = #state{socket = Socket}) ->
expected_stop({socket_error, Reason}, State);
%%
handle_event(internal, {frame, Frame}, StateName, State = #state{socket = Socket, transport = Transport, session = Session}) ->
handle_event(info, {ssl, Socket, Frame}, StateName,
State = #state{socket = Socket, transport = Transport, session = Session}) when is_binary(Frame) ->
case sdlan_session:handle_frame(Frame, Session) of
{ok, NSession, Packets} ->
send_packets(Transport, Socket, Packets),
@ -97,6 +82,12 @@ handle_event(internal, {frame, Frame}, StateName, State = #state{socket = Socket
{stop, Reason, State#state{session = NSession}}
end;
handle_event(info, {ssl_closed, Socket}, _StateName, State = #state{socket = Socket}) ->
expected_stop(socket_closed, State);
handle_event(info, {ssl_error, Socket, Reason}, _StateName, State = #state{socket = Socket}) ->
expected_stop({socket_error, Reason}, State);
handle_event(info, {timeout, TimerRef, ping_ticker}, _StateName, State = #state{session = Session}) ->
case sdlan_session:handle_timeout(TimerRef, Session) of
{ok, NSession} ->
@ -167,20 +158,13 @@ expected_stop(Reason, State) ->
next_state_name(_StateName, Session) ->
sdlan_session:state_name(Session).
debug_info(StateName, #state{
session = Session,
frames_recv = FramesRecv,
bytes_recv = BytesRecv,
heartbeat_sec = HeartbeatSec
}) ->
debug_info(StateName, #state{session = Session, heartbeat_sec = HeartbeatSec}) ->
ProcInfo = maps:from_list(process_info(self(), [message_queue_len, memory, reductions])),
SessionInfo = sdlan_session:debug_info(Session),
maps:merge(SessionInfo, ProcInfo#{
state => StateName,
session => SessionInfo,
frames_recv => FramesRecv,
frames_sent => get_counter(ssl_frames_sent),
bytes_recv => BytesRecv,
bytes_sent => get_counter(ssl_bytes_sent),
heartbeat_sec => HeartbeatSec
}).