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