195 socks5listener.register_outgoing(conn, host_session); |
198 socks5listener.register_outgoing(conn, host_session); |
196 |
199 |
197 host_session.conn = conn; |
200 host_session.conn = conn; |
198 end |
201 end |
199 |
202 |
|
203 local bouncy_stanzas = { message = true, presence = true, iq = true }; |
200 local function bounce_sendq(session, reason) |
204 local function bounce_sendq(session, reason) |
201 local sendq = session.sendq; |
205 local sendq = session.sendq; |
202 if not sendq then return; end |
206 if not sendq then return; end |
203 session.log("info", "sending error replies for "..#sendq.." queued stanzas because of failed outgoing connection to "..tostring(session.to_host)); |
207 session.log("info", "Sending error replies for "..#sendq.." queued stanzas because of failed outgoing connection to "..tostring(session.to_host)); |
204 local dummy = { |
208 local dummy = { |
205 type = "s2sin"; |
209 type = "s2sin"; |
206 send = function(s) |
210 send = function(s) |
207 (session.log or log)("error", "Replying to to an s2s error reply, please report this! Traceback: %s", traceback()); |
211 (session.log or log)("error", "Replying to to an s2s error reply, please report this! Traceback: %s", traceback()); |
208 end; |
212 end; |
209 dummy = true; |
213 dummy = true; |
210 }; |
214 }; |
211 for i, data in ipairs(sendq) do |
215 for i, data in ipairs(sendq) do |
212 local reply = data[2]; |
216 local reply = data[2]; |
213 if reply and not(reply.attr.xmlns) then |
217 if reply and not(reply.attr.xmlns) and bouncy_stanzas[reply.name] then |
214 reply.attr.type = "error"; |
218 reply.attr.type = "error"; |
215 reply:tag("error", {type = "cancel"}) |
219 reply:tag("error", {type = "cancel"}) |
216 :tag("remote-server-not-found", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}):up(); |
220 :tag("remote-server-not-found", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}):up(); |
217 if reason then |
221 if reason then |
218 reply:tag("text", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}) |
222 reply:tag("text", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}) |
219 :text("Server-to-server connection failed: "..reason):up(); |
223 :text("Server-to-server connection failed: "..reason):up(); |
220 end |
224 end |
221 core_process_stanza(dummy, reply); |
225 core_process_stanza(dummy, reply); |
222 end |
226 end |
223 sendq[i] = nil; |
227 sendq[i] = nil; |
224 end |
228 end |
225 session.sendq = nil; |
229 session.sendq = nil; |
226 end |
230 end |
227 |
|
228 -- Try to intercept anything to *.onion |
231 -- Try to intercept anything to *.onion |
229 local function route_to_onion(event) |
232 local function route_to_onion(event) |
230 local stanza = event.stanza; |
233 local stanza = event.stanza; |
231 |
234 |
232 if not event.to_host:find(".onion(.?)$") then |
235 if not event.to_host:find(".onion(.?)$") then |
233 if forbid_else then |
236 if forbid_else then |
234 module:log("debug", event.to_host .. " is not an onion. Blocking it."); |
237 module:log("debug", event.to_host .. " is not an onion. Blocking it."); |
235 return false; |
238 return false; |
236 elseif not torify_all then |
239 elseif not torify_all then |
237 return; |
240 return; |
238 end |
241 end |
239 end |
242 end |