summaryrefslogtreecommitdiff
path: root/src/mod_mqtt_mnesia.erl
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2021-03-19 12:43:40 +0100
committerBadlop <badlop@process-one.net>2021-03-19 15:12:48 +0100
commit1f88a26f60295350262c7a4d85c6dfb76767fb4c (patch)
tree9c3efa876c6c5553b287d86cc2f8570a9e24b3e5 /src/mod_mqtt_mnesia.erl
parentImprove wording of sql_pool_size option documentation (#2541) (diff)
When unregistering XMPP account close its MQTT sessions (#3426)
Diffstat (limited to 'src/mod_mqtt_mnesia.erl')
-rw-r--r--src/mod_mqtt_mnesia.erl16
1 files changed, 12 insertions, 4 deletions
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(),