aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/session.lua32
1 files changed, 32 insertions, 0 deletions
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;
}