Software /
code /
prosody
Comparison
plugins/mod_smacks.lua @ 12803:2e12290820e8
mod_smacks: Factor out resumption token table key generation
So that happens in a single place, where it can be changed easier.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 13 Nov 2022 19:44:53 +0100 |
parent | 12802:4a8740e01813 |
child | 12851:ffa75a9ce907 |
comparison
equal
deleted
inserted
replaced
12802:4a8740e01813 | 12803:2e12290820e8 |
---|---|
82 | 82 |
83 local all_old_sessions = module:open_store("smacks_h"); | 83 local all_old_sessions = module:open_store("smacks_h"); |
84 local old_session_registry = module:open_store("smacks_h", "map"); | 84 local old_session_registry = module:open_store("smacks_h", "map"); |
85 local session_registry = module:shared "/*/smacks/resumption-tokens"; -- > user@host/resumption-token --> resource | 85 local session_registry = module:shared "/*/smacks/resumption-tokens"; -- > user@host/resumption-token --> resource |
86 | 86 |
87 local function registry_key(session, id) | |
88 return jid.join(session.username, session.host, id or session.resumption_token); | |
89 end | |
90 | |
87 local function track_session(session, id) | 91 local function track_session(session, id) |
88 session_registry[jid.join(session.username, session.host, id or session.resumption_token)] = session; | 92 session_registry[registry_key(session, id)] = session; |
89 session.resumption_token = id; | 93 session.resumption_token = id; |
90 end | 94 end |
91 | 95 |
92 local function save_old_session(session) | 96 local function save_old_session(session) |
93 session_registry[jid.join(session.username, session.host, session.resumption_token)] = nil; | 97 session_registry[registry_key(session)] = nil; |
94 return old_session_registry:set(session.username, session.resumption_token, | 98 return old_session_registry:set(session.username, session.resumption_token, |
95 { h = session.handled_stanza_count; t = os.time() }) | 99 { h = session.handled_stanza_count; t = os.time() }) |
96 end | 100 end |
97 | 101 |
98 local function clear_old_session(session, id) | 102 local function clear_old_session(session, id) |
99 session_registry[jid.join(session.username, session.host, id or session.resumption_token)] = nil; | 103 session_registry[registry_key(session, id)] = nil; |
100 return old_session_registry:set(session.username, id or session.resumption_token, nil) | 104 return old_session_registry:set(session.username, id or session.resumption_token, nil) |
101 end | 105 end |
102 | 106 |
103 local ack_errors = require"util.error".init("mod_smacks", xmlns_sm3, { | 107 local ack_errors = require"util.error".init("mod_smacks", xmlns_sm3, { |
104 head = { condition = "undefined-condition"; text = "Client acknowledged more stanzas than sent by server" }; | 108 head = { condition = "undefined-condition"; text = "Client acknowledged more stanzas than sent by server" }; |
568 session.log("warn", "Tried to resume after resource binding"); | 572 session.log("warn", "Tried to resume after resource binding"); |
569 return nil, enable_errors.new("already_bound"); | 573 return nil, enable_errors.new("already_bound"); |
570 end | 574 end |
571 | 575 |
572 local id = stanza.attr.previd; | 576 local id = stanza.attr.previd; |
573 local original_session = session_registry[jid.join(session.username, session.host, id)]; | 577 local original_session = session_registry[registry_key(session, id)]; |
574 if not original_session then | 578 if not original_session then |
575 local old_session = old_session_registry:get(session.username, id); | 579 local old_session = old_session_registry:get(session.username, id); |
576 if old_session then | 580 if old_session then |
577 session.log("debug", "Tried to resume old expired session with id %s", id); | 581 session.log("debug", "Tried to resume old expired session with id %s", id); |
578 clear_old_session(session, id); | 582 clear_old_session(session, id); |