From 1f88a26f60295350262c7a4d85c6dfb76767fb4c Mon Sep 17 00:00:00 2001 From: Badlop Date: Fri, 19 Mar 2021 12:43:40 +0100 Subject: When unregistering XMPP account close its MQTT sessions (#3426) --- src/mod_mqtt_mnesia.erl | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/mod_mqtt_mnesia.erl') diff --git a/src/mod_mqtt_mnesia.erl b/src/mod_mqtt_mnesia.erl index a5b66bf5..92c43d2e 100644 --- a/src/mod_mqtt_mnesia.erl +++ b/src/mod_mqtt_mnesia.erl @@ -23,7 +23,7 @@ -export([list_topics/1, use_cache/1]). -export([init/0]). -export([subscribe/4, unsubscribe/2, find_subscriber/2]). --export([open_session/1, close_session/1, lookup_session/1]). +-export([open_session/1, close_session/1, lookup_session/1, get_sessions/2]). -include("logger.hrl"). -include("mqtt.hrl"). @@ -46,9 +46,9 @@ pid :: pid(), timestamp :: erlang:timestamp()}). --record(mqtt_session, {usr :: jid:ljid(), - pid :: pid(), - timestamp :: erlang:timestamp()}). +-record(mqtt_session, {usr :: jid:ljid() | {'_', '_', '$1'}, + pid :: pid() | '_', + timestamp :: erlang:timestamp() | '_'}). %%%=================================================================== %%% API @@ -196,6 +196,14 @@ lookup_session(USR) -> {error, notfound} end. +get_sessions(U, S) -> + Resources = mnesia:dirty_select(mqtt_session, + [{#mqtt_session{usr = {U, S, '$1'}, + _ = '_'}, + [], + ['$1']}]), + [{U, S, Resource} || Resource <- Resources]. + subscribe({U, S, R} = USR, TopicFilter, SubOpts, ID) -> T1 = misc:unique_timestamp(), P1 = self(), -- cgit v1.2.3