chickadee » gopher » max-line-length

accept handle-requestprocedure
max-line-length 2048parameter

Reads a line from the client (up to CRLF, plain CR, or plain LF), replaces any ASCII NULs with SPACE, and splits the line into fields, using TAB as the delimiter. In general, client lines take 4 forms:

  • Selector
  • Selector<TAB>Search terms
  • Selector<TAB>Gopher+ data
  • Selector<TAB>Gopher+ data<TAB>Search terms

The first field is always the requested selector. Search terms are added for type 7 requests. The Gopher+ protocol unfortunately introduces some context-sensitive ambiguity into the meaning of the fields, and this module is not in the business of figuring that out. Instead, the user is expected to hash out the meaning of any extra fields, and handle-request is therefore called with two arguments:

(handle-request (car fields) (cdr fields))
(handle-request selector extra)            ; put another way

Note: the RFC says selectors may not exceed 255 characters, but this check is not enforced; however, to avoid memory overflow, accept will only read up to max-line-length characters. (Special note: line limiting doesn't currently work for TCP ports!)