
 General packet format:

ID no Data
%%%%% ...

Key:

  Certain abbreviation and symbols are used to mean certain things.

  {DGA} = Discussion, Group or Application
  {CUDGA} = Cloverid, User, Discussion, Group, or Application
  | denotes the beggining of the comment on a packet.
  
Numbers:

  All numbers that are sent are first converted into a "long" integer
(four bytes).  [If the value is a floating point, then it has to be
sent as text.]  The long is then converted to five base 85 digits
for trasmission purposes.  For example

0x0000 0000 would be converted to !!!!!
0x0000 0001 would be converted to "!!!!
0x00F0 F001 would be converted to nyU;!

  Routines for conversion are available in lts.c.  You don't need to 
understand the process, just to use it.

Packet Numbers:

  The packet numbering scheme is very devios, and each digit has a meaning.
The first four digits describe the command type of the packet.

Digit 1: This digit is 0 for user packets, 1 for server packets and so on
Digit 2: This digit is always 0, so far.
Digit 3: This digit has five possible values for client packets.
         1 - The packet is one that retrieves information
         2 - The packet deals with joining, creating and so on with {DGA}
         3 - The packet is for manipulating data on {CUDGA}'s
         4 - The packet is for sending information
         F - The packet deals with connection/disconnection
Digit 4: This digit is a counter, with little meaning except to tell one
         packet from another.

The last four digits describe the packets function within a given command
type.

Digit 1: If it's a 0, it is a packet being sent.  If it is an 8, it is
         a responce packet, and if it is 9-F, it is an error packet.
Digit 2: If it is a 0, it is a single standalone packet
         If it is a 1, it is the first through last packet of a sequence.
         if it is a 2, it signals the end of a group of packets.
Digit 3: This is a place counter to tell one packet from another.
Digit 4: This determines what the packet will function on.
         1 means it functions on Cloverids
         2 means it functions on Users
         3 means it functions on Discussions
         4 means it functions on Groups
         5 means it functions on Applications
         0 mens that none of the above are applicable.
         
Text:

  For ease of use and debugging (and because I like it) pascal style
strings are used.  This means that the length of the string is stored
as the first two digits of the strings, encoded base 85.  For example

!*Fredrick

 Is a valid string.  !* translates to 8, and "Fredrick" is eight 
characters long.  This way when the packet is recieved and decoded, you
can tell where each string starts and ends, and strings can have varying
lengths up to 7K (there are more restrictions in the transport layer however.)
For convention purposes, a null string is two characters, zero base 85:

!!

Responses: 

  Not all packets deserve (recieve) a responce.  If there is any possibility
of an error occuring then some responce is given.  If there was no error
the responce is usually the data requested, or confirmation that the data
sent was recieved.  The responce packets (that are not errors) can be
seen below, as they are the packets that have an eight in their fifth
hexidecimal digit.  For example the packet for announcements

0042 0002 flags time text | send mesage text with flags

has a responce packet

0042 8002 | announce ok

which is sent if the announcement was process correctly without error.

Errors:

  When a packet cannot be preformed upon as requested an error code is
generated and sent back to the client.  Most errors are of a fairly
common nature, and theese errors have been given their own hexidecimal
code.  The way it works is that the packet nuber's 5th hexidecimal digit
(which is always 0 to start out with) is replaced by the error code digit
and that packet number is sent back.  For example:

(0011 0001) !*Fredrick

would recieve in return

(0011 B001)

if there was no user with the word "Fredrick" in their name.  [() means
that the number has been converted to base 85.]  There are also errors
that are specific to packets, and they have an error code of 9, and 
have text that is sent with them to describe the particular error.

Error Codes
9 - Specific error with accompanying text. Listed seperatly.
A - Permission Denied
B - No such item available
C - Name Conflict
D - Text Too long for destination
E - User not logged in enough for command in question
F - Packet was malformed.  All packets can be malformed. Not listed


Format: The packet number is listed in hex, it must be converted into
        base 85.  Text for type 9 errors are listed in quotes, the
        quotes need to be removed, and the string length appended to the
        beginning.

0011: 
  Below are the commands for listing information from the server's database.
You send a name to be matched over a particular table, and it returns
several packets describing the people who matched that name.  If the name
sent is a null string, then the server returns everything in that table.

Error codes:
  A Means that the user has no permission to search that table.
  B Means no users match that name

