util.session: How would you even send anything to a session?
authorKim Alvefur <zash@zash.se>
Tue, 24 Nov 2015 18:31:37 +0000 (19:31 +0100)
committerKim Alvefur <zash@zash.se>
Tue, 24 Nov 2015 18:31:37 +0000 (19:31 +0100)
util/session.lua

index 03ddcf478a4164199427e9ff6f7897f1bf746af2..fda7fccdccfbcca1e37e035d7de6d6873ec192ba 100644 (file)
@@ -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;
 }