diff --git a/src/emqttd_client.erl b/src/emqttd_client.erl index ed133856b..c9421413e 100644 --- a/src/emqttd_client.erl +++ b/src/emqttd_client.erl @@ -34,7 +34,7 @@ -include("emqttd_protocol.hrl"). %% API Function Exports --export([start_link/2, info/1, kick/1, subscribe/2]). +-export([start_link/2, session/1, info/1, kick/1, subscribe/2]). -behaviour(gen_server). @@ -58,6 +58,9 @@ start_link(SockArgs, PktOpts) -> {ok, proc_lib:spawn_link(?MODULE, init, [[SockArgs, PktOpts]])}. +session(CPid) -> + gen_server:call(CPid, session). + info(CPid) -> gen_server:call(CPid, info, infinity). @@ -87,6 +90,9 @@ init([SockArgs = {Transport, Sock, _SockFun}, PacketOpts]) -> proto_state = ProtoState}), gen_server:enter_loop(?MODULE, [], State, 10000). +handle_call(session, _From, State = #state{proto_state = ProtoState}) -> + {reply, emqttd_protocol:session(ProtoState), State}; + handle_call(info, _From, State = #state{conn_name = ConnName, proto_state = ProtoState}) -> {reply, [{conn_name, ConnName} | emqttd_protocol:info(ProtoState)], State}; diff --git a/src/emqttd_protocol.erl b/src/emqttd_protocol.erl index ffd11972b..6dbd85533 100644 --- a/src/emqttd_protocol.erl +++ b/src/emqttd_protocol.erl @@ -34,7 +34,7 @@ -include("emqttd_protocol.hrl"). %% API --export([init/3, info/1, clientid/1, client/1]). +-export([init/3, info/1, clientid/1, client/1, session/1]). -export([received/2, send/2, redeliver/2, shutdown/2]). @@ -122,6 +122,9 @@ client(#proto_state{client_id = ClientId, ws_initial_headers = WsInitialHeaders, connected_at = Time}. +session(#proto_state{session = Session}) -> + Session. + %% CONNECT – Client requests a connection to a Server %%A Client can only send the CONNECT Packet once over a Network Connection. diff --git a/src/emqttd_session.erl b/src/emqttd_session.erl index 4e01ae541..bffbaf759 100644 --- a/src/emqttd_session.erl +++ b/src/emqttd_session.erl @@ -223,7 +223,7 @@ unsubscribe(SessPid, Topics) -> %%%============================================================================= init([CleanSess, ClientId, ClientPid]) -> - process_flag(trap_exit, true), + %process_flag(trap_exit, true), QEnv = emqttd:env(mqtt, queue), SessEnv = emqttd:env(mqtt, session), Session = #session{