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 %%--------------------------------------------------------------------