|
@@ -547,7 +547,7 @@ parse_incoming(Data, State = #state{parse_state = ParseState}) ->
|
|
|
NState = State#state{parse_state = NParseState},
|
|
NState = State#state{parse_state = NParseState},
|
|
|
parse_incoming(Rest, postpone({incoming, Packet}, NState))
|
|
parse_incoming(Rest, postpone({incoming, Packet}, NState))
|
|
|
catch
|
|
catch
|
|
|
- throw : ?FRAME_ERROR(Reason) ->
|
|
|
|
|
|
|
+ throw : ?FRAME_PARSE_ERROR(Reason) ->
|
|
|
?SLOG(info, #{ reason => Reason
|
|
?SLOG(info, #{ reason => Reason
|
|
|
, at_state => emqx_frame:describe_state(ParseState)
|
|
, at_state => emqx_frame:describe_state(ParseState)
|
|
|
, input_bytes => Data
|
|
, input_bytes => Data
|
|
@@ -555,11 +555,11 @@ parse_incoming(Data, State = #state{parse_state = ParseState}) ->
|
|
|
FrameError = {frame_error, Reason},
|
|
FrameError = {frame_error, Reason},
|
|
|
postpone({incoming, FrameError}, State);
|
|
postpone({incoming, FrameError}, State);
|
|
|
error : Reason : Stacktrace ->
|
|
error : Reason : Stacktrace ->
|
|
|
- ?SLOG(info, #{ at_state => emqx_frame:describe_state(ParseState)
|
|
|
|
|
- , input_bytes => Data
|
|
|
|
|
- , exception => Reason
|
|
|
|
|
- , stacktrace => Stacktrace
|
|
|
|
|
- }),
|
|
|
|
|
|
|
+ ?SLOG(error, #{ at_state => emqx_frame:describe_state(ParseState)
|
|
|
|
|
+ , input_bytes => Data
|
|
|
|
|
+ , exception => Reason
|
|
|
|
|
+ , stacktrace => Stacktrace
|
|
|
|
|
+ }),
|
|
|
FrameError = {frame_error, Reason},
|
|
FrameError = {frame_error, Reason},
|
|
|
postpone({incoming, FrameError}, State)
|
|
postpone({incoming, FrameError}, State)
|
|
|
end.
|
|
end.
|
|
@@ -627,7 +627,7 @@ handle_outgoing(Packets, State = #state{mqtt_piggyback = MQTTPiggyback,
|
|
|
|
|
|
|
|
serialize_and_inc_stats_fun(#state{serialize = Serialize}) ->
|
|
serialize_and_inc_stats_fun(#state{serialize = Serialize}) ->
|
|
|
fun(Packet) ->
|
|
fun(Packet) ->
|
|
|
- case emqx_frame:serialize_pkt(Packet, Serialize) of
|
|
|
|
|
|
|
+ try emqx_frame:serialize_pkt(Packet, Serialize) of
|
|
|
<<>> -> ?LOG(warning, "~s is discarded due to the frame is too large.",
|
|
<<>> -> ?LOG(warning, "~s is discarded due to the frame is too large.",
|
|
|
[emqx_packet:format(Packet)]),
|
|
[emqx_packet:format(Packet)]),
|
|
|
ok = emqx_metrics:inc('delivery.dropped.too_large'),
|
|
ok = emqx_metrics:inc('delivery.dropped.too_large'),
|
|
@@ -636,6 +636,17 @@ serialize_and_inc_stats_fun(#state{serialize = Serialize}) ->
|
|
|
Data -> ?LOG(debug, "SEND ~s", [emqx_packet:format(Packet)]),
|
|
Data -> ?LOG(debug, "SEND ~s", [emqx_packet:format(Packet)]),
|
|
|
ok = inc_outgoing_stats(Packet),
|
|
ok = inc_outgoing_stats(Packet),
|
|
|
Data
|
|
Data
|
|
|
|
|
+ catch
|
|
|
|
|
+ %% Maybe Never happen.
|
|
|
|
|
+ throw : ?FRAME_SERIALIZE_ERROR(Reason) ->
|
|
|
|
|
+ ?SLOG(info, #{ reason => Reason
|
|
|
|
|
+ , input_packet => Packet}),
|
|
|
|
|
+ erlang:error(?FRAME_SERIALIZE_ERROR(Reason));
|
|
|
|
|
+ error : Reason : Stacktrace ->
|
|
|
|
|
+ ?SLOG(error, #{ input_packet => Packet
|
|
|
|
|
+ , exception => Reason
|
|
|
|
|
+ , stacktrace => Stacktrace}),
|
|
|
|
|
+ erlang:raise(error, Reason, Stacktrace)
|
|
|
end
|
|
end
|
|
|
end.
|
|
end.
|
|
|
|
|
|