Software /
code /
prosody
Comparison
plugins/mod_s2s/mod_s2s.lua @ 5533:df3c78221f26
mod_s2s: Ensure that to/from on stream headers are always correct, fixes #338
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 29 Apr 2013 00:33:39 +0100 |
parent | 5522:3912c9264ef0 |
child | 5594:ad66ee47b674 |
comparison
equal
deleted
inserted
replaced
5532:d5cbcdcdb2f7 | 5533:df3c78221f26 |
---|---|
346 if check_cert_status(session) == false then | 346 if check_cert_status(session) == false then |
347 return; | 347 return; |
348 end | 348 end |
349 end | 349 end |
350 | 350 |
351 session:open_stream() | 351 session:open_stream(session.to_host, session.from_host) |
352 if session.version >= 1.0 then | 352 if session.version >= 1.0 then |
353 local features = st.stanza("stream:features"); | 353 local features = st.stanza("stream:features"); |
354 | 354 |
355 if to then | 355 if to then |
356 hosts[to].events.fire_event("s2s-stream-features", { origin = session, features = features }); | 356 hosts[to].events.fire_event("s2s-stream-features", { origin = session, features = features }); |
446 local stream_xmlns_attr = {xmlns='urn:ietf:params:xml:ns:xmpp-streams'}; | 446 local stream_xmlns_attr = {xmlns='urn:ietf:params:xml:ns:xmpp-streams'}; |
447 local function session_close(session, reason, remote_reason) | 447 local function session_close(session, reason, remote_reason) |
448 local log = session.log or log; | 448 local log = session.log or log; |
449 if session.conn then | 449 if session.conn then |
450 if session.notopen then | 450 if session.notopen then |
451 session:open_stream() | 451 if session.direction == "incoming" then |
452 session:open_stream(session.to_host, session.from_host); | |
453 else | |
454 session:open_stream(session.from_host, session.to_host); | |
455 end | |
452 end | 456 end |
453 if reason then -- nil == no err, initiated by us, false == initiated by remote | 457 if reason then -- nil == no err, initiated by us, false == initiated by remote |
454 if type(reason) == "string" then -- assume stream error | 458 if type(reason) == "string" then -- assume stream error |
455 log("debug", "Disconnecting %s[%s], <stream:error> is: %s", session.host or "(unknown host)", session.type, reason); | 459 log("debug", "Disconnecting %s[%s], <stream:error> is: %s", session.host or "(unknown host)", session.type, reason); |
456 session.sends2s(st.stanza("stream:error"):tag(reason, {xmlns = 'urn:ietf:params:xml:ns:xmpp-streams' })); | 460 session.sends2s(st.stanza("stream:error"):tag(reason, {xmlns = 'urn:ietf:params:xml:ns:xmpp-streams' })); |
494 end | 498 end |
495 end | 499 end |
496 end | 500 end |
497 | 501 |
498 function session_open_stream(session, from, to) | 502 function session_open_stream(session, from, to) |
499 local from = from or session.from_host; | |
500 local to = to or session.to_host; | |
501 local attr = { | 503 local attr = { |
502 ["xmlns:stream"] = 'http://etherx.jabber.org/streams', | 504 ["xmlns:stream"] = 'http://etherx.jabber.org/streams', |
503 xmlns = 'jabber:server', | 505 xmlns = 'jabber:server', |
504 version = session.version and (session.version > 0 and "1.0" or nil), | 506 version = session.version and (session.version > 0 and "1.0" or nil), |
505 ["xml:lang"] = 'en', | 507 ["xml:lang"] = 'en', |
506 id = session.streamid, | 508 id = session.streamid, |
507 from = from, to = to, | 509 from = from, to = to, |
508 } | 510 } |
509 local local_host = session.direction == "outgoing" and from or to; | 511 if not from or (hosts[from] and hosts[from].modules.dialback) then |
510 if not local_host or (hosts[local_host] and hosts[local_host].modules.dialback) then | |
511 attr["xmlns:db"] = 'jabber:server:dialback'; | 512 attr["xmlns:db"] = 'jabber:server:dialback'; |
512 end | 513 end |
513 | 514 |
514 session.sends2s("<?xml version='1.0'?>"); | 515 session.sends2s("<?xml version='1.0'?>"); |
515 session.sends2s(st.stanza("stream:stream", attr):top_tag()); | 516 session.sends2s(st.stanza("stream:stream", attr):top_tag()); |