X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Fsession.lua;h=b2a726ce27cf95ce34cf133a51efad3f3be62748;hb=42a4ed04c8649f98cc926598df98e277b4ff75dd;hp=6993842c732ef00004444372ea477bd797987a29;hpb=a8958cbe5ebad3abc12efa7a76c8aedac8f21389;p=prosody.git diff --git a/util/session.lua b/util/session.lua index 6993842c..b2a726ce 100644 --- a/util/session.lua +++ b/util/session.lua @@ -1,3 +1,5 @@ +local initialize_filters = require "util.filters".initialize; +local logger = require "util.logger"; local function new_session(typ) local session = { @@ -7,12 +9,57 @@ local function new_session(typ) end local function set_id(session) - local id = typ .. tostring(session):match("%x+$"):lower(); + local id = session.type .. tostring(session):match("%x+$"):lower(); session.id = id; return session; end +local function set_logger(session) + local log = logger.init(session.id); + session.log = log; + return session; +end + +local function set_conn(session, conn) + session.conn = conn; + session.ip = conn:ip(); + return session; +end + +local function set_send(session) + local conn = session.conn; + if not conn then + function session.send(data) + session.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; }