Mercurial > prosody-modules
changeset 1290:c0957b904487
mod_http_altconnect: Refactor to have module/connection method lookup in a common place
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 25 Jan 2014 20:18:54 +0100 |
parents | 1f15cc58bb56 |
children | 1ac28a953e5f |
files | mod_http_altconnect/mod_http_altconnect.lua |
diffstat | 1 files changed, 19 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_http_altconnect/mod_http_altconnect.lua Sat Jan 25 20:08:10 2014 +0100 +++ b/mod_http_altconnect/mod_http_altconnect.lua Sat Jan 25 20:18:54 2014 +0100 @@ -1,20 +1,32 @@ --- http://legastero.github.io/customxeps/extensions/xep-0156.html +-- mod_http_altconnect +-- XEP-0156: Discovering Alternative XMPP Connection Methods module:depends"http"; local json = require"util.json"; local st = require"util.stanza"; +local array = require"util.array"; local host_modules = hosts[module.host].modules; +local function get_supported() + local uris = array(); + if host_modules["bosh"] then + uris:push({ rel = "urn:xmpp:altconnect:bosh", href = module:http_url("bosh", "/http-bind") }); + end + if host_modules["websocket"] then + uris:push({ rel = "urn:xmpp:altconnect:websocket", href = module:http_url("websocket", "xmpp-websocket"):gsub("^http", "ws") }); + end + return uris; +end + + local function GET_xml(event) local request, response = event.request, event.response; local xrd = st.stanza("XRD", { xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0' }); - if host_modules["bosh"] then - xrd:tag("Link", { rel="urn:xmpp:altconnect:bosh", href = module:http_url("bosh", "/http-bind") }):up(); - end - if host_modules["websocket"] then - xrd:tag("Link", { rel="urn:xmpp:altconnect:websocket", href = module:http_url("websocket", "/xmpp-websocket"):gsub("^http", "ws") }):up(); + local uris = get_supported(); + for i, method in ipairs(uris) do + xrd:tag("Link", method):up(); end response.headers.content_type = "application/xrd+xml" response.headers.access_control_allow_origin = "*"; @@ -23,13 +35,7 @@ local function GET_json(event) local request, response = event.request, event.response; - local jrd = { links = { } }; - if host_modules["bosh"] then - jrd.links[#jrd.links+1] = { rel="urn:xmpp:altconnect:bosh", href = module:http_url("bosh", "/http-bind") }; - end - if host_modules["websocket"] then - jrd.links[#jrd.links+1] = { rel="urn:xmpp:altconnect:websocket", href = module:http_url("websocket", "/xmpp-websocket"):gsub("^http", "ws") } - end + local jrd = { links = get_supported() }; response.headers.content_type = "application/json" response.headers.access_control_allow_origin = "*"; return json.encode(jrd);