Raccoon Message Server

The Raccoon message server is responsible for maintaining information about
a collection of "topics." Each topic consists of "notes," which are each
documents in the RFC822 format. In general, a Raccoon server is used for a
specific administrative domain, where particular standards and guidelines
are enforced.
A Raccoon server may also be used to host the Jalot system. Within Jalot,
threaded topics are used as task lists, and threads within a topic are
used as tasks.
Commands are given as a one-line command, followed by a one-line response
from the server.  Each response is prepended by a 3-digit number called
a response code.  Response codes between 200 and 299 are considered
"success" responses.  Responses between 300 and 349 are considered
"success" responses, and the server will send additional lines of
response. Responses between 350 and 399 are consider "proceed" responses
-- the server accepted the command and is expecting additional input
from the client.  Responses between 400 and 499 are considered user
errors.  Responses between 500 and 599 indicate server errors, either
because of an internal problem with the server or because the specific
command is not implemented.  Responses between 800 and 899 are
asynchronous messages, and are described in the XMessage Protocol
document. If a client does not enable XMessages, then the client will
never receive an asynchronous message, and does not need to handle them
correctly.
The additional input for the 300 response codes are given as additional
lines of input.  The end of the additional lines of input are marked by
a line containing only a period (".").  If a line begins with a period,
then the sender prepends a period and the recipient removes the period.
For example:
    Server: 302 Note body follows \t noteno:1
    Server: From: Tanj
    Server: Formal-Name: lbrintle-isca/Tanj/Lee Brintle
    Server: Date: Fri, 03 Feb 2006 02:12:51 GMT
    Server: Subject: Changed Owner
    Server:
    Server: lbrintle-isca/Tanj/Lee Brintle
    Server: is new owner of task
    Server: ..tricky line
    Server: The above line should be read as ".tricky line"
    Server: .
Unlike the HTTP protocol, the Raccoon protocol is stateful.  Gateways
exist between stateless protocols and the Raccoon protocol.
Raccoon uses many "tag/value" pairs, where a tag is sent, followed by
a colon, followed by a value. This document describes plain-text messages;
all clients and all servers are required to both understand and handle
the plain-text versions of notes and other bodies of data.  Further, a
client who extends the functionality to handle other formats -- such as
HTML -- are still required to provide a good, plain-text version of the
data to clients who do not request the extended type.
In general, a command consists of a command word, a target, and optional
parameters appended to the end of the command, separated by tabs.  This
allows the protocol to be expanded and for clients and servers to discover
mutually-implemented extensions.  A response is a 3-digit response code,
a local human-readable explanation of the response code, and zero or more
tab-delimited tag/value pairs.  If a command has a variable type of
response, The tag portion of the first pair is usually omitted.
In this document, the string " \t " represents the tab character.  That
is, the example string:
    Server: 202 Cannot process login \t Invalid password
means that after the "login" portion of the response is an ASCII 9
character followed by the string "Invalid password".  The spaces are
there for readability purposes.
There are many locations where a user's identity is given.  Raccoon
defines a "formal name" as being a three-part tuple, separated by
'/' characters:
     accountid/handle/real name
The accountid is authentication-specific and permanently and uniquely
identifies the user. The handle is a unique display name requested by
the user which may change over time. The real name is either the real
name of the user or the special value "(hidden)", indicating that the
user does not wish his or her real name to be displayed.  The real name
may contain a '/' character.

Welcome banner

Upon connection and without client input, a Raccoon server sends a welcome
response; a successful welcome means that the server is available for
login and commands. A 400-level error indicates that the client does
not have permission to access the server, and a 500-level error indicates
that the server is unavilable for some reason.
    Client: <connect>
    Server: 200 Server started

LOGIN username \t password

Logs the specified user into the system. The authentication information
may vary from system to system. Possible options include actual
name/password values or authentication information from single signon
systems such as Bamboo or Passport.
    Client: LOGIN Gestalt \t testaccount
    Server: 202 Logged in \t handle:Gestalt \t flags:sysop
    Client: LOGIN Gestalt \t badpassword
    Server: 405 Cannot process login \t Invalid password
Common tag/value pairs in resposne: handle, flags

