Merge 0.10->trunk
authorKim Alvefur <zash@zash.se>
Fri, 10 Feb 2017 21:34:16 +0100
changeset 7890 93fd15b5ec1b
parent 7888 236b5a6154b2 (current diff)
parent 7889 679746cdf3cc (diff)
child 7895 f00943bbf84f
Merge 0.10->trunk
plugins/mod_component.lua
--- a/plugins/mod_component.lua	Sat Feb 04 01:08:27 2017 +0100
+++ b/plugins/mod_component.lua	Fri Feb 10 21:34:16 2017 +0100
@@ -29,6 +29,13 @@
 
 local sessions = module:shared("sessions");
 
+local function keepalive(event)
+	local session = event.session;
+	if not session.notopen then
+		return event.session.send(' ');
+	end
+end
+
 function module.add_host(module)
 	if module:get_host_type() ~= "component" then
 		error("Don't load mod_component manually, it should be for a component, please see https://prosody.im/doc/components", 0);
@@ -135,8 +142,12 @@
 	module:hook("iq/host", handle_stanza, -1);
 	module:hook("message/host", handle_stanza, -1);
 	module:hook("presence/host", handle_stanza, -1);
+
+	module:hook("component-read-timeout", keepalive, -1);
 end
 
+module:hook("component-read-timeout", keepalive, -1);
+
 --- Network and stream part ---
 
 local xmlns_component = 'jabber:component:accept';
@@ -332,6 +343,13 @@
 	sessions[conn] = nil;
 end
 
+function listener.onreadtimeout(conn)
+	local session = sessions[conn];
+	if session then
+		return (hosts[session.host] or prosody).events.fire_event("component-read-timeout", { session = session });
+	end
+end
+
 module:provides("net", {
 	name = "component";
 	private = true;