From b07242515fadfeec4f6f7e1191cdfa608fb55c26 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Fri, 10 May 2024 17:12:28 +0800 Subject: [PATCH] fix(gw): jt808 REG_ACK failed due to faulty clientinfo --- .../src/emqx_jt808_channel.erl | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/apps/emqx_gateway_jt808/src/emqx_jt808_channel.erl b/apps/emqx_gateway_jt808/src/emqx_jt808_channel.erl index eec1c24da..a6c2a4425 100644 --- a/apps/emqx_gateway_jt808/src/emqx_jt808_channel.erl +++ b/apps/emqx_gateway_jt808/src/emqx_jt808_channel.erl @@ -241,19 +241,24 @@ do_handle_in(Frame = ?MSG(?MC_GENERAL_RESPONSE), Channel = #channel{inflight = I {ok, Channel#channel{inflight = NewInflight}}; do_handle_in(Frame = ?MSG(?MC_REGISTER), Channel0) -> #{<<"header">> := #{<<"msg_sn">> := MsgSn}} = Frame, - case emqx_jt808_auth:register(Frame, Channel0#channel.auth) of - {ok, Authcode} -> - {ok, Conninfo} = enrich_conninfo(Frame, Channel0#channel{authcode = Authcode}), - {ok, Channel} = enrich_clientinfo(Frame, Conninfo), - handle_out({?MS_REGISTER_ACK, 0}, MsgSn, Channel); - {error, Reason} -> - ?SLOG(error, #{msg => "register_failed", reason => Reason}), - ResCode = - case is_integer(Reason) of - true -> Reason; - false -> 1 - end, - handle_out({?MS_REGISTER_ACK, ResCode}, MsgSn, Channel0) + case + emqx_utils:pipeline( + [ + fun enrich_clientinfo/2, + fun enrich_conninfo/2, + fun set_log_meta/2 + ], + Frame, + Channel0 + ) + of + {ok, _NFrame, Channel} -> + case register_(Frame, Channel) of + {ok, NChannel} -> + handle_out({?MS_REGISTER_ACK, 0}, MsgSn, NChannel); + {error, ResCode} -> + handle_out({?MS_REGISTER_ACK, ResCode}, MsgSn, Channel) + end end; do_handle_in(Frame = ?MSG(?MC_AUTH), Channel0) -> #{<<"header">> := #{<<"msg_sn">> := MsgSn}} = Frame, @@ -859,6 +864,20 @@ is_driver_id_req_exist(#channel{inflight = Inflight}) -> Key = get_msg_ack(?MC_DRIVER_ID_REPORT, none), emqx_inflight:contain(Key, Inflight). +register_(Frame, Channel0) -> + case emqx_jt808_auth:register(Frame, Channel0#channel.auth) of + {ok, Authcode} -> + {ok, Channel0#channel{authcode = Authcode}}; + {error, Reason} -> + ?SLOG(error, #{msg => "register_failed", reason => Reason}), + ResCode = + case is_integer(Reason) of + true -> Reason; + false -> 1 + end, + {error, ResCode} + end. + authenticate(_AuthFrame, #channel{authcode = anonymous}) -> true; authenticate(AuthFrame, #channel{authcode = undefined, auth = Auth}) ->