LIST [target [filters]]

Returns a list of topics within the server, filtered by an optional
argument. The default listing is "public"; only non-private topics are
listed.
Target is one of: ALL, PUBLIC, PRIVATE, TODO, JOINED, NAMED, THREADS.
Filters include "owner" and "flags".
Joined topics are defined as any topic that the user issued a "SETRC"
command with a non-zero argument. To-do topics are defined as any topic
that has any note equal to or higher than the most recent SETRC value.
Raccoon supports moderated topics, where the server may not list topics
as being "TODO" until the new notes have been approved.
Each topic is returned on its own line, with "topic" and "name" as
required tag/value pairs.  A topic is a unique numeric identifier for
the topic, and must fit within an unsigned four-byte number. Other
optional tag/value pairs include:
    desc          A longer, more descriptive version of the topic name
    firstnote     The lowest available note
    lastnote      The highest available note
    maxnote       The highest actual note
    internalid    A server-specific string identifying the topic
    flags         A comma-seperated list of flags.  Possible flags include
                  private, nosubject, moderated, threaded, cananon,
                  forceanon, autojoin, closed.  Any flag may be prepended
                  with "no" to indicate explicitly that the flag is not
                  set; for example "noprivate" means a public topic.
    todo          The number of notes equal to or higher than the user's
                  current SETRC value, or 0 if the user has no SETRC
                  value.  This number may be an approximation.
    owner         The current owner of the topic. Within Jalot, the owner
                  of a thread (task) is the person currently responsible
                  for that task.
    parenttopic   In threads, this '/'-delimited string indicates which
                  parent topic and which note in that topic was the start
                  of this thread.  For example, "parenttopic:409/142"
                  indicates that this thread contains replies to post
                  142 in topic 409.
Which tag/value pairs may vary depending on the type of command.
    Client: LIST PRIVATE \t owner:Tanj
    Server: 301 Topic list follows
    Server: topic:0 \t name:Raccoon \t
            desc:The starting place for conversation \t firstnote:0 \t
            lastnote:0 \t internalid:96 \t maxnote:0 \t
            owner:lbrintle-leepfrog/Tanj/Lee Brintle
    Server: .

TOPIC { topicname | topicid }

Sets the current topic to either the specific topic topicid or a topic
whose name either exactly matches topicname or, if no topics match exactly,
a topic whose name is "similar" to topicname; the definition of "similar"
is left up to the implementers of the server.  The response to the command
contains a tag/value list similar to the results of a LIST command.
    Client: TOPIC 0
    Server: 204 Topic set to: \t topic:0 \t name:Raccoon \t
            desc:The starting place for conversation \t firstnote:0 \t
            lastnote:0 \t internalid:96 \t maxnote:0 \t
            owner:lbrintle-leepfrog/Tanj/Lee Brintle

READ [ > | < ] noteno [DAMMIT]

Return an RFC822 (SMTP) formatted note from the server. If the optional
"directional" characters ">" or "<" are specified, then the next or prior
non-deleted note in the specified direction is returned. If the DAMMIT
argument is specified and the user has permission, then the contents of a
deleted note are returned. The DAMMIT form will also return the author of
an anonymous post, if the reader has permission.  The tag/value "noteno"
is required, which indicates which note was actually returned from the
server.  This is required even if the "<" or ">" arguments were not used.
As with all RFC messages, the header is separated from the body by a
single blank line.
    Client: READ >1
    Server: 302 Note body follows \t noteno:1
    Server: From: Tanj
    Server: Formal-Name: lbrintle-leepfrog/Tanj/Lee Brintle
    Server: Date: Fri, 03 Feb 2006 02:12:51 GMT
    Server: Subject: Interested groups?
    Server: Replies-Thread: 100032
    Server: Replies-Count: 0
    Server:
    Server: Anyone interested in writing a gateway between YIM and
    Server: the x-message server should contact me.
    Server: .

POST

