fix transport
This commit is contained in:
parent
c15a38e8c8
commit
ce2e8a4d60
@ -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
|
||||||
}).
|
}).
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user