Today I added support for NCSA/Apache style logs. It has been nearly 2 years since I last touched this code and closer to 3 since I first wrote it. Surprisingly, I’m able to make modifications pretty easily. To me, this indicates that the design is semi-clean. The odd thing about Shelob is that it is literally my first C— program. I’ve never so much as done a Hello World in C— before writing a web server. Granted, I had done a fair amount of C before this and I’m using C— more for the STL and namespaces. It isn’t completely OOP, but C— isn’t either. One of the big things that I was trying to do with Shelob was to use C— strings exclusively, but I found out quickly that it is almost impossible not to drop down and use C style “strings” at some point, espeically when dealing with sockets. Right now Shelob is very incomplete, but it does have the following features:

  • Compiles cleanly on Solaris/Sparc, OpenBSD/PPC, OSX/PPC, Linux/x86
  • Binary is less than 60K
  • Supports HTTP/1.1 Keep-Alive
  • Basic log file support
  • A filter class (currently supports adding a footer to every HTML page before serving)

Currently, it is forking, but I’m considering moving to a select model for speed. I would also like to be able to run it from Win32, but that is a much lower priority. It would be nice if Vista supported forking. I have some ideas for future features, but there are some areas that are a little rough in the current code that need refactoring. I also need to ponder what license to release under. I’m leaning towards BSD, but GPL is running a close second. I should probably look at other web servers and see what they are operating under.