0011 0001 name | name is a txt field to be matched over Clover Id's
0011 8101 CID name defname uname machine flags    | first-last
0011 8201      | End of list packet
Errors: AB

0011 0002 name | name is txt field to be matched over Users
0011 8102 UID name blurb onsince lastinp flags CID     | first-last
0011 8202      | End of list packet
Errors: AB

0011 0003 name | name is txt field to be matched over Discussions
0011 8103 DID name title ownerno onsince lastinp flags | first-last
0011 8203      | End of list packet
Errors: AB

0011 0004 name | name is txt field to be matched over Groups
0011 8104 GID name title ownerno onsince lastinp flags | first-last
0011 8204      | End of list packet
Errors: AB

0011 0005 name | name is txt field to be matched over Applications
0011 8105 AID name title ownerid onsince lastinp flags | first-last
0011 8205      | End of list packet
Errors: AB

0011 0011 name | name is txt field to be matched over Clover Id default name
0011 8111 CID name defname uname machine flags    | first-last
0011 8211      | End of list packet
Errors: AB

0011 0021 name | name is txt field to be matched over CID's you are ignoring
0011 8121 CID name defname uname machine flags    | first-last
0011 8221      | End of list packet
Errors: AB

0011 0022 name | name is txt field to be matched over users you are ignoring
0011 8122 UID name blurb onsince flags CID             | first-last
0011 8222      | End of list packet
Errors: AB

:&&:
0012:
  These packets retrieve a list of reference number of people who belong
to a {DGA}.  It returns in one packet a list of user reference numbers.

Error codes:
  A Means that the user has no permission to search that {DGA}
  B Means no {DGA} with the reference number given exists.

Errors:
0012 0003 refno | refno of discussion to get membership list for
0012 8003 refno [refno...] | Numbers of users in the discussion
Errors: AB

0012 0004 refno | refno of group to get membership list for
0012 8004 refno [refno...] | Numbers of CID's in the group
Errors: AB

0012 0005 refno | refno of application to get membership list for
0012 8005 refno [refno...] | Numbers of users in the application
Errors: AB

0012 0013 DID | refno of disc to get user's perms to 
0012 8113 UID flags | data returned
0012 8213      | End of list packet
Errors: AB

0012 8014 refno [refno...] | Numbers of users "ON" in the group
0012 0014 refno | refno of group to get membership list of people on
Errors: AB

:&&:
0013:
  This function retrieves data about a particular {CUDGA} by its
reference number.  The data sent depends on what the reference number
refers to.

Error codes:
  A Means that the user has no permission to get data on that {CUDGA}
  B Means no {CUDGA} with the reference number given exists.

0013 0001 CID | refno of sysid to get data on
0013 8001 CID name defname uname machine flags | unhidden
Errors: AB

0013 0002 UID | refno of user to get data on
0013 8002 UID name blurb onsince flags            | unhidden
Errors: AB

0013 0003 DID | refno of discussion to get data on
0013 8003 DID name title ownerno onsince flags    | unhidden
Errors: AB

0013 0004 GID | refno of group to get data on
0013 8004 GID name title ownerno onsince flags    | unhidden
Errors: AB

0013 0005 AID | refno of application to get data on
0013 8005 AID name title ownerid onsince flags    | unhidden
Errors: AB

0013 0013 DID UID | refno of discussion to user's perms to.
0013 8013 flags
Errors: AB

:&&:
0014:
  This function requests help information from the server on a particular
topic.

Error codes:
  A Means that the user has no permission to get help on that topic
  B Means no help exists for that topic.
  
0014 0001 topic | Help for topic (txt)
0014 8001 text  | help text
0014 8101 text  | first through next to last packet
0014 8201 text  | last packet
Errors: AB

:&&:
0015:
  This function gets the info file for the given {CUDGA}.

Error codes:
  9 There is no info file associate with the given {CUDGA}.
  A Means that the user has no permission to get the info file for that {CUDGA}
  B Means no {CUDGA} with the reference number given exists.

0015 0000 refno | Get info on systemid refno
0015 8100 text  | first to last packet
0015 8200       | End of list packet
0015 9100 "No info avail"
Errors: AB

:&&:
0021:
  This type requests that a {DGA} be created/run with the data given.

Error codes:
  9 Is used when there is no info, or the person has too man {DGA}'s already.
  A Means that the user has no permission to start that Application
  B Means no Application with the reference number given exists.
  C Means that there is alread a {DG} with that name in existance.
  D Means that The name or title give for the {DG} was too long
  E Means that the user isn't logged into the system yet.

