Mercurial > prosody-modules
comparison mod_json_streams/mod_json_streams.lua @ 350:98569ec25ac2
mod_json_streams: Add BOSH support (on HTTP path "/jsonstreams").
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sat, 02 Apr 2011 03:10:04 +0500 |
| parents | ee99eafdd168 |
| children |
comparison
equal
deleted
inserted
replaced
| 349:ee99eafdd168 | 350:98569ec25ac2 |
|---|---|
| 2 -- XEP-0295: JSON Encodings for XMPP | 2 -- XEP-0295: JSON Encodings for XMPP |
| 3 -- | 3 -- |
| 4 | 4 |
| 5 module.host = "*" | 5 module.host = "*" |
| 6 | 6 |
| 7 local httpserver = require "net.httpserver"; | |
| 7 local filters = require "util.filters" | 8 local filters = require "util.filters" |
| 8 local json = require "util.json" | 9 local json = require "util.json" |
| 9 | 10 |
| 10 local json_escapes = { | 11 local json_escapes = { |
| 11 ["\""] = "\\\"", ["\\"] = "\\\\", ["\b"] = "\\b", ["\f"] = "\\f", | 12 ["\""] = "\\\"", ["\\"] = "\\\\", ["\b"] = "\\b", ["\f"] = "\\f", |
| 118 end | 119 end |
| 119 function module.unload() | 120 function module.unload() |
| 120 filters.remove_filter_hook(filter_hook); | 121 filters.remove_filter_hook(filter_hook); |
| 121 end | 122 end |
| 122 | 123 |
| 124 function encode(data) | |
| 125 if type(data) == "string" then | |
| 126 data = json.encode({ s = data }); | |
| 127 elseif type(data) == "table" and data.body then | |
| 128 data.body = json.encode({ s = data.body }); | |
| 129 data.headers["Content-Type"] = "application/json"; | |
| 130 end | |
| 131 return data; | |
| 132 end | |
| 133 function handle_request(method, body, request) | |
| 134 local mod_bosh = modulemanager.get_module("*", "bosh") | |
| 135 if mod_bosh then | |
| 136 if body and method == "POST" then | |
| 137 pcall(function() body = json.decode(body).s; end); | |
| 138 end | |
| 139 local _send = request.send; | |
| 140 function request:send(data) return _send(self, encode(data)); end | |
| 141 return encode(mod_bosh.handle_request(method, body, request)); | |
| 142 end | |
| 143 return "<html><body>mod_bosh not loaded</body></html>"; | |
| 144 end | |
| 123 | 145 |
| 146 local function setup() | |
| 147 local ports = module:get_option("jsonstreams_ports") or { 5280 }; | |
| 148 httpserver.new_from_config(ports, handle_request, { base = "jsonstreams" }); | |
| 149 end | |
| 150 if prosody.start_time then -- already started | |
| 151 setup(); | |
| 152 else | |
| 153 prosody.events.add_handler("server-started", setup); | |
| 154 end |
