aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mod_smacks.lua
Commit message (Collapse)AuthorAgeFilesLines
* mod_smacks: Run session destruction code in session's async contextHEADorigin/mastermasterMatthew Wild22 hours1-7/+11
| | | | | This is the Right Thing and should fix various potential issues and race conditions.
* mod_smacks: Fix previous commit for case of no session foundKim Alvefur4 days1-1/+1
|
* mod_smacks: Prevent traceback on attempting to resume destroyed sessionKim Alvefur4 days1-0/+5
| | | | | This shouldn't be possible, but seems to happen anyway after net.server somehow calling the close handler twice, which also should not happen.
* Merge 0.12->trunkKim Alvefur2024-11-021-5/+7
|\
| * mod_smacks: Destroy timed out session in async context (fixes #1884)Kim Alvefur2024-11-021-8/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | Prevents ASYNC-01 due to storage interactions in a timer. Also considered modifying mod_c2s to allow passing arbitrary closures into its runner thread but this seems like a big step away from the current code for just this module. Also considered creating a dedicated runner in mod_smacks, but ensuring continuity across module reloads might be tricky. We could further improve this in the next major version.
* | mod_smacks: Adjust buckets for resumption age statisticKim Alvefur2024-02-161-1/+1
| | | | | | | | | | | | | | | | | | Given that there are recommendations floating around recommending 24 hours session lifetime, having buckets up to 10 minutes wouldn't be useful in that case. Would be nice if we had some way to automatically assign suitable number series for buckets, scaled to what the configuration might be.
* | plugins: Use integer config API with interval specification where sensibleKim Alvefur2023-07-171-4/+4
| | | | | | | | | | | | | | Many of these fall into a few categories: - util.cache size, must be >= 1 - byte or item counts that logically can't be negative - port numbers that should be in 1..0xffff
* | plugins: Switch to :get_option_period() for time range optionsKim Alvefur2023-07-161-2/+2
| | | | | | | | Improves readability ("1 day" vs 86400) and centralizes validation.
* | Merge 0.12->trunkKim Alvefur2023-04-041-1/+10
|\|
| * mod_smacks: Replace existing watchdog when starting hibernationKim Alvefur2023-04-021-0/+4
| | | | | | | | | | | | There shouldn't be one here but if there is, for some reason, it's better to close it than have it around to wake up and possibly try to destroy the session.
| * mod_smacks: Fix stray watchdog closing sessionsKim Alvefur2023-04-021-1/+6
| | | | | | | | | | | | Unsure exactly how this happens, but sometimes a watchdog appears to close a session that isn't hibernating, or hasn't hibernating long enough.
* | plugins: Prefix module imports with prosody namespaceKim Alvefur2023-03-241-13/+13
| |
* | Merge 0.12->trunkKim Alvefur2023-01-191-0/+1
|\|
| * mod_smacks: Log something when hibernation startsKim Alvefur2023-01-191-0/+1
| | | | | | | | | | Will hopefully save future confusion about sessions being destroyed when they are in fact not.
* | mod_smacks: Factor out resumption token table key generationKim Alvefur2022-11-131-4/+8
| | | | | | | | So that happens in a single place, where it can be changed easier.
* | Merge 0.12->trunkKim Alvefur2022-12-121-161/+179
|\ \ | |/ |/|
| * mod_smacks: Only track resumable sessionsKim Alvefur2022-11-181-1/+3
| | | | | | | | Required due to track_session() having moved here
| * mod_smacks: Change boolean attribute from '1' to 'true' for compatibilityMatthew Wild2022-10-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | Conversations 2.10.10 and earlier expect this to be literally 'true' and don't recognise '1'. This leads to it not attempting resumption with Prosody at all since this change was introduced in 36ba170c4fd0. Thanks to Zash for noticing, debugging and diagnosing this issue. This issue is fixed in Conversations commit 052c58f3 (unreleased at the time of writing).
| * Backed out changeset 1bc2220cd6ecJonas Schäfer2022-10-031-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | The use of the error helpers creates an `<error/>` child element containing the error condition. This is however not allowed as per XEP-0198, which specifies that the error condition is to be a direct child of the `<failed/>` stream management element. This has triggered a fun reconnect loop in aioxmpp where it was reported by a user [1]. [1]: https://github.com/horazont/aioxmpp/issues/382
| * mod_smacks: Set session flag during successful enableMatthew Wild2022-09-031-0/+1
| |
| * mod_smacks: Add type field to results so actions can be later distinguishedMatthew Wild2022-09-031-1/+2
| |
| * mod_smacks: Set session.smacks after sending <enabled/> to fix tracebackMatthew Wild2022-08-291-2/+1
| | | | | | | | ...with opportunistic writes enabled.
| * mod_smacks: Use new :add_error() in last remaining error result constructionMatthew Wild2022-08-291-2/+1
| |
| * mod_smacks: Split enable handling to stages, to allow easier SASL2 integrationMatthew Wild2022-08-291-21/+48
| |
| * mod_smacks: Split resumption into multiple stages, to simplify ISR integrationMatthew Wild2022-08-261-63/+82
| | | | | | | | | | This will allow us to return the success/failed as part of the SASL2 response, and *then* perform the stanza sync as a second step.
| * mod_smacks: Don't close resuming session when failed due to overflowMatthew Wild2022-08-261-7/+8
| |
| * mod_smacks: Long overdue cleanup of resumption code, fixes some old TODOsMatthew Wild2022-08-261-51/+13
| |
| * Merge 0.12->trunkKim Alvefur2022-06-131-1/+1
| |\
| * | mod_smacks: Indicate that bounces are generated by the serverKim Alvefur2022-05-271-1/+2
| | | | | | | | | | | | | | | Could arguably be implied by 'recipient-unavailable' since if it was available, this error wouldn't happen.
| * | Merge 0.12->trunkKim Alvefur2022-05-271-3/+2
| |\ \
| * | | mod_smacks: Remove debug log references to timer (not used anymore)Kim Alvefur2022-05-261-2/+1
| | | | | | | | | | | | | | | | Cuts down on noise as well
| * | | Merge 0.12->trunkKim Alvefur2022-05-261-3/+2
| |\ \ \
| * | | | mod_smacks: Use session logging for remaining log messagesKim Alvefur2022-05-211-6/+6
| | | | | | | | | | | | | | | | | | | | For consistency and easier correlation of session events.
| * | | | mod_smacks: Factor out some convenience functionsKim Alvefur2022-02-111-10/+21
| | | | | | | | | | | | | | | | | | | | | | | | | Those lines are long and the risk of mistakes if another one needs to be added seems high, but lower when factored out like this.
| * | | | mod_smacks: Initialize queue before sending <enable>Kim Alvefur2022-05-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Setting the .smacks field enables code paths that expects the queue to be present. The queue is initialized in wrap_session_out(). With opportunistic writes enabled this happens immediately on .sends2s(), so the sending <enable> must happen before OR after these two lines, not in the middle.
| * | | | mod_smacks: Improve activation of smacks on outgoing s2sKim Alvefur2022-04-241-21/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using a timer was a hack to get around that stream features are not available at the right time and sendq stanzas were stored as strings so could not be counted properly. The later has now been fixed and the former is fixed by recording the relevant stream feature on the session so that the correct version of XEP-0198 can be activated once the connection has been authenticated and is ready to start.
* | | | | mod_smacks: Disable resumption behavior on s2sKim Alvefur2022-11-131-1/+2
| |_|_|/ |/| | | | | | | | | | | | | | | | | | | | | | | Since resumption is not supported on s2s currently, there is no point in allocating resumption tokens. The code that removes entries from session_registry is only invoked for c2s sessions, thus enabling resumable smacks on s2s adds an entry that never goes away.
* | | | mod_smacks: Fix #1761 by setting a flag earlierKim Alvefur2022-06-121-1/+1
| |_|/ |/| | | | | | | | | | | | | | This ensures that the flag is set even if the pre-drain callback is called from send(), as would be the case if opportunistic writes are enabled.
* | | mod_smacks: Bounce unhandled stanzas from local origin (fix #1759)0.12.1Kim Alvefur2022-05-271-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Sending stanzas with a remote session as origin when the stanzas have a local JID in the from attribute trips validation in core.stanza_router, leading to warnings: > Received a stanza claiming to be from remote.example, over a stream authed for localhost.example Using module:send() uses the local host as origin, which is fine here.
* | | mod_smacks: Fix bounce of stanzas directed to full JID on unclean disconnectKim Alvefur2022-05-271-1/+1
| |/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes #1758 Introduced in 1ea01660c79a In e62025f949f9 to and from was inverted since it changed from acting on a reply to acting on the original stanza (or a clone thereof) Unsure of the purpose of this check, you don't usually send stanzas to your own full JID. Perhaps guarding against routing loops? The check was present in the original commit of mod_smacks, prosody-modules rev 9a7671720dec
* | mod_smacks: Fix to use current method of counting acked stanzasKim Alvefur2022-05-261-3/+2
|/ | | | | | | | | Fixes #1757 These places seem to have been left since e62025f949f9 The logic around expected_h in should_ack() misbehaved, always comparing with 0 + unacked instead of acked + unacked.
* mod_smacks: Tweak resumption age buckets towards multiples of 60Kim Alvefur2022-02-041-1/+1
| | | | | This seems like the thing to do for time, which is usually divided into divisors divisible by 60, or multiplied by multiples of 60
* mod_smacks: Log error to silence luacheckKim Alvefur2021-12-311-0/+2
|
* mod_smacks: Limit "old" session resumption countersKim Alvefur2021-12-311-0/+19
| | | | | | Doing this when creating a whole new session seems reasonable because it is already expensive and this is when it may be adding to the old session store, while a successful resumption should be plus-minus zero.
* mod_smacks: Record timestamp with persisted countersKim Alvefur2021-12-311-2/+4
| | | | | For future cleanup routine when people inevitably complain about this data being stored there forever
* mod_smacks: sprinkle some metrics on itJonas Schäfer2021-12-271-2/+45
|
* mod_smacks: Compact code using new stanza APIKim Alvefur2021-12-221-9/+2
|
* mod_smacks: Use more compact resumption tokensKim Alvefur2021-12-221-2/+2
| | | | | | UUID seems like insane overkill for something user-scoped and not security-sensitive. All that is needed is to avoid conflicts among what should be relatively long-lived sessions.
* mod_smacks: Add future todoKim Alvefur2021-12-201-0/+1
| | | | | The vision: All the queueing and counting and session replacement logic in core, with mod_smacks only hooking this up to the XEP-0198 protocol.
* mod_smacks: Only include max resumption time when resumption is activatedKim Alvefur2021-12-201-1/+3
|