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