util/session.lua
changeset 6944 33fbc835697d
parent 6943 2be5e19485aa
child 7184 8af558965da3
--- a/util/session.lua	Tue Nov 24 19:26:27 2015 +0100
+++ b/util/session.lua	Tue Nov 24 19:31:37 2015 +0100
@@ -1,3 +1,4 @@
+local initialize_filters = require "util.filters".initialize;
 local logger = require "util.logger";
 
 local function new_session(typ)
@@ -25,9 +26,40 @@
 	return session;
 end
 
+local function set_send(session)
+	local conn = session.conn;
+	if not conn then
+		function session.send(data)
+			log("debug", "Discarding data sent to unconnected session: %s", tostring(data));
+			return false;
+		end
+		return session;
+	end
+	local filter = initialize_filters(session);
+	local w = conn.write;
+	session.send = function (t)
+		if t.name then
+			t = filter("stanzas/out", t);
+		end
+		if t then
+			t = filter("bytes/out", tostring(t));
+			if t then
+				local ret, err = w(conn, t);
+				if not ret then
+					session.log("debug", "Error writing to connection: %s", tostring(err));
+					return false, err;
+				end
+			end
+		end
+		return true;
+	end
+	return session;
+end
+
 return {
 	new = new_session;
 	set_id = set_id;
 	set_logger = set_logger;
 	set_conn = set_conn;
+	set_send = set_send;
 }