main.lua

changeset 7
dcc5ac721c20
parent 6
7ad47ce20394
child 11
67460500abdd
equal deleted inserted replaced
6:7ad47ce20394 7:dcc5ac721c20
8 function log(type, area, message) 8 function log(type, area, message)
9 print(type, area, message); 9 print(type, area, message);
10 end 10 end
11 11
12 require "core.stanza_dispatch" 12 require "core.stanza_dispatch"
13 init_xmlhandlers = require "core.xmlhandlers" 13 local init_xmlhandlers = require "core.xmlhandlers"
14 require "core.rostermanager" 14 require "core.rostermanager"
15 require "core.offlinemessage" 15 require "core.offlinemessage"
16 require "core.usermanager" 16 require "core.usermanager"
17 require "util.stanza" 17 require "util.stanza"
18 require "util.jid" 18 require "util.jid"
101 end 101 end
102 end 102 end
103 103
104 function handler(conn, data, err) 104 function handler(conn, data, err)
105 local session = sessions[conn]; 105 local session = sessions[conn];
106 106
107 if not session then 107 if not session then
108 sessions[conn] = { conn = conn, notopen = true, priority = 0 }; 108 sessions[conn] = { conn = conn, notopen = true, priority = 0 };
109 session = sessions[conn]; 109 session = sessions[conn];
110 110
111 -- Logging functions -- 111 -- Logging functions --
112 112
113 local mainlog, log = log; 113 local mainlog, log = log;
114 do 114 do
115 local conn_name = tostring(conn):match("%w+$"); 115 local conn_name = tostring(conn):match("%w+$");
116 log = function (type, area, message) mainlog(type, conn_name, message); end 116 log = function (type, area, message) mainlog(type, conn_name, message); end
117 --log = function () end
117 end 118 end
118 local print = function (...) log("info", "core", t_concatall({...}, "\t")); end 119 local print = function (...) log("info", "core", t_concatall({...}, "\t")); end
119 session.log = log; 120 session.log = log;
120 121
121 -- -- -- 122 -- -- --
123 -- Send buffers -- 124 -- Send buffers --
124 125
125 local send = function (data) print("Sending...", tostring(data)); conn.write(tostring(data)); end; 126 local send = function (data) print("Sending...", tostring(data)); conn.write(tostring(data)); end;
126 session.send, session.send_to = send, send_to; 127 session.send, session.send_to = send, send_to;
127 128
128 print("Client connected"); 129 print("Client connected");
129 130
130 session.stanza_dispatch = init_stanza_dispatcher(session); 131 session.stanza_dispatch = init_stanza_dispatcher(session);
131 session.xml_handlers = init_xmlhandlers(session); 132 session.xml_handlers = init_xmlhandlers(session);
132 session.parser = lxp.new(session.xml_handlers, ":"); 133 session.parser = lxp.new(session.xml_handlers, ":");
133 134
134 function session.disconnect(err) 135 function session.disconnect(err)
135 if session.last_presence.attr.type ~= "unavailable" then 136 if session.last_presence and session.last_presence.attr.type ~= "unavailable" then
136 local pres = st.presence{ type = "unavailable" }; 137 local pres = st.presence{ type = "unavailable" };
137 if err == "closed" then err = "connection closed"; end 138 if err == "closed" then err = "connection closed"; end
138 pres:tag("status"):text("Disconnected: "..err); 139 pres:tag("status"):text("Disconnected: "..err);
139 session.stanza_dispatch(pres); 140 session.stanza_dispatch(pres);
140 end 141 end
142 if session.username then
141 hosts[session.host].sessions[session.username] = nil; 143 hosts[session.host].sessions[session.username] = nil;
142 session = nil;
143 print("Disconnected: "..err);
144 end 144 end
145 session = nil;
146 print("Disconnected: "..err);
147 collectgarbage("collect");
145 end 148 end
149 end
146 if data then 150 if data then
147 session.parser:parse(data); 151 session.parser:parse(data);
148 end 152 end
149 153
150 --log("info", "core", "Client disconnected, connection closed"); 154 --log("info", "core", "Client disconnected, connection closed");

mercurial