Software / code / prosody
Comparison
plugins/mod_s2s/mod_s2s.lua @ 6258:8a01bce29834
Merge 0.10->trunk
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 24 May 2014 01:27:09 +0200 |
| parent | 6257:9dace3a712f0 |
| child | 6259:36f611624987 |
comparison
equal
deleted
inserted
replaced
| 6254:da4c04df90e3 | 6258:8a01bce29834 |
|---|---|
| 527 end | 527 end |
| 528 | 528 |
| 529 -- Session initialization logic shared by incoming and outgoing | 529 -- Session initialization logic shared by incoming and outgoing |
| 530 local function initialize_session(session) | 530 local function initialize_session(session) |
| 531 local stream = new_xmpp_stream(session, stream_callbacks); | 531 local stream = new_xmpp_stream(session, stream_callbacks); |
| 532 local log = session.log or log; | |
| 532 session.stream = stream; | 533 session.stream = stream; |
| 533 | 534 |
| 534 session.notopen = true; | 535 session.notopen = true; |
| 535 | 536 |
| 536 function session.reset_stream() | 537 function session.reset_stream() |
| 538 session.stream:reset(); | 539 session.stream:reset(); |
| 539 end | 540 end |
| 540 | 541 |
| 541 session.stream_attrs = session_stream_attrs; | 542 session.stream_attrs = session_stream_attrs; |
| 542 | 543 |
| 543 local filter = session.filter; | 544 local filter = initialize_filters(session); |
| 545 local conn = session.conn; | |
| 546 local w = conn.write; | |
| 547 | |
| 548 function session.sends2s(t) | |
| 549 log("debug", "sending: %s", t.top_tag and t:top_tag() or t:match("^[^>]*>?")); | |
| 550 if t.name then | |
| 551 t = filter("stanzas/out", t); | |
| 552 end | |
| 553 if t then | |
| 554 t = filter("bytes/out", tostring(t)); | |
| 555 if t then | |
| 556 return w(conn, t); | |
| 557 end | |
| 558 end | |
| 559 end | |
| 560 | |
| 544 function session.data(data) | 561 function session.data(data) |
| 545 data = filter("bytes/in", data); | 562 data = filter("bytes/in", data); |
| 546 if data then | 563 if data then |
| 547 local ok, err = stream:feed(data); | 564 local ok, err = stream:feed(data); |
| 548 if ok then return; end | 565 if ok then return; end |
| 549 (session.log or log)("warn", "Received invalid XML: %s", data); | 566 log("warn", "Received invalid XML: %s", data); |
| 550 (session.log or log)("warn", "Problem was: %s", err); | 567 log("warn", "Problem was: %s", err); |
| 551 session:close("not-well-formed"); | 568 session:close("not-well-formed"); |
| 552 end | 569 end |
| 553 end | 570 end |
| 554 | 571 |
| 555 session.close = session_close; | 572 session.close = session_close; |
| 577 local session = sessions[conn]; | 594 local session = sessions[conn]; |
| 578 if not session then -- New incoming connection | 595 if not session then -- New incoming connection |
| 579 session = s2s_new_incoming(conn); | 596 session = s2s_new_incoming(conn); |
| 580 sessions[conn] = session; | 597 sessions[conn] = session; |
| 581 session.log("debug", "Incoming s2s connection"); | 598 session.log("debug", "Incoming s2s connection"); |
| 582 | |
| 583 local filter = initialize_filters(session); | |
| 584 local w = conn.write; | |
| 585 session.sends2s = function (t) | |
| 586 log("debug", "sending: %s", t.top_tag and t:top_tag() or t:match("^([^>]*>?)")); | |
| 587 if t.name then | |
| 588 t = filter("stanzas/out", t); | |
| 589 end | |
| 590 if t then | |
| 591 t = filter("bytes/out", tostring(t)); | |
| 592 if t then | |
| 593 return w(conn, t); | |
| 594 end | |
| 595 end | |
| 596 end | |
| 597 | |
| 598 initialize_session(session); | 599 initialize_session(session); |
| 599 else -- Outgoing session connected | 600 else -- Outgoing session connected |
| 600 session:open_stream(session.from_host, session.to_host); | 601 session:open_stream(session.from_host, session.to_host); |
| 601 end | 602 end |
| 602 session.ip = conn:ip(); | 603 session.ip = conn:ip(); |
| 640 return (hosts[session.host] or prosody).events.fire_event("s2s-read-timeout", { session = session }); | 641 return (hosts[session.host] or prosody).events.fire_event("s2s-read-timeout", { session = session }); |
| 641 end | 642 end |
| 642 end | 643 end |
| 643 | 644 |
| 644 function listener.register_outgoing(conn, session) | 645 function listener.register_outgoing(conn, session) |
| 645 session.direction = "outgoing"; | |
| 646 sessions[conn] = session; | 646 sessions[conn] = session; |
| 647 initialize_session(session); | 647 initialize_session(session); |
| 648 end | 648 end |
| 649 | 649 |
| 650 function check_auth_policy(event) | 650 function check_auth_policy(event) |