diff --git a/src/quic/sdlan_quic_transport.erl b/src/quic/sdlan_quic_transport.erl index 7dc86e4..37fa267 100644 --- a/src/quic/sdlan_quic_transport.erl +++ b/src/quic/sdlan_quic_transport.erl @@ -36,9 +36,6 @@ session :: sdlan_session:session(), - frames_recv = 0, - bytes_recv = 0, - close_reason = undefined }). @@ -159,14 +156,14 @@ handle_event(info, {quic, shutdown, Conn, ErrorCode}, _StateName, State = #state %% 处理quicer相关的信息, 需要转换成内部能够识别的frame消息 handle_event(info, {quic, Data, Stream, _Props}, _StateName, - State = #state{stream = Stream, buf = Buf, max_packet_size = MaxPacketSize, bytes_recv = BytesRecv, frames_recv = FramesRecv}) + State = #state{stream = Stream, buf = Buf, max_packet_size = MaxPacketSize}) when is_binary(Data) -> case decode_frames(<>, MaxPacketSize) of {error, Reason} -> {stop, Reason, State}; {ok, NBuf, Frames} -> Actions = [{next_event, internal, {frame, Frame}} || Frame <- Frames], - {keep_state, State#state{buf = NBuf, bytes_recv = BytesRecv + byte_size(Data), frames_recv = FramesRecv + length(Frames)}, Actions} + {keep_state, State#state{buf = NBuf}, Actions} end; %% 处理内部的包消息 @@ -272,21 +269,13 @@ expected_stop(Reason, State) -> logger:notice("[sdlan_quic_transport] expected close: ~p", [Reason]), {stop, normal, State#state{close_reason = Reason}}. -debug_info(StateName, #state{ - session = Session, - frames_recv = FramesRecv, - bytes_recv = BytesRecv, - stream_active_n = StreamActiveN, - heartbeat_sec = HeartbeatSec -}) -> +debug_info(StateName, #state{session = Session, stream_active_n = StreamActiveN, 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(quic_frames_sent), - bytes_recv => BytesRecv, bytes_sent => get_counter(quic_bytes_sent), stream_active_n => StreamActiveN, heartbeat_sec => HeartbeatSec diff --git a/src/ssl/sdlan_ssl_transport.erl b/src/ssl/sdlan_ssl_transport.erl index 7da46f1..582d949 100644 --- a/src/ssl/sdlan_ssl_transport.erl +++ b/src/ssl/sdlan_ssl_transport.erl @@ -75,10 +75,10 @@ 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, NStateName, NSession, Packets} -> - send_packets(Transport, Socket, Packets), + ssl_send(Transport, Socket, Packets), {next_state, NStateName, State#state{session = NSession}}; {stop, Reason, _NStateName, NSession, Packets} -> - send_packets(Transport, Socket, Packets), + ssl_send(Transport, Socket, Packets), {stop, Reason, State#state{session = NSession}} end; @@ -100,7 +100,7 @@ handle_event(info, {timeout, TimerRef, ping_ticker}, _StateName, State = #state{ handle_event(cast, {send_event, Event}, _StateName, State = #state{socket = Socket, transport = Transport, session = Session}) -> case sdlan_session:send_event(Event, Session) of {ok, NStateName, NSession, Packets} -> - send_packets(Transport, Socket, Packets), + ssl_send(Transport, Socket, Packets), {next_state, NStateName, State#state{session = NSession}}; {error, not_registered} -> keep_state_and_data @@ -110,7 +110,7 @@ handle_event(cast, {send_event, Event}, _StateName, State = #state{socket = Sock handle_event(cast, {command, Ref, ReceiverPid, SubCommand}, _StateName, State = #state{socket = Socket, transport = Transport, session = Session}) -> case sdlan_session:command(Ref, ReceiverPid, SubCommand, Session) of {ok, NStateName, NSession, Packets} -> - send_packets(Transport, Socket, Packets), + ssl_send(Transport, Socket, Packets), {next_state, NStateName, State#state{session = NSession}}; {error, not_registered} -> keep_state_and_data @@ -136,10 +136,12 @@ code_change(_OldVsn, StateName, State = #state{}, _Extra) -> %%% Internal functions %%%=================================================================== -ssl_send(Transport, Socket, Packet) when is_binary(Packet) -> - Len = byte_size(Packet), +ssl_send(_Transport, _Socket, []) -> + ok; +ssl_send(Transport, Socket, Data) -> + Len = iolist_size(Data), true = Len =< 65535, - case Transport:send(Socket, Packet) of + case Transport:send(Socket, Data) of ok -> incr_counter(ssl_frames_sent, 1), incr_counter(ssl_bytes_sent, Len + 2), @@ -148,9 +150,6 @@ ssl_send(Transport, Socket, Packet) when is_binary(Packet) -> exit({ssl_send_failed, Reason}) end. -send_packets(Transport, Socket, Packets) -> - lists:foreach(fun(Packet) -> ssl_send(Transport, Socket, Packet) end, Packets). - expected_stop(Reason, State) -> logger:notice("[sdlan_ssl_transport] expected close: ~p", [Reason]), {stop, normal, State#state{close_reason = Reason}}.