Mercurial > prosody-hg
comparison plugins/mod_s2s/mod_s2s.lua @ 4818:3bda6fc02652
mod_s2s: Become a shared module (yay)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 04 May 2012 01:50:17 +0100 |
| parents | 474684c07a3a |
| children | 4fa47fc6f20c |
comparison
equal
deleted
inserted
replaced
| 4817:9cc1d3e49f19 | 4818:3bda6fc02652 |
|---|---|
| 65 sendq[i] = nil; | 65 sendq[i] = nil; |
| 66 end | 66 end |
| 67 session.sendq = nil; | 67 session.sendq = nil; |
| 68 end | 68 end |
| 69 | 69 |
| 70 module:hook("route/remote", function (event) | 70 -- Handles stanzas to existing s2s sessions |
| 71 function route_to_existing_session(event) | |
| 71 local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza; | 72 local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza; |
| 72 if not hosts[from_host] then | 73 if not hosts[from_host] then |
| 73 log("warn", "Attempt to send stanza from %s - a host we don't serve", from_host); | 74 log("warn", "Attempt to send stanza from %s - a host we don't serve", from_host); |
| 74 return false; | 75 return false; |
| 75 end | 76 end |
| 99 host.sends2s(stanza); | 100 host.sends2s(stanza); |
| 100 host.log("debug", "stanza sent over "..host.type); | 101 host.log("debug", "stanza sent over "..host.type); |
| 101 return true; | 102 return true; |
| 102 end | 103 end |
| 103 end | 104 end |
| 104 end, 200); | 105 end |
| 105 | 106 |
| 106 module:hook("route/remote", function (event) | 107 -- Create a new outgoing session for a stanza |
| 108 function route_to_new_session(event) | |
| 107 local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza; | 109 local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza; |
| 108 log("debug", "opening a new outgoing connection for this stanza"); | 110 log("debug", "opening a new outgoing connection for this stanza"); |
| 109 local host_session = s2s_new_outgoing(from_host, to_host); | 111 local host_session = s2s_new_outgoing(from_host, to_host); |
| 110 | 112 |
| 111 -- Store in buffer | 113 -- Store in buffer |
| 117 log("warn", "Connection to %s failed already, destroying session...", to_host); | 119 log("warn", "Connection to %s failed already, destroying session...", to_host); |
| 118 s2s_destroy_session(host_session, "Connection failed"); | 120 s2s_destroy_session(host_session, "Connection failed"); |
| 119 return false; | 121 return false; |
| 120 end | 122 end |
| 121 return true; | 123 return true; |
| 122 end, 100); | 124 end |
| 125 | |
| 126 function module.add_host(module) | |
| 127 if module:get_option_boolean("disallow_s2s", false) then | |
| 128 return nil, "This host has disallow_s2s set"; | |
| 129 end | |
| 130 module:hook("route/remote", route_to_existing_session, 200); | |
| 131 module:hook("route/remote", route_to_new_session, 100); | |
| 132 end | |
| 123 | 133 |
| 124 --- Helper to check that a session peer's certificate is valid | 134 --- Helper to check that a session peer's certificate is valid |
| 125 local function check_cert_status(session) | 135 local function check_cert_status(session) |
| 126 local conn = session.conn:socket() | 136 local conn = session.conn:socket() |
| 127 local cert | 137 local cert |
