Software /
code /
prosody
File
net/multiplex_listener.lua @ 4330:520fcb333cba
util.x509: Update references to published RFCs
For TLS-CERTS, see http://tools.ietf.org/rfcdiff?url1=draft-saintandre-tls-server-id-check-10.txt&url2=rfc6125.txt
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 22 May 2011 14:06:18 -0700 |
parent | 3138:d6151c9a6f7e |
line wrap: on
line source
local connlisteners_register = require "net.connlisteners".register; local connlisteners_get = require "net.connlisteners".get; local httpserver_listener = connlisteners_get("httpserver"); local xmppserver_listener = connlisteners_get("xmppserver"); local xmppclient_listener = connlisteners_get("xmppclient"); local xmppcomponent_listener = connlisteners_get("xmppcomponent"); local server = { default_mode = "*a" }; local buffer = {}; function server.onincoming(conn, data) if not data then return; end local buf = buffer[conn]; buffer[conn] = nil; buf = buf and buf..data or data; if buf:match("^[a-zA-Z]") then local listener = httpserver_listener; conn:setlistener(listener); local onconnect = listener.onconnect; if onconnect then onconnect(conn) end listener.onincoming(conn, buf); elseif buf:match(">") then local listener; local xmlns = buf:match("%sxmlns%s*=%s*['\"]([^'\"]*)"); if xmlns == "jabber:server" then listener = xmppserver_listener; elseif xmlns == "jabber:component:accept" then listener = xmppcomponent_listener; else listener = xmppclient_listener; end conn:setlistener(listener); local onconnect = listener.onconnect; if onconnect then onconnect(conn) end listener.onincoming(conn, buf); elseif #buf > 1024 then conn:close(); else buffer[conn] = buf; end end function server.ondisconnect(conn, err) buffer[conn] = nil; -- warn if no buffer? end connlisteners_register("multiplex", server);