[gopher] Gophernicus Server 0.4 released (renamed from kgopherd)

Kim Holviala kim at holviala.com
Mon Mar 29 12:23:03 UTC 2010


Everyone's dead already? Was I really gone for that long? Oh well, I'll 
just talk to myself then :-).

First of all, kgopherd is now known as Gophernicus Server. Yes, I plan 
to do a client too once I'm done with the server...

After a long hiatus I finally got back to coding and finished some of 
the things I set out to do with my gopher server. Since you all seemed 
*cough cough* a bit cautious about my gopher++ additions I decided to do 
as much as I could without any changes to the protocol. Turns out most 
of the thigs i wanted to accomplish were doable with a little hacking 
and cheating....

My first problem with the protocol was that the server didn't know the 
filetype what the client was requesting. That's pretty much solved 
without any changes to the protocol. Related to that was the problem 
where the client had no idea what kind of data the server was sending - 
that's also pretty much solved as the server now sends back whatever the 
client expects.

The next problem I had was with charsets. That's solved, kind of, but 
not properly yet. Bascially I scrapped iconv() and made my own charset 
conversion function which is input autoconfiguring and can output 
US-ASCII/Latin-1 and UTF-8. The current version only outputs US-ASCII 
which is compatible with all clients - problem solved but it could be 
better (how does the server know when to output UTF-8?).

I also wanted virtual hosting which is pretty much impossible without 
any changes to the protocol. Or so I though... with enough creative 
hacking that was _also_ solved fairly reliably. So yes, I have support 
for virtual hosting with plain gopher0 - compatible with all clients.

After virtual hosting and the session support that it required I was 
also able to include referrer support (yes, with gopher0 and zero 
support from clients) and throttling for clients who exceed predefined 
hit/kb limits.

I also added support for the (semi-)standard machine-parsable 
/server-status request which makes it possible to integrate Gophernicus 
with many monitoring tools - I myself use Munin which now can graph 
gopher requests & volume.

The BSD-licensed code can be downloaded form:
gopher://gophernicus.org/1/software/gophernicus/server/

Munin integration example:
gopher://holviala.com/1/statistics/
gopher://holviala.com/0/server-status

Request type snooping examples via autotyping error pages:
gopher://holviala.com/1/foo/bar/
gopher://holviala.com/0/foo/bar.txt
gopher://holviala.com/I/foo/bar.png

Charset examples:
gopher://holviala.com/1/~kimmy/code/gophernicus/testsuite/

Referrer example:
gopher://holviala.com/1/~kimmy/code/gophernicus/testsuite/cgi-bin/
Then open "dump.sh" and search for REFERER.

Virtual hosting examples:
See above. Both of the domains listed above run form the same server & 
IP address. Try browing around on both gophernicus.org and holviala.com 
and you'll see that it works fairly nicely. Changing from one 
virtualhost to another is usually automatic and works without any hacks, 
but depending on what you do you might need to use the magical 
vhost-changing selectors which are listed on the bottom of both domains 
root menus (the list is automatic with just a "%" in the gophermap).

Documentation is currently lacking a bit.... :-/


- Kim





More information about the Gopher-Project mailing list