2 local connlisteners_register = require "net.connlisteners".register;
3 local connlisteners_get = require "net.connlisteners".get;
5 local httpserver_listener = connlisteners_get("httpserver");
6 local xmppserver_listener = connlisteners_get("xmppserver");
7 local xmppclient_listener = connlisteners_get("xmppclient");
8 local xmppcomponent_listener = connlisteners_get("xmppcomponent");
10 local server = { default_mode = "*a" };
14 function server.onincoming(conn, data)
15 if not data then return; end
16 local buf = buffer[conn];
18 buf = buf and buf..data or data;
19 if buf:match("^[a-zA-Z]") then
20 local listener = httpserver_listener;
21 conn:setlistener(listener);
22 local onconnect = listener.onconnect;
23 if onconnect then onconnect(conn) end
24 listener.onincoming(conn, buf);
25 elseif buf:match(">") then
27 local xmlns = buf:match("%sxmlns%s*=%s*['\"]([^'\"]*)");
28 if xmlns == "jabber:server" then
29 listener = xmppserver_listener;
30 elseif xmlns == "jabber:component:accept" then
31 listener = xmppcomponent_listener;
33 listener = xmppclient_listener;
35 conn:setlistener(listener);
36 local onconnect = listener.onconnect;
37 if onconnect then onconnect(conn) end
38 listener.onincoming(conn, buf);
39 elseif #buf > 1024 then
46 function server.ondisconnect(conn, err)
47 buffer[conn] = nil; -- warn if no buffer?
50 connlisteners_register("multiplex", server);