A pure gopherd server implementation
This is a simple, minimal implementation of a Gopher server written in pure C that follow the reference:
It's supposed to simply serve the content you specify defining a root directory in the defaults.def.h file.
Build from SRC
You can simply build it using the provided Makefile.
According to the defined $PREFIX, the default all target generates a bin/ directory containing the result of the compilation.
The config target is useful to generate a lib/defaults.h with all the user-defined parameters.
$ make help
will show all the available targets.
$ make config
will generate the defaults.h according to the defaults.def.h
will compile and put the result in $(PREFIX) dir.
$ ./c_gopherd -h Usage ./bin/c_gopherd [-h host] [-p port] [-s srv_path] [-v]
THE GOPHER PROTOCOL AND DATA TYPES
In the /example folder there is a little Gophermap file.
Customizing the GOPHER_ROOT directory (aka GROOT) or passing the
-s path option, you can serve it as an HTML equivalent index.
In this way you can display your custom Gopher menu instead of just a directory listing.
A good approach enabled by the use of the gophermap is represented by the ability to create nested gopherholes indexed with their own gophermap in a structure like the following:
example/ gophermap user1/ gophermap user_1_content/ user2 gophermap user_2_content/ content1/ content2.txt ... ...
How the gophermap is built?
According to the rfc and the evolution of the protocol, the following table specifies the format and the content types
The technical specification for Gopher, RFC 1436, defines 14 item types. A one-character code indicates what kind of content the client should expect.
Item type 3 is an error code for exception handling. Gopher client authors improvised item types h (HTML), i (informational message), and s (sound file) after the publication of RFC 1436, and I think the informational message is very useful to organize better a gophermap and present the resources in a cleaner way.
|3||Error code returned by a Gopher server to indicate failure|
|4||BinHex-encoded file (primarily for Macintosh computers)|
|7||Gopher full-text search|
|+||Mirror or alternate server (for load balancing or in case of primary server downtime)|
An example of gophermap can be found here.
Here the todo list containing the list of the next features we MUST have.