0021 0003 flags info name title | Creates a discussion with data as listed
0021 8003                       | created
0021 9003 "Can't Find Info" OR  "Too many discusions owned already"
Errors:   CDE

0021 0004 flags info name title | Creates a group with data as listed
0021 8004                       | created
0021 9004 "Can't Find Info" OR  "Too many discusions owned already"
Errors:   CDE

0021 0005 AID args | Run game by refno with args (txt)
0021 8005            | app start 
     9005 "Too many user tasks" OR "Too many application tasks"
          "Incorrect Args"
Errors: AB  E

:&&:
0022:
  This packet type is for joining a particular {DGA}.

Error codes:
  9 Is for if the user already belongs to the particular {DGA}
  A Means that the user has no permission to join that {DGA}
  B Means no {DGA} with the reference number given exists.
  E Means that the user isn't logged into the system yet.

0022 0003 DID   | Join the discussion with given number
0022 8003       | Join ok
     9003 "Already a Member"
Errors: AB  E

0022 0004 GID   | Join the group with given number
0022 8004       | Join ok
     9004 "Already a Member"
Errors: AB  E

0022 0005 AID   | Join the application with given number
0022 8005       | Join ok
     9005 "Already a Member"
Errors: AB  E

:&&:
0023:
  These packets are for leaving a particular {DGA}

Error codes:
  9 Is used when the user is not a member of the {DGA}
  B Means no {DGA} with the reference number given exists.
  E Means that the user isn't logged into the system yet.

0023 0003 DID   | Leave the discussion with given number
0023 8003       | Leave ok
     9003 "Not currently a member"
Errors:  B  E

0023 0004 GID   | Leave the group with given number
0023 8004       | Leave ok
     9004 "Not currently a member"
Errors:  B  E

0023 0005 AID   | Leave the application with given number
0023 8005       | Leave ok
     9005 "Not currently a member"
Errors:  B  E

0023 0014 GID   | Cease being "on" the group with the given number
0023 8014       | Leave ok
     9014 "Not currently a member"
Errors:  B  E

:&&:
0024:
  This set of packets is for destroying/stoping {DGA}'s

Error codes:
  A Means that the user has no permission to destroy that {DGA}
  B Means no {DGA} with the reference number given exists.

0024 0003 DID   | Destroy the discussion with the given number
0024 8003       | dest ok
Errors: AB

0024 0004 GID   | Destroy the group with the given number
0024 8004       | dest ok
Errors: AB

0021 0015 AID   | Halt game by refno
0021 8015       | dest ok
Errors: AB

:&&:
0025:
  This set of packets is for removing a user from a {DGA}

Error codes:
  9 is used when the given user doesn't exist.
  A Means that the user has no permission to remove people from that {DGA}
  B Means no {DGA} with the reference number given exists.

0025 0003 DID UID    | Remove user uref from disc refno
0025 8003            | remove ok
     9003 "No such user"
Errors: AB

0025 0004 GID UID    | Remove user uref from group refno
0025 8004            | remove ok
     9004 "No such user"
Errors: AB

0025 0005 AID UID    | Remove user uref from appl refno
0025 8005            | remove ok
     9005 "No such user"
Errors: AB

:&&:
0026:
  This set of packets is used to claim a {DGA}'s ownership.

Error codes:
  A Means that the user has no permission to claim that {DGA}
  B Means no {DGA} with the reference number given exists.
  E Means that the user isn't logged into the system yet.

0026 0003 DID   | Claim discussion refno
0026 8003       | claim ok
Errors: AB  E

0026 0004 GID   | Claim group refno
0026 8004       | claim ok
Errors: AB  E

0026 0005 AID   | Claim application refno
0026 8005       | claim ok
Errors: AB  E

:&&:
0031:
  Theese packets are for ignoring and unignoring particular users's.
If you ignore based on CID, then you are ignoring that user forever,
and you will never see that person or anything associated with them
ever again.  If you ignore based on userid you are just ignoring them
temporarily.  The ignore's are first, the unignore's are second.
Lastly there is the packets which are used to unignore a specific user
who has not been ignored specifically.  This only has meaning if the
person is ignoring others.

Error codes:
  9 is used if the user is ignored/unignored already.
  B Means no {CU} with the reference number given exists.
  E Means that the user isn't logged into the system yet.

