Skip to content
A pure C gopher server implementation
C Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
lib
src
.gitignore
AUTHORS
LICENSE
Makefile
README.md
TODO

README.md

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

$ make

will compile and put the result in $(PREFIX) dir.

USAGE

$ ./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 allowed.
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.

Type Description
0 text file
1 Gopher submenu
2 CCSO Nameserver
3 Error code returned by a Gopher server to indicate failure
4 BinHex-encoded file (primarily for Macintosh computers)
5 DOS Files
6 uuencoded file
7 Gopher full-text search
8 Telnet
9 Binary file
+ Mirror or alternate server (for load balancing or in case of primary server downtime)
g GIF file
I Image file
T Telnet 3270
i informational message
h HTML file
s Sound file

An example of gophermap can be found here.

TODO LIST

Here the todo list containing the list of the next features we MUST have.

You can’t perform that action at this time.