mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
74 lines
1.5 KiB
Lua
74 lines
1.5 KiB
Lua
local initialize_filters = require "prosody.util.filters".initialize;
|
|
local time = require "prosody.util.time";
|
|
local logger = require "prosody.util.logger";
|
|
|
|
local function new_session(typ)
|
|
local session = {
|
|
type = typ .. "_unauthed";
|
|
base_type = typ;
|
|
since = time.now();
|
|
};
|
|
return session;
|
|
end
|
|
|
|
local function set_id(session)
|
|
local id = session.base_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", 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", err);
|
|
return false, err;
|
|
end
|
|
end
|
|
end
|
|
return true;
|
|
end
|
|
return session;
|
|
end
|
|
|
|
local function set_role(session, role)
|
|
session.role = role;
|
|
end
|
|
|
|
return {
|
|
new = new_session;
|
|
|
|
set_id = set_id;
|
|
set_logger = set_logger;
|
|
set_conn = set_conn;
|
|
set_send = set_send;
|
|
set_role = set_role;
|
|
}
|