aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mod_smacks.lua
Commit message (Collapse)AuthorAgeFilesLines
* 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: 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: 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: 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: 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: 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: 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: 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
|
* mod_smacks: Fix typosKim Alvefur2021-12-201-2/+2
|
* mod_smacks: Fix error on shutdown if loaded on ComponentKim Alvefur2021-12-201-0/+4
|
* mod_smacks: Fix typo (thanks codespell)Kim Alvefur2021-12-191-1/+1
|
* mod_smacks: Avoid log noise when a non-smacks session is closedKim Alvefur2021-12-191-0/+1
|
* mod_smacks: Check if session was really sleeping before logging messageKim Alvefur2021-12-181-1/+1
| | | | | | It could have been resumed without going into hibernation first, i.e. when the client notices the disconnect before the server, or if it switches networks etc.
* mod_smacks: Fix traceback when bouncing unacked stanzasKim Alvefur2021-12-181-0/+1
| | | | | Errors sent from handle_unacked_stanzas() should usually not be sent to the session itself, but if one is, it should not be queued.
* mod_smacks: Fix duplicate sleep behavior when replacing a sessionKim Alvefur2021-12-181-0/+1
| | | | | Fixes that an extra watchdog was set, leaking the previous one, which went on to do behave as if the session times out.
* mod_smacks: Remove references to connection on hibernationKim Alvefur2021-12-181-1/+4
| | | | | | Still having the connection on the session may cause unintentional behavior, such as the session being treated as if connected, even tho the connection has been closed.
* mod_smacks: Add more loggingKim Alvefur2021-12-181-0/+9
|
* mod_smacks: Remove useless delay in requesting ack on resumptionKim Alvefur2021-12-171-23/+1
| | | | Was this the last place using the delay? Nice!
* mod_smacks: Fix to not wait for acks from before a resumptionKim Alvefur2021-12-171-0/+1
| | | | | Otherwise it can get stuck waiting indefinitely for an ack that made it notice the connection was stale.
* mod_smacks: Split log messages for when an old session exists in storageKim Alvefur2021-12-171-1/+2
| | | | Non-existent did not seem entirely accurate for this case
* mod_smacks: Bounce unacked stanzas on shutdownKim Alvefur2021-12-171-1/+11
|
* mod_smacks: Preserve counter values on shutdownKim Alvefur2021-12-171-0/+22
|
* mod_smacks: Simplify access to local user sessionsKim Alvefur2021-12-171-2/+2
| | | | | Less to type if per chance the next commit also wants to access sessions.
* mod_smacks: Cancel hibernation when session is closedKim Alvefur2021-12-161-0/+6
| | | | | | To ensure that if a session is replaced after it has gone into hibernation, it does not come back and cause trouble for the new session (see previous commit).
* mod_smacks: Skip hibernation logic if session was closed or replacedKim Alvefur2021-12-161-0/+4
| | | | | | | | | | | | The resumption_token is removed when the session is closed via the pre-session-close event, signaling that it cannot be resumed, and therefore no hibernation timeout logic should be invoked. Fixes that if a session somehow is replaced by a new one using the same resource (which is the common behavior), the old session would still be around until it times out at which point it sends `<presence type="unavailable"/>` which would look as if it came from the new session, ie appearing offline to everyone including MUCs.
* mod_smacks: Fix indentationKim Alvefur2021-12-161-4/+4
| | | | Meld keeps messing up indentation when I merge and rebase...
* mod_smacks: Stop stanzas from being queued on hibernation timeoutKim Alvefur2021-12-161-0/+1
| | | | | | | | | | This overloads that flag a bit, but it has the intended effect of stopping outgoing_stanza_filter() from queueing stanzas. Fixes a traceback because of the queue having been removed somewhere around here, since it is no longer needed. Thanks Martin for reporting
* mod_smacks: Limit queue memory consumption using new utilKim Alvefur2021-12-141-51/+72
| | | | | | | | | This brings back the queue size limit that was once added, then removed because destroying the session when reaching the limit was not great. Instead, the queue wraps and overwrites the oldest unacked stanza on the assumption that it will probably be acked anyway and thus does not need to be delivered. If those discarded stanzas turn out to be needed on resumption then the resumption fails.
* mod_smacks: Set a watchdog to watch sleeping sessionsKim Alvefur2021-12-021-59/+27
| | | | | Extending the timeout by poking the watchdog, and letting it go on resumption, should be much better than the previous method.
* mod_smacks: Switch storage for tracking resumption tokensKim Alvefur2021-12-021-40/+5
| | | | | | | | All that was a complicated way to limit the number of resumable sessions. Let's control resource usage some other way. This leaves the essence of mapping resumption tokens to live sessions. This keeps resumption state across reloads.
* mod_smacks: Clear resumption token from persistent storage on resumptionKim Alvefur2021-12-011-0/+1
|
* mod_smacks: Persist old counter values to storageKim Alvefur2021-12-011-7/+5
| | | | | | | | | This allows clients that try to resume a session after a server restart to at least know which of their pending outgoing stanzas were received and which need to be re-sent. This removes the limit on how many of those counters are kept, which should be fixed eventually.
* mod_smacks: Remove now unused variable [luacheck]Kim Alvefur2021-12-151-1/+1
|