Adds a note to the current topic. Unless the "nosubject" flag is set for
the topic, the subject line of the post is specified using the "subject:"
argument. If the user wishes to post the note under a particular
administrative authority, the authority may be given by using the
"authority:" arugment. Typical authorities are "Sysop" or "Topic
Administrator". If an inappropriate authority for the current user is
specified, the authority is silently removed.
Typical command tag/value pairs include "authority", which allows
moderators or administrators to make administrative notes; and "flags",
which contains flags such as "anonymous" or "noreply".
The server provides the entire header of the note; only the body is passed
by the client to the POST command.  The sucessful reply will contain a
value of the newly create not number; other tag/value pairs may be
provided.  If the topic is threaded, a tag/value pair in the response will
include "replythread", which is the topicid of the topic which will contain
replies to the new post.  The server will automatically set the RC value of
the new note's reply thread to 1 for the author.

SETRC rcval

The RC value of the current topic for the current user is set to rcval.
The RC value is used by the server in at least four ways:
  - Topics with a non-0 RC value will be show in the LIST JOINED command
  - Topics who have a lastnote greater than or equal to a user's RC value
    for that topic are displayed in the "LIST TODO" command
  - If the "todo" tag/value pair is included in a topic listing, it is
    based on the RC value.
  - It is the value shown with the "SHOW RCVAL" command, which the client
    may use as it wishes.
An RC value of "0" means that the user is no longer interested in this
topic.
This is a way to store client-specific information on the server; the
server can send only the information to the client that the client is
interested in, and can be used when a user uses multiple clients to access
the same server.
Note that the value is not the most recent note, it is one *beyond* the
most recently read note.  For example, if the user has read notes one
through three, the client would typically set an RC value to four -- the
next highest note.

SETT permission username newperm SETT defperm newperm

Sets the permissions for a specific user, or the default permissions for
all users. Permissions can be any combination of: read, post, join, delown
(delete own notes), delall (delete anyone's notes), approve, admin, none,
all, or basic. Basic means "whatever is typical for this server," and is
usually read, post, join, and delete own.

SETT fieldname newvalue

Changes a specific field for a topic, where field is one of the following:
     Fieldname    Function
     name      Name of the topic
     admin     Primary topic administrator
     desc      Short topic description
     info      Long (multi-screen) topic description
     postmsg   A hints message for users who post to the topic
     setflag   Sets a flag, see below for available flags
     clrflag   Clears a flag set with "setflag"
Flags for a topic include:
  isprivate    Users may not access the topic unless invited
  nosubject    Posts do not include subject lines
  moderated    Notes must be approved before typical users can read
  threaded     When a post is made to a threaded topic, a new topic is
               automatically created to hold the replies to that note.
  cananon      Users may choose to post anonymously to this topic
  forceanon    All posts will be anonymous
  autojoin     A new user is automatically joined to this topic
  closed       No new posts may be made to this topic

SHOW { rcval | topic | info | defperm | permissions | joined }

Show the current value of various topic settings. The "rcval" argument will
return the value most recently used in the "SETRC" command.  Topic returns
the same information as the TOPIC command.  Info returns an RFC-822-style
note containing information about the topic set by SETT INFO.  Defperm
lists the default permissions; permissions lists the permissions of the
listed user.  Joined lists all of the users who have a non-zero SETRC
value.

DELETE NOTE noteno

Delete note noteno. The contents of the note may still be accessible by
using the DAMMIT argument to the read command, although the permissions and
ability will vary depending on implementation.

DELETE TOPIC

Deletes the current topic. Future topics created will have a different
internal number, but the topicid is permitted to be reused.  It is up
to the server to determine what happens to RC information if a topic is
deleted and a new topic is created with the same topicid.

MAKE

Creates a new topic in the system. The default values for the topic vary
from system to system.  Required Command tag/value pairs include "name"
and "desc", which is a longer version of "name".  Other tag/value pairs
include "flags".

OKAY action

Requests a permissions check for a particular operation, without actually
executing the operation. Useful for checking for posting permissions before
allowing the user to compose a post, for example.
The argument may contains additional data; for example: "OKAY MAKE Lobby"
will return false if a new forum named lobby cannot be created. Another
example is "OKAY delete note 123", which will check to see if it is okay
to delete that particular note.

QUIT

Quits the system.
 
raccdoc_protocol_documentation.txt · Last modified: 2009/09/16 15:31 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki