From 5b1ba335cbc88d1483ded6c09354ae78e05bffdb Mon Sep 17 00:00:00 2001 From: JianBo He Date: Wed, 2 Mar 2022 14:53:59 +0800 Subject: [PATCH] chore(session): add obtain_next_pkt_id/1 In the current implement, mqtt-sn gateway is using the emqx_session as its session structure. We need a method to get a pkt_id for sending like REGISTER related messages --- apps/emqx/src/emqx_session.erl | 5 +++++ apps/emqx/test/emqx_session_SUITE.erl | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/emqx/src/emqx_session.erl b/apps/emqx/src/emqx_session.erl index 003a4cd27..504b52c12 100644 --- a/apps/emqx/src/emqx_session.erl +++ b/apps/emqx/src/emqx_session.erl @@ -60,6 +60,7 @@ , info/2 , is_session/1 , stats/1 + , obtain_next_pkt_id/1 ]). -export([ subscribe/4 @@ -746,6 +747,10 @@ inc_pd(Key, Inc) -> %%-------------------------------------------------------------------- %% Next Packet Id %%-------------------------------------------------------------------- + +obtain_next_pkt_id(Session) -> + {Session#session.next_pkt_id, next_pkt_id(Session)}. + next_pkt_id(Session = #session{next_pkt_id = ?MAX_PACKET_ID}) -> Session#session{next_pkt_id = 1}; diff --git a/apps/emqx/test/emqx_session_SUITE.erl b/apps/emqx/test/emqx_session_SUITE.erl index fe8b78c24..dd9c16428 100644 --- a/apps/emqx/test/emqx_session_SUITE.erl +++ b/apps/emqx/test/emqx_session_SUITE.erl @@ -378,7 +378,13 @@ t_next_pakt_id(_) -> Session2 = emqx_session:next_pkt_id(Session1), ?assertEqual(2, emqx_session:info(next_pkt_id, Session2)). -%%-------------------------------------------------------------------- +t_obtain_next_pkt_id(_) -> + Session = session(#{next_pkt_id => 16#FFFF}), + {16#FFFF, Session1} = emqx_session:obtain_next_pkt_id(Session), + ?assertEqual(1, emqx_session:info(next_pkt_id, Session1)), + {1, Session2} = emqx_session:obtain_next_pkt_id(Session1), + ?assertEqual(2, emqx_session:info(next_pkt_id, Session2)). + %% Helper functions %%--------------------------------------------------------------------