mod_http_prebind/mod_http_prebind.lua
author Kim Alvefur <zash@zash.se>
Sun, 03 Mar 2024 11:23:40 +0100
changeset 5857 97c9b76867ca
parent 4234 495a23d61418
permissions -rw-r--r--
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel) Otherwise the global event handlers accumulate, one added each time logging is reoladed, and each invocation of the signal or event triggers one dump of each created ringbuffer.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4233
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     1
module:depends("http");
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     2
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     3
local http = require "net.http";
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     4
local format = require "util.format".format;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     5
local json_encode = require "util.json".encode;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     6
local promise = require "util.promise";
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     7
local xml = require "util.xml";
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     8
local t_insert = table.insert;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
     9
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    10
local function new_options(host)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    11
	return {
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    12
		headers = {
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    13
			["Content-Type"] = "text/xml; charset=utf-8",
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    14
			["Host"] = host,
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    15
		},
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    16
		method = "POST",
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    17
	};
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    18
end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    19
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    20
local function connect_to_bosh(url, hostname)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    21
	local rid = math.random(100000, 100000000)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    22
	local options = new_options(hostname);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    23
	options.body = format([[<body content='text/xml; charset=utf-8'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    24
	      hold='1'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    25
	      rid='%d'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    26
	      to='%s'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    27
	      wait='60'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    28
	      xml:lang='en'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    29
	      xmpp:version='1.0'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    30
	      xmlns='http://jabber.org/protocol/httpbind'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    31
	      xmlns:xmpp='urn:xmpp:xbosh'/>]], rid, hostname);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    32
	local rid = rid + 1;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    33
	return promise.new(function (on_fulfilled, on_error)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    34
		assert(http.request(url, options, function (body, code)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    35
			if code ~= 200 then
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    36
				on_error("Failed to fetch, HTTP error code "..code);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    37
				return;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    38
			end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    39
			local body = xml.parse(body);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    40
			local sid = body.attr.sid;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    41
			local mechanisms = {};
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    42
			for mechanism in body:get_child("features", "http://etherx.jabber.org/streams")
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    43
				:get_child("mechanisms", "urn:ietf:params:xml:ns:xmpp-sasl")
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    44
					:childtags("mechanism", "urn:ietf:params:xml:ns:xmpp-sasl") do
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    45
				mechanisms[mechanism:get_text()] = true;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    46
			end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    47
			on_fulfilled({ url = url, sid = sid, rid = rid, mechanisms = mechanisms });
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    48
		end));
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    49
	end);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    50
end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    51
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    52
local function authenticate(data)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    53
	local options = new_options();
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    54
	options.body = format([[<body sid='%s'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    55
	      rid='%d'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    56
	      xmlns='http://jabber.org/protocol/httpbind'>
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    57
		<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    58
		      mechanism='ANONYMOUS'/>
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    59
	</body>]], data.sid, data.rid);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    60
	data.rid = data.rid + 1;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    61
	return promise.new(function (on_fulfilled, on_error)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    62
		if data.mechanisms["ANONYMOUS"] == nil then
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    63
			on_error("No SASL ANONYMOUS mechanism supported on this host.");
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    64
			return;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    65
		end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    66
		assert(http.request(data.url, options, function (body, code)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    67
			if code ~= 200 then
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    68
				on_error("Failed to fetch, HTTP error code "..code);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    69
				return;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    70
			end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    71
			local body = xml.parse(body);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    72
			local success = body:get_child("success", "urn:ietf:params:xml:ns:xmpp-sasl");
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    73
			if success then
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    74
				data.mechanisms = nil;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    75
				on_fulfilled(data);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    76
			else
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    77
				on_error("Authentication failed.");
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    78
			end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    79
		end));
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    80
	end);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    81
end;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    82
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    83
local function restart_stream(data)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    84
	local options = new_options();
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    85
	options.body = format([[
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    86
	<body sid='%s'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    87
	      rid='%d'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    88
	      xml:lang='en'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    89
	      xmlns='http://jabber.org/protocol/httpbind'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    90
	      xmlns:xmpp='urn:xmpp:xbosh'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    91
	      xmpp:restart='true'/>]], data.sid, data.rid);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    92
	data.rid = data.rid + 1;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    93
	return promise.new(function (on_fulfilled, on_error)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    94
		assert(http.request(data.url, options, function (body, code)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    95
			if code ~= 200 then
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    96
				on_error("Failed to fetch, HTTP error code "..code);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    97
				return;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    98
			end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
    99
			local body = xml.parse(body);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   100
			on_fulfilled(data);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   101
		end));
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   102
	end);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   103
end;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   104
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   105
local function bind(data)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   106
	local options = new_options();
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   107
	options.body = format([[
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   108
	<body sid='%s'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   109
	      rid='%d'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   110
	      xmlns='http://jabber.org/protocol/httpbind'>
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   111
		<iq xmlns='jabber:client'
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   112
		    type='set'>
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   113
			<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   114
		</iq>
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   115
	</body>]], data.sid, data.rid);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   116
	data.rid = data.rid + 1;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   117
	return promise.new(function (on_fulfilled, on_error)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   118
		assert(http.request(data.url, options, function (body, code)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   119
			if code ~= 200 then
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   120
				on_error("Failed to fetch, HTTP error code "..code);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   121
				return;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   122
			end
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   123
			local body = xml.parse(body);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   124
			local jid = body:get_child("iq", "jabber:client")
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   125
				:get_child("bind", "urn:ietf:params:xml:ns:xmpp-bind")
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   126
					:get_child_text("jid", "urn:ietf:params:xml:ns:xmpp-bind");
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   127
			on_fulfilled(json_encode({rid = data.rid, sid = data.sid, jid = jid}));
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   128
		end));
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   129
	end);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   130
end;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   131
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   132
module:provides("http", {
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   133
	route = {
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   134
		["GET"] = function (event)
4234
495a23d61418 mod_http_prebind: Stop hardcoding test domain
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 4233
diff changeset
   135
			return connect_to_bosh("http://[::1]:5280/http-bind", module.host)
4233
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   136
				:next(authenticate)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   137
				:next(restart_stream)
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   138
				:next(bind);
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   139
		end;
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   140
	};
3943032533a7 mod_http_prebind: New module
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
   141
});