first version of the mmail server

This commit is contained in:
Izaya 2018-03-09 18:16:14 +11:00
parent fe4a6d20fc
commit a5fd736be0
1 changed files with 78 additions and 0 deletions

View File

@ -0,0 +1,78 @@
local net = require "net"
local fs = require "filesystem"
local event = require "event"
local prefix = "/var/maildir"
local process = nil
local listener = nil
local dbug = false
local hostname = os.getenv("HOSTNAME") or ""
local function dprint(...)
if dbug then
print(...)
end
end
function start()
fs.makeDirectory(prefix)
process = net.flisten(25,function(s)
local buffer = ""
local function processBuffer()
event.ignore("net_msg",listener)
local to,from = nil,nil
for l in buffer:gmatch("[^\n]+") do
local tw={}
for w in l:gmatch("%S+") do
tw[#tw+1] = w
end
if tw[1] == "To:" then
to=tw[2]
elseif tw[1] == "From:" then
from=tw[2]
end
to=to:match("(.+)@"..hostname) or to
end
if to and from then
dprint(to,from)
if fs.exists(prefix.."/"..to) then
fs.makeDirectory(prefix.."/"..to.."/new")
fs.makeDirectory(prefix.."/"..to.."/tmp")
fs.makeDirectory(prefix.."/"..to.."/cur")
local index = 0
if fs.exists(prefix.."/"..to.."/tmp/index") then
index=tonumber(io.open(prefix.."/"..to.."/tmp/index","rb"):read("*a")) or 0
end
local f = io.open(prefix.."/"..to.."/tmp/index","wb")
f:write(tostring(index+1))
dprint(tostring(index+1))
dprint(index)
f:close()
f = io.open(prefix.."/"..to.."/tmp/"..tostring(index),"wb")
f:write(buffer)
dprint(buffer)
f:close()
fs.rename(prefix.."/"..to.."/tmp/"..tostring(index),prefix.."/"..to.."/new/"..tostring(index))
end
end
end
local function lf()
buffer=buffer..s:read(16384)
if s.state == "closed" then
dprint("Beginning processing.")
processBuffer()
end
end
listener = lf
event.listen("net_msg",lf)
end)
end
function stop()
event.ignore("net_msg",process)
event.ignore("net_msg",listener)
end
function debug()
dbug = not dbug
end