Software / code / prosody
Comparison
plugins/mod_dialback.lua @ 4846:3bc3498df0a0
Merge with Maranda
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 11 May 2012 01:53:32 +0100 |
| parent | 4822:5ef05f32bc42 |
| parent | 4843:d91dda67647a |
| child | 4847:7a7cc4d98faf |
comparison
equal
deleted
inserted
replaced
| 4834:878f75ccc4fb | 4846:3bc3498df0a0 |
|---|---|
| 13 | 13 |
| 14 local log = module._log; | 14 local log = module._log; |
| 15 | 15 |
| 16 local st = require "util.stanza"; | 16 local st = require "util.stanza"; |
| 17 local sha256_hash = require "util.hashes".sha256; | 17 local sha256_hash = require "util.hashes".sha256; |
| 18 local nameprep = require "util.encodings".stringprep.nameprep; | |
| 18 | 19 |
| 19 local xmlns_stream = "http://etherx.jabber.org/streams"; | 20 local xmlns_stream = "http://etherx.jabber.org/streams"; |
| 20 | 21 |
| 21 local dialback_requests = setmetatable({}, { __mode = 'v' }); | 22 local dialback_requests = setmetatable({}, { __mode = 'v' }); |
| 22 | 23 |
| 77 | 78 |
| 78 dialback_requests[from.."/"..origin.streamid] = origin; | 79 dialback_requests[from.."/"..origin.streamid] = origin; |
| 79 | 80 |
| 80 -- COMPAT: ejabberd, gmail and perhaps others do not always set 'to' and 'from' | 81 -- COMPAT: ejabberd, gmail and perhaps others do not always set 'to' and 'from' |
| 81 -- on streams. We fill in the session's to/from here instead. | 82 -- on streams. We fill in the session's to/from here instead. |
| 82 if not origin.from_host then origin.from_host = from; end | 83 if not origin.from_host then |
| 83 if not origin.to_host then origin.to_host = to; end | 84 origin.from_host = nameprep(attr.from); |
| 85 if not origin.from_host then | |
| 86 origin.log("debug", "We need to know where to connect but remote server blindly refuses to tell us and to comply to specs, closing connection."); | |
| 87 origin:close("invalid-from"); | |
| 88 end | |
| 89 end | |
| 90 if not origin.to_host then | |
| 91 origin.to_host = nameprep(attr.to); | |
| 92 end | |
| 93 | |
| 94 if not origin.from_host and not origin.to_host then | |
| 95 origin.log("debug", "Improper addressing supplied, no to or from?"); | |
| 96 origin:close("improper-addressing"); | |
| 97 end | |
| 84 | 98 |
| 85 origin.log("debug", "asking %s if key %s belongs to them", from, stanza[1]); | 99 origin.log("debug", "asking %s if key %s belongs to them", from, stanza[1]); |
| 86 module:fire_event("route/remote", { | 100 module:fire_event("route/remote", { |
| 87 from_host = to, to_host = from; | 101 from_host = to, to_host = from; |
| 88 stanza = st.stanza("db:verify", { from = to, to = from, id = origin.streamid }):text(stanza[1]); | 102 stanza = st.stanza("db:verify", { from = to, to = from, id = origin.streamid }):text(stanza[1]); |