Wodin is an IMAP server.
C++ Makefile
Latest commit bef3d5f Mar 21, 2015 @JonathanGuthrie Fix an issue that I introduced when I converted the parse buffer to u…
…se a

parseBuffer class.  I was treating it as a synonym for a char array, which it
most decidedly is not.  The odd part is that I had done most of the conversions
already and these got mangled somehow.
Permalink
Failed to load latest commit information.
notes Continuing to split out handler classes. May 27, 2013
unittests Add a couple of test cases to check for more failure conditions. Dec 30, 2013
License.txt Add licensing information. Like the clotho library that it uses, this… Nov 30, 2013
Makefile Add support for the starttls command. Mar 11, 2015
README.md Update the README to reflect the fact that I've now implemented STARTTLS Mar 11, 2015
README.valgrind Even more locking tests. Aug 8, 2011
appendhandler.cpp Some consequences of changing the failures to return right away. That… Dec 30, 2013
appendhandler.hpp Fix a couple of errors found in unit testing. First, the flags should… Dec 21, 2013
asynchronousaction.cpp Reformat before possibly making substantive changes. Dec 6, 2013
asynchronousaction.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
authenticatehandler.cpp Reformat before possibly making substantive changes. Dec 6, 2013
authenticatehandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
base64.cpp Reformat before possibly making substantive changes. Dec 6, 2013
base64.hpp Add licensing information. Like the clotho library that it uses, this… Nov 30, 2013
capabilityhandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
capabilityhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
checkhandler.cpp Eliminate many of the warnings seen when the system is compiled with … Dec 6, 2013
checkhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
closehandler.cpp Eliminate many of the warnings seen when the system is compiled with … Dec 6, 2013
closehandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
copyhandler.cpp Reformat before possibly making substantive changes. Dec 6, 2013
copyhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
createhandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
createhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
creating-mailstores.txt add some notes to help guide the work Nov 27, 2010
datetime.cpp Eliminate many of the warnings seen when the system is compiled with … Dec 6, 2013
datetime.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
delayedmessage.cpp Reformat before possibly making substantive changes. Dec 6, 2013
delayedmessage.hpp Add licensing information. Like the clotho library that it uses, this… Nov 30, 2013
deletehandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
deletehandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
expungehandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
expungehandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
fetchhandler.cpp Fix an issue that I introduced when I converted the parse buffer to u… Mar 20, 2015
fetchhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
idletimer.cpp Reformat before possibly making substantive changes. Dec 6, 2013
idletimer.hpp Add licensing information. Like the clotho library that it uses, this… Nov 30, 2013
imapd.cpp Reformat before possibly making substantive changes. Dec 6, 2013
imaphandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
imaplocktestuser.cpp Reformat before possibly making substantive changes. Dec 6, 2013
imaplocktestuser.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
imapmaster.cpp Fix an issue that I introduced when I converted the parse buffer to u… Mar 20, 2015
imapmaster.hpp Add support for the starttls command. Mar 11, 2015
imapmasterlocktest.cpp Reformat before possibly making substantive changes. Dec 6, 2013
imapsession.cpp Fix an issue that I introduced when I converted the parse buffer to u… Mar 20, 2015
imapsession.hpp finish the STARTTLS implementation Mar 12, 2015
imapunixuser.cpp Reformat before possibly making substantive changes. Dec 6, 2013
imapunixuser.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
imapuser.cpp Eliminate many of the warnings seen when the system is compiled with … Dec 6, 2013
imapuser.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
listhandler.cpp Eliminate many of the warnings seen when the system is compiled with … Dec 6, 2013
listhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
locking-test.cpp Reformat before possibly making substantive changes. Dec 6, 2013
locking-test.txt Even more locking tests. Aug 8, 2011
locktestmaster.cpp Reformat before possibly making substantive changes. Dec 6, 2013
locktestmaster.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
loginhandler.cpp Add support for the starttls command. Mar 11, 2015
loginhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
logouthandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
logouthandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
mailmessage.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
mailmessage.hpp Add licensing information. Like the clotho library that it uses, this… Nov 30, 2013
mailsearch.cpp Eliminate many of the warnings seen when the system is compiled with … Dec 6, 2013
mailsearch.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
mailstore.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
mailstore.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
mailstoreinvalid.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
mailstoreinvalid.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
mailstorelocktest.cpp Reformat before possibly making substantive changes. Dec 6, 2013
mailstorelocktest.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
mailstorembox.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
mailstorembox.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
namespace.cpp Eliminate many of the warnings seen when the system is compiled with … Dec 6, 2013
namespace.hpp Make it possible to more fully make the namespace class so that I can… Dec 7, 2013
namespacehandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
namespacehandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
noophandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
noophandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
renamehandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
renamehandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
retry.cpp Reformat before possibly making substantive changes. Dec 6, 2013
retry.hpp Add licensing information. Like the clotho library that it uses, this… Nov 30, 2013
sasl.cpp Eliminate many of the warnings seen when the system is compiled with … Dec 6, 2013
sasl.hpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
searchhandler.cpp Fix an issue that I introduced when I converted the parse buffer to u… Mar 20, 2015
searchhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
selecthandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
selecthandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
starttlshandler.cpp finish the STARTTLS implementation Mar 12, 2015
starttlshandler.hpp Add support for the starttls command. Mar 11, 2015
statushandler.cpp Reformat before possibly making substantive changes. Dec 6, 2013
statushandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
storehandler.cpp Fix an issue that I introduced when I converted the parse buffer to u… Mar 20, 2015
storehandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
subscribehandler.cpp Eliminate all the easy to eliminate -Wall warnings. Dec 7, 2013
subscribehandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013
todo.txt Update the to-do list Mar 11, 2015
unimplementedhandler.cpp Reformat before possibly making substantive changes. Dec 6, 2013
unimplementedhandler.hpp Reformat before possibly making more substantive changes. Dec 6, 2013

README.md

wodin

Wodin is a nearly-complete IMAP server.

It was created back in 2003 when I was hired by Simdesk specifically to write it. I finished it 13 weeks later, and it languished for lack of testing resources. Eventually, I created a IMAP test fixture to test it and found errors in the MIME parsing, but by February 2004 there were no known errors in it. However, Simdesk had made a decision to not use a home-grown IMAP server, so the code was set on the shelf and, eventually removed from the Simdesk source tree.

I kept a copy when the source was removed from the Simdesk source tree. I thought it was pretty good code and that it didn't deserve to be forgotten. My intention was to eventually secure the rights to it, or at least to secure permission to release it under an appropriate license so that people could see it and appreciate it. I continued to work on it, producing a thread pool template library and an Internet server library to replace the "Simdeskisms" that I was required to use because it was originally a Simdesk product. Those libraries were not derived from any Simdesk sources so I have long since released them under the Apache license.

I had originally written this IMAP server to work with a newly-defined database-backed mailstore, but that seemed like less and less of a good idea. A coworker had expressed interest in it, but only if I implemented maildir as a mail store. I had some interest in maildir, but I use mbox at home, so I implemented mbox but defined an interface for creating other mail stores including maildir and whatever else caught my fancy. I also intended to use the interface from the other direction and create a Web service to access the same mail stores. Someday.

Then, one day Simdesk went under and Mezeo acquired all of Simdesk's assets. At about that time, what I was then calling wodin was getting to a point where it could be released and I asked about the status of the IMAP server. I was told that Mezeo had acquired all of Simdesk's valuable assets, and that did not include any IMAP server source. The source I had labored over for years was abandoned by them and I could do with it what I wished. What I wished was to release it, and so here it is.

It's not really ready for use. I implemented the mboxrd format, while nearly everyone uses mboxo so it won't work with, say, postfix in all the corner cases. It shouldn't screw anything up, it just won't quite do the right thing sometimes. A more serious issue is that mbox locking isn't yet implemented. That WILL screw things up, so don't put this into a live mail system. I also haven't yet got around to implementing user-defined flags. At first I didn't understand them and then I got busy doing other things. They're on the list, though. Not having user-defined flags doesn't seem to hurt much, but it's definitely a limitation.

Lastly, I just finished a major reorganization and I would be shocked if I hadn't introduced some significant errors as part of that. I'll be squashing those as time goes on.

I'm also intending to add unit tests all over. That hasn't happened yet, either, but one reason for the reorganization I just finished is to make those tests easier.