Software / code / prosody
Comparison
plugins/mod_websocket.lua @ 13766:b11242656300
Merge 13.0->trunk
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 11 Mar 2025 18:45:23 +0000 |
| parent | 13765:7c57fb2ffbb0 |
comparison
equal
deleted
inserted
replaced
| 13759:1437d8884899 | 13766:b11242656300 |
|---|---|
| 85 if reason.extra then | 85 if reason.extra then |
| 86 stream_error:add_child(reason.extra); | 86 stream_error:add_child(reason.extra); |
| 87 end | 87 end |
| 88 end | 88 end |
| 89 end | 89 end |
| 90 stream_error = tostring(stream_error); | |
| 90 log("debug", "Disconnecting client, <stream:error> is: %s", stream_error); | 91 log("debug", "Disconnecting client, <stream:error> is: %s", stream_error); |
| 91 session.send(stream_error); | 92 session.send(stream_error); |
| 92 end | 93 end |
| 93 | 94 |
| 94 session.send(st.stanza("close", { xmlns = xmlns_framing })); | 95 session.send(st.stanza("close", { xmlns = xmlns_framing })); |
| 95 function session.send() return false; end | 96 function session.send() return false; end |
| 96 | 97 |
| 97 -- luacheck: ignore 422/reason | 98 local reason_text = (reason and (reason.name or reason.text or reason.condition)) or reason; |
| 98 -- FIXME reason should be handled in common place | 99 session.log("debug", "c2s stream for %s closed: %s", session.full_jid or session.ip or "<unknown>", reason_text or "session closed"); |
| 99 local reason = (reason and (reason.name or reason.text or reason.condition)) or reason; | |
| 100 session.log("debug", "c2s stream for %s closed: %s", session.full_jid or ("<"..session.ip..">"), reason or "session closed"); | |
| 101 | 100 |
| 102 -- Authenticated incoming stream may still be sending us stanzas, so wait for </stream:stream> from remote | 101 -- Authenticated incoming stream may still be sending us stanzas, so wait for </stream:stream> from remote |
| 103 local conn = session.conn; | 102 local conn = session.conn; |
| 104 if reason == nil and not session.notopen and session.type == "c2s" then | 103 if reason_text == nil and not session.notopen and session.type == "c2s" then |
| 105 -- Grace time to process data from authenticated cleanly-closed stream | 104 -- Grace time to process data from authenticated cleanly-closed stream |
| 106 add_task(stream_close_timeout, function () | 105 add_task(stream_close_timeout, function () |
| 107 if not session.destroyed then | 106 if not session.destroyed then |
| 108 session.log("warn", "Failed to receive a stream close response, closing connection anyway..."); | 107 session.log("warn", "Failed to receive a stream close response, closing connection anyway..."); |
| 109 sm_destroy_session(session, reason); | 108 sm_destroy_session(session, reason_text); |
| 110 conn:write(build_close(1000, "Stream closed")); | 109 if conn then |
| 111 conn:close(); | 110 conn:write(build_close(1000, "Stream closed")); |
| 111 conn:close(); | |
| 112 end | |
| 112 end | 113 end |
| 113 end); | 114 end); |
| 114 else | 115 else |
| 115 sm_destroy_session(session, reason); | 116 sm_destroy_session(session, reason_text); |
| 116 conn:write(build_close(1000, "Stream closed")); | 117 if conn then |
| 117 conn:close(); | 118 conn:write(build_close(1000, "Stream closed")); |
| 118 end | 119 conn:close(); |
| 120 end | |
| 121 end | |
| 122 else | |
| 123 local reason_text = (reason and (reason.name or reason.text or reason.condition)) or reason; | |
| 124 sm_destroy_session(session, reason_text); | |
| 119 end | 125 end |
| 120 end | 126 end |
| 121 | 127 |
| 122 | 128 |
| 123 --- Filters | 129 --- Filters |