0031 0001 UID    | refno of the user of the systemid to be ignored (perm)
0031 8001        | ignored  
     9001 "User already ignored "
Errors:  B  E

0031 0002 UID    | refno of the user to be ignored
0031 8002        | ignored  
     9002 "User already ignored "
Errors:  B  E

0031 0011 UID    | refno of the user of the systemid to be unignored (perm)
0031 8011        | ignored  
     9011 "User already unignored "
Errors:  B  E

0031 0012 UID | refno of the user to be unignored
0031 8012        | ignored  
     9012 "User already unignored "
Errors:  B  E

0031 0022 UID    | refno of the user to be specifically unignored
0031 8022        | ignored  
     9022 "User already unignored "
Errors:  B  E

:&&:
0032:
  This function is for changing the blurb/title of a particular {UDGA}.

Error codes:
  A Means that the user has no permission to chang the title on that {DGA}
  B Means no {DGA} with the reference number given exists.
  D Means that The name or title give for the {UDGA} was too long
  E Means that the user isn't logged into the system yet.

0032 0002 blurb | text field containing blurb to be set
0032 8002 | Blurb fine  
Errors:    DE

0032 0003 DID title   | text field containing title to be set for disc
0032 8003             | Title fine  
Errors: AB DE

0032 0004 GID title   | text field containing title to be set for group
0032 8004             | Title fine  
Errors: AB DE

0032 0005 AID title   | text field containing title to be set for appl
0032 8005             | Title fine  
Errors: AB DE

:&&:
0034:
  This set of packets is for renameing a {UDGA}.

Error codes:
  A Means that the user has no permission to get data on that {DGA}
  B Means no {DGA} with the reference number given exists.
  C Means that there is alread a {UDGA} with that name in existance.
  D Means that The name or title give for the {UDGA} was too long
  E Means that the user isn't logged into the system yet.

0034 0002 UID name   | Rename self (refno) to name
0034 8002            | ren ok
Errors:   CDE
0034 0003 DID name   | Rename discussion (refno) to name
0034 8003            | ren ok
Errors: ABCDE
0034 0004 GID name   | Rename group (refno) to name
0034 8004            | ren ok
Errors: ABCDE
0034 0005 AID name   | Rename application (refno) to name
0034 8005            | ren ok
Errors: ABCDE

:&&:
0035:
  This set of packets is for setting the permissions for one user relative
to a particular {DGA}.

Error codes:
  9 Is used when the user being permitted doesn't exist.
  A Means that the user has no permission to set permissions on that {DGA}
  B Means no {DGA} with the reference number given exists.

0035 0003 DID UID flags    | Perm for disc refno for user or'd with flags
0035 8003                  | perm ok
0035 9003 "No such user"
Errors: AB

0035 0004 GID UID flags    | Perm for group refno for user or'd with flags
0035 8004                  | perm ok
0035 9004 "No such user"
Errors: AB

0035 0005 AID UID flags    | Perm for appl refno for user or'd with flags
0035 8005                  | perm ok
0035 9005 "No such user"
Errors: AB

0035 0013 DID UID flags    | Perm for disc refno for user and'd with flags
0035 8013                  | perm ok
0035 9013 "No such user"
Errors: AB

0035 0014 GID UID flags    | Perm for group refno for user and'd with flags
0035 8014                  | perm ok
0035 9014 "No such user"
Errors: AB

0035 0015 AID UID flags    | Perm for appl refno for user and'd with flags
0035 8015                  | perm ok
0035 9015 "No such user"
Errors: AB

:&&:
0036:
  This set of packets is for setting the flags (including the permission
flags) for a {CUDGA}.

Error codes:
  A Means that the user has no permission to set flags on that {CUDGA}
  B Means no {CUDGA} with the reference number given exists.

0036 0002 UID flags   | Set flags to flags given.
0036 8002             | set ok
Errors: AB

0036 0003 DID flags   | Set flags to flags given.
0036 8003             | set ok
Errors: AB

0036 0004 GID flags   | Set flags to flags given.
0036 8004             | set ok
Errors: AB

0036 0005 AID flags   | Set flags to flags given.
0036 8005             | set ok
Errors: AB

:&&:
0037:
  These packets are used to set the info file for a particular {CUDGA}.
If the file exists on the same machine that the server is running on then
all that need be sent is the filename (first set of packets.)  Otherwise
The entire file must be sent one piece at a time to the server, which will
store it temporarily until the {UDGA} leaves/is destroyed, or until the
server goes down, in which case all temporary info files are wiped.

Error codes:
  9 is used if the file doesn't exist, or the file is/would be too long.
  A Means that the user has no permission to set the info for that {DGA}
  B Means no {DGA} with the reference number given exists.
  E Means that the user isn't logged into the system yet.

0037 0002 text | Set info for user to filename text
0037 8002      | text accepted
     9002 "Non-Existant File" OR "File too long"
Errors:     E

0037 0003 DID text   | Set info for discussion (refno) to filename text
0037 8003            | text accepted 
     9003 "Non-Existant File" OR "File too long"
Errors: AB  E

0037 0004 GID text   | Set info for group (refno) to filename text
0037 8004            | text accepted
     9004 "Non-Existant File" OR "File too long"
Errors: AB  E

0037 0005 AID text   | Set info for applicataion (refno) to filename text
0037 8005            | text accepted
     9005 "Non-Existant File" OR "File too long"
Errors: AB  E

0037 0101 text  | First to last packet of new info file
0037 8101       | text accepted
     9101 "File too long"

0037 0201 | End of list packet
0037 8201 | All text accepted

0037 0102 text  | First to last packet of new info file
0037 8102       | text accepted
     9102 "File too long"
Errors:     E

0037 0202 | End of list packet
0037 8202 | All text accepted

0037 0103 DID text   | First to last packet of new info file
0037 8103            | text accepted
     9103 "File too long"
Errors: AB  E

0037 0203 | End of list packet
0037 8203 | All text accepted

0037 0104 GID text   | First to last packet of new info file
0037 8104            | text accepted
     9104 "File too long"
Errors: AB  E

0037 0204 | End of list packet
0037 8204 | All text accepted

0037 0105 AID text   | First to last packet of new info fil
0037 8105            | text accepted
     9105 "File too long"
Errors: AB  E

0037 0205 | End of list packet
0037 8205 | All text accepted

:&&:
0041:
  This function is for sending packets to a {UDGA} or a group of {UDGA}'s
in any combination.  There must be at least one refno for the destination.
There can be as many reference numbers for the destination as you would
wish.  You can mix destinations of different types.

Error codes:
  9 is used if the flags set are not valid for the server.
  A Means that the user has no permission to send to that {UDGA}
  B Means no {UDGA} with the reference number given exists.
  E Means that the user isn't logged into the system yet.

0041 0000 flags time text refno [refno...] | send mesage text with flags
             sent at time to refno or list of refno's (can be any refnos)
0041 8000                                  | send ok
     9000 "Bad Flags"
Errors: AB  E

:&&:
0042:
  This packet is for sending announcements to all users on the system.

Error codes:
  9 is used if the flags set are not valid for the server.
  A Means that the user has no permission to send announcements.
  E Means that the user isn't logged into the system yet.

0042 0002 flags time text | send mesage text with flags
0042 8002                 | announce ok
     9002 "Bad Flags"
Errors: A   E

:&&:
0043:
  This set of packets is used to send mail to a particular user or group.
If you want to send mail to a group of users, you should create a group
for them, or have the UI send to them individually.  Mail is sent
one packet at a time.

Error codes:
  9 is used if the mail is too long or the user has sent or the
    recipient has recieved too many messages.
  A Means that the user has no permission to mail to that {CG}
  B Means no {CG} with the reference number given exists.

0043 0101 CID text   | First to last text of mail to be sent to sysid refno
0043 8101            | first - last message
     9101 "Mail to long" "Too many messages"
Errors: AB

0043 0201 | End of list packet
0043 8201 | last

0043 0104 GID text   | First to last text of mail to be sent to group refno
0043 8104            | first - last message
     9104 "Mail to long" "Too many messages"
Errors: AB

0043 0204 | End of list packet
0043 8204 | last

:&&:
0044:
  This requests a connection be set up to transfer data.  Not finished,
ignore for now.
  
0044 0002 UID [UID...] | Try to establish connect for data to user refno(s)
0044 8002              | somebody acpt
     9002 "Declined"
Errors: AB  E

0044 0005 AID    | Try to establish connect for data to appl refno
0044 8005        | somebody acpt
     9005 "Declined"
Errors: AB  E

0044 0012 UID    | Cancel connect for data to user refno
0044 8012        | Canceled
     9012 "Recipient Gone" "Connection Not Established"
Errors:     E

0044 0015 AID    | Cancel connect for data to Appl refno
0044 8015        | Canceled
     9015 "Recipient Gone" "Connection Not Established"
Errors:     E

0044 0100 text   | First to next to last packet of data
0044 8100        | accept
     9100 "Recipient Gone" "Connection Not Established"
Errors:     E

0044 0200 | End of list packet
0044 8200 | accept
     9200 "Recipient gone"
Errors:     E

:&&:
0045:
  This accepts a request for data transfer: not finshed, ignore for now.

0045 0000 UID   | Accept data transmission
0045 8000       | acept ok
     9000 "Sender gone"
Errors:  B  E

:&&:
0045:
  This declines a request for data transfer: not finshed, ignore for now.

0046 0000 UID   | Decline data transmission
0046 8000       | decline ok
     9000 "Sender gone"
Errors:  B  E

:&&:
0047:
  This set of packets is used for reading mail.  The first one sends all
new mail in bulk format, the second one send a particular message, and the
last one send from a particular message on, in bulk format.

Error codes:
  B Means no mail with the feature requested given exists.

0047 0000        | read new mail 
0047 8100 text   | fist - last
0047 8200        | Mail all sent
Errors:  B

0047 0010 messno | read messno
0047 8110 text   | fist - last
0047 8210        | Mail all sent
Errors:  B

0047 0020 messno | read mail from messno
0047 8120 text   | fist - last
0047 8220        | Mail all sent
Errors:  B

:&&:
0048:
  This packet delete's either all mail or a particular message.

Error codes:
  B Means no mail fitting the description required.

0048 0000        | delete all mail
0048 8000        | deleted
Errors:  B

0048 0010 messno | delete messno
0048 8010        | deleted
Errors:  B

0048 0020 messno | delete from messno on
0048 8020        | deleted
Errors:  B

:&&:
0049: 
  These packets get information on incoming and outgoing mail.  You ask
for incoming or outgoing, read or unread mail.  If there are any messages
that fit that type, you are given the nubmer(s) of the message(s).

Error codes:
  B Means no messages of that type exist.

0049 0010 | Get information on unread incoming mail
0049 8010 refno [refno...]
Errors:  B

0049 0020 | Get information on read incoming mail
0049 8020 refno [refno...]
Errors:  B

0049 0030 | Get information on unread outgoing mail
0049 8030 refno [refno...]
Errors:  B

0049 0040 | Get information on read outgoing mail
0049 8040 refno [refno...]
Errors:  B

:&&:
00F0:
  Theese are the user connection request packets.  This us used when
a user is first logging onto the system.  They send a name and
password, and recieve in return either the information on their cloverid,
or the information on there clover id and a detached session that that
cloverid owns.  The user can then attach or not as he/she wishes.
The information on the detached session will be null if there is no detached
session.


Error codes:
  9 is used the the name and password are wrong.
  D Means that The name or title give for the Cloverid was too long

00F0 0001 name passwd  | name and password for connection attempt
     8001 defname uname machine flags CID UID name blurb
          onsince lastinput flags  | detached on
     9001 "Invalid login attempt"
Errors:    D

:&&:
00F1:
  Once the user is connecte to the system, they use theese packets to
reattach to an old session, or to start a new session.

Error codes:
  A Means that the user has no permission to enter the system.
  B Means no detached session for that systemid exists.
  C Means that there is alread a User with that name in existance.
  D Means that The name or title for the user is too long.

00F1 0002 name blurb flags                 | data on new user
00F1 8002 UID                              | Login accept
Errors: A CD
 
00F1 0012       | reattach
00F1 8012 UID   | Login accept
Errors: AB

:&&:
00F8:
  These packets are for when the user wishes to leave the system.
They can either request detach, request to leave, or just say you are
leaving and wait till the system says go.  The middle route is more
polite. Users cannot be detached for more than 30 minutes.

Error codes:
  9 has a variety of meanings.
  E Means that the user isn't logged into the system yet.

00F8 0002 | user has detached
00F8 8002 | user detached
     9002 "Data send not finished" OR "Data recieve not finished"
          "Discussion not appointed" OR "Application not appointed"
          "Already have detached session"
Errors:     E

00F8 0012 | user wishes to stop
00F8 8012 | user stoped
     9012 "Data send not finished" OR "Data recieve not finished"
          "Discussion not appointed" OR "Application not appointed"
Errors:     E

00F8 0022 | user is going
00F8 8022 | user is gone.
