mirror of
https://github.com/bjc/prosody.git
synced 2025-04-03 21:27:38 +03:00
- Remove some debugging code
- Don't allow stanzas to be sent before successful auth (needs further review) - Make init_xmlhandlers local - Fix indentation in main.lua - Fix disconnect logic (it broke if client disconnected before auth, etc.)
This commit is contained in:
parent
25f82f43ad
commit
1a138d2e57
4 changed files with 33 additions and 22 deletions
8
DEPENDS
Normal file
8
DEPENDS
Normal file
|
@ -0,0 +1,8 @@
|
|||
The easiest way to install dependencies is using the luarocks tool.
|
||||
|
||||
Rocks:
|
||||
luaexpat
|
||||
luasocket
|
||||
|
||||
Non-rocks:
|
||||
LuaSec for SSL connections
|
|
@ -32,7 +32,6 @@ function init_stanza_dispatcher(session)
|
|||
return true;
|
||||
else
|
||||
username, password, resource = t_concat(username), t_concat(password), t_concat(resource);
|
||||
print(username, password, resource)
|
||||
local reply = st.reply(stanza);
|
||||
require "core.usermanager"
|
||||
if usermanager.validate_credentials(session.host, username, password) then
|
||||
|
@ -96,7 +95,9 @@ function init_stanza_dispatcher(session)
|
|||
send(format("<iq type='error' id='%s'><error type='cancel'><service-unavailable/></error></iq>", stanza.attr.id));
|
||||
return;
|
||||
end
|
||||
elseif stanza.name == "presence" then
|
||||
end
|
||||
if not session.username then log("warn", "Attempt to use an unauthed stream!"); return; end
|
||||
if stanza.name == "presence" then
|
||||
if session.roster then
|
||||
local initial_presence = not session.last_presence;
|
||||
session.last_presence = stanza;
|
||||
|
@ -112,7 +113,6 @@ function init_stanza_dispatcher(session)
|
|||
broadcast.attr.to = contact_jid;
|
||||
send_to(contact_jid, broadcast);
|
||||
if initial_presence then
|
||||
print("Initital presence");
|
||||
local node, host = jid.split(contact_jid);
|
||||
if hosts[host] and hosts[host].type == "local" then
|
||||
local contact = hosts[host].sessions[node]
|
||||
|
@ -137,7 +137,7 @@ function init_stanza_dispatcher(session)
|
|||
-- Probe for our contacts' presence
|
||||
end
|
||||
end
|
||||
else
|
||||
elseif session.username then
|
||||
--end
|
||||
--if stanza.attr.to and ((not hosts[stanza.attr.to]) or hosts[stanza.attr.to].type ~= "local") then
|
||||
-- Need to route stanza
|
||||
|
@ -147,4 +147,3 @@ function init_stanza_dispatcher(session)
|
|||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ function init_xmlhandlers(session)
|
|||
session.streamid = m_random(1000000, 99999999);
|
||||
print(session, session.host, "Client opened stream");
|
||||
send("<?xml version='1.0'?>");
|
||||
send(format("<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='%s' from='%s' >", session.streamid, session.host));
|
||||
send(format("<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='%s' from='%s' version='1.0'>", session.streamid, session.host));
|
||||
--send("<stream:features>");
|
||||
--send("<mechanism>PLAIN</mechanism>");
|
||||
--send [[<register xmlns="http://jabber.org/features/iq-register"/> ]]
|
||||
|
|
8
main.lua
8
main.lua
|
@ -10,7 +10,7 @@ function log(type, area, message)
|
|||
end
|
||||
|
||||
require "core.stanza_dispatch"
|
||||
init_xmlhandlers = require "core.xmlhandlers"
|
||||
local init_xmlhandlers = require "core.xmlhandlers"
|
||||
require "core.rostermanager"
|
||||
require "core.offlinemessage"
|
||||
require "core.usermanager"
|
||||
|
@ -114,6 +114,7 @@ function handler(conn, data, err)
|
|||
do
|
||||
local conn_name = tostring(conn):match("%w+$");
|
||||
log = function (type, area, message) mainlog(type, conn_name, message); end
|
||||
--log = function () end
|
||||
end
|
||||
local print = function (...) log("info", "core", t_concatall({...}, "\t")); end
|
||||
session.log = log;
|
||||
|
@ -132,15 +133,18 @@ function handler(conn, data, err)
|
|||
session.parser = lxp.new(session.xml_handlers, ":");
|
||||
|
||||
function session.disconnect(err)
|
||||
if session.last_presence.attr.type ~= "unavailable" then
|
||||
if session.last_presence and session.last_presence.attr.type ~= "unavailable" then
|
||||
local pres = st.presence{ type = "unavailable" };
|
||||
if err == "closed" then err = "connection closed"; end
|
||||
pres:tag("status"):text("Disconnected: "..err);
|
||||
session.stanza_dispatch(pres);
|
||||
end
|
||||
if session.username then
|
||||
hosts[session.host].sessions[session.username] = nil;
|
||||
end
|
||||
session = nil;
|
||||
print("Disconnected: "..err);
|
||||
collectgarbage("collect");
|
||||
end
|
||||
end
|
||||
if data then
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue