From 273a126b4b19876418f091ad462897576325040b Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Tue, 24 Nov 2015 19:31:37 +0100
Subject: util.session: How would you even send anything to a session?

---
 util/session.lua | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

(limited to 'util')

diff --git a/util/session.lua b/util/session.lua
index 03ddcf47..fda7fccd 100644
--- a/util/session.lua
+++ b/util/session.lua
@@ -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 @@ local function set_conn(session, conn)
 	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;
 }
-- 
cgit v1.2.3