131 if session.notopen then |
131 if session.notopen then |
132 session.send("<?xml version='1.0'?>"); |
132 session.send("<?xml version='1.0'?>"); |
133 session.send(st.stanza("stream:stream", default_stream_attr):top_tag()); |
133 session.send(st.stanza("stream:stream", default_stream_attr):top_tag()); |
134 end |
134 end |
135 if reason then -- nil == no err, initiated by us, false == initiated by client |
135 if reason then -- nil == no err, initiated by us, false == initiated by client |
|
136 local stream_error = st.stanza("stream:error"); |
136 if type(reason) == "string" then -- assume stream error |
137 if type(reason) == "string" then -- assume stream error |
137 log("debug", "Disconnecting client, <stream:error> is: %s", reason); |
138 stream_error:tag(reason, {xmlns = 'urn:ietf:params:xml:ns:xmpp-streams' }); |
138 session.send(st.stanza("stream:error"):tag(reason, {xmlns = 'urn:ietf:params:xml:ns:xmpp-streams' })); |
|
139 elseif type(reason) == "table" then |
139 elseif type(reason) == "table" then |
140 if reason.condition then |
140 if reason.condition then |
141 local stanza = st.stanza("stream:error"):tag(reason.condition, stream_xmlns_attr):up(); |
141 stream_error:tag(reason.condition, stream_xmlns_attr):up(); |
142 if reason.text then |
142 if reason.text then |
143 stanza:tag("text", stream_xmlns_attr):text(reason.text):up(); |
143 stream_error:tag("text", stream_xmlns_attr):text(reason.text):up(); |
144 end |
144 end |
145 if reason.extra then |
145 if reason.extra then |
146 stanza:add_child(reason.extra); |
146 stream_error:add_child(reason.extra); |
147 end |
147 end |
148 log("debug", "Disconnecting client, <stream:error> is: %s", tostring(stanza)); |
|
149 session.send(stanza); |
|
150 elseif reason.name then -- a stanza |
148 elseif reason.name then -- a stanza |
151 log("debug", "Disconnecting client, <stream:error> is: %s", tostring(reason)); |
149 stream_error = reason; |
152 session.send(reason); |
|
153 end |
150 end |
154 end |
151 end |
|
152 stream_error = tostring(stream_error); |
|
153 log("debug", "Disconnecting client, <stream:error> is: %s", stream_error); |
|
154 session.send(stream_error); |
155 end |
155 end |
156 |
156 |
157 session.send("</stream:stream>"); |
157 session.send("</stream:stream>"); |
158 function session.send() return false; end |
158 function session.send() return false; end |
159 |
159 |