diff --git a/doc/Protocol-A.texi b/doc/Protocol-A.texi new file mode 100644 index 0000000000000000000000000000000000000000..43a280f6209872dba6153c532756d1459ecb0b4a --- /dev/null +++ b/doc/Protocol-A.texi @@ -0,0 +1,1980 @@ +\input texinfo @c -*-texinfo-*- +@c $Id: Protocol-A.texi,v 1.1 1996/01/13 16:38:27 byers Exp $ +@c %**start of header +@setfilename protocol-a.info +@settitle LysKOM Protocol A +@setchapternewpage odd +@c %**end of header +@iftex +@parindent 0pt +@end iftex + +@ifinfo +This is the specification of LysKOM Protocol A v. 8.0 + +Copyright @copyright{} 1995 Lysator ACS. + +Permission is granted to make and distribute verbatim copies of this +specification provided the copyright notice and this permission notice +are preserved on all copies. +@end ifinfo + +@titlepage +@sp 10 +@title{LysKOM Protocol A} +@sp 2 +@subtitle{Protocol version 8.0} +@sp 2 +@author by the LysKOM Developers + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1995 Lysator ACS + +Permission is granted to make and distribute verbatim copies of this document +provided the copyright notice and this permission notice are preserved on all +copies. + +Modified versions of this document may be redistributed with the added +condition that all modifications not cleared with the LysKOM development group +are clearly marked and that the entire modified work be redistributed under the +same conditions as the original. + +Permission is granted to copy and distribute translations of this manual into +another language under the same conditions as for modified versions. + +@end titlepage + +@ifinfo +@node Top, Overview, (dir), (dir) +@comment node-name, next, previous, up +This document specifies LysKOM Protocol A, version 8.0 + +@menu +* Overview:: +* Introduction:: +* Data Types:: +* Protocol Requests:: +* Asynchronous Messages:: +* Examples:: +@end menu +@end ifinfo + +@node Overview, Document Revision History, Top, Top +@chapter Overview + +LysKOM is a conferencing system@footnote{Or in modern terms, enabling +technology for Computer-Supported Cooperative Work (CSCW).}. Similar systems +were QZ-KOM and PortaCOM@footnote{Also known as ``PottaKOM'' and +``BortaKOM.''}. The LysKOM system is copyrighted by Lysator Academic Computing +Society and distributed under conditions of the GNU Public License. LysKOM and +its documentation is provided ``as is'' without warranty of any kind. + +This document specifies version 8.0 of protocol A used between a LysKOM client +and a LysKOM server. Anything described here as ``unspecified'' is liable to +change in future protocol versions. + +This specification is the work of several people. The main contributors have +been Per Cederqvist @code{<ceder@@lysator.liu.se>}, +@ifinfo +P�r +@end ifinfo +@iftex +P@"ar +@end iftex +Emanuelsson @code{<pell@@lysator.liu.se>}, Thomas Bellman +@code{<bellman@@lysator.liu.se>}, Lars Aronsson +@code{<aronsson@@lysator.liu.se>}, David Byers @code{<byers@@lysator.liu.se>}, +Linus Tolke @code{<linus@@lysator.liu.se>} and +@ifinfo +Kent Engstr�m +@end ifinfo +@iftex +Kent Eng@-str@"om@penalty-10000 +@end iftex +@code{<kent@@lysator.liu.se>}. + +The LysKOM developers can be reached by email to @code{lyskom@@lysator.liu.se}. + +@menu +* Document Revision History:: +* Protocol Revision History:: +* Protocol Design Principles:: +* Notation:: +@end menu + +@node Document Revision History, Protocol Revision History, Overview, Overview +@section Document Revision History + +@table @asis +@item 8.0: 1995-11-10 +Protocol version 8 is being documented. This specification was translated to +English and converted to Texinfo by David Byers. + +@item 7.1: 1995-01-08. +Protocol and document revision history were added by Per Cederqvist. Outline +mode was used to make the document more manageable. This version was +distributed with lyskomd 1.7.1. + +@item 7.0: 1994-12-31. +The first specification with a version number. All calls that had been added +since 1991-06-25 were documented. Pell and Per Cederqvist did the deed. This +version was distributed with lyskomd 1.7.0. + +@item 1993-05-19. +Linus Tolke wrote comments for some calls that were without comments. + +@item 1992-07-06. +Linus Tolke converted the document to ISO 8859-1. + +@item 1991-08-12. +Per Cederqvist started using version control for documentation. + +@item 1991-06-25. +Lars Aronsson documented the protocol that was in use at the time. +@end table + +@node Protocol Revision History, Protocol Design Principles, Document Revision History, Overview +@section Protocol Revision History + +@subsection Protocol version 8.0 + +@table @asis +@item Added Functionality +@itemize @bullet +@item +30=add-recipient: Can change recpt to cc_recpt and vice versa. +@item +21=set-conf-type: Accepts Conf-Type and Extended-Conf-Type. +@item +10=create-conf: Accepts Conf-Type and Extended-Conf-Type. +@end itemize + +@item New Commands +@itemize @bullet +@item +77=set-last-read +@item +78=get-uconf-stat +@end itemize +@end table + +@subsection Protocol version 7 (first implemented in lyskomd 1.7.0) + +@table @asis +@item Added Functionality +@itemize @bullet +@item +53=send-message: Recipient can be a conference or a person. +@end itemize + +@item New Commands +@itemize @bullet +@item +74=re-z-lookup +@item +75=get_version_info +@item +76=lookup_z_name +@end itemize + +@item Other +@itemize @bullet +@item +Det asynkrona meddelanded 1=i-am-off has been removed +@end itemize +@end table + +@subsection Protocol Version 6 (first implemented in lyskomd 1.4.0) + +@table @asis +@item New Calls +@itemize @bullet +@item +67=lookup_person +@item +68=lookup_conf +@item +69=set_client_version +@item +70=get_client_name +@item +71=get_client_version +@item +72=mark_text +@item +73=unmark_text +@end itemize +@end table + + +@subsection Protocol Version 5 (first implemented in lyskomd 1.3.0) + +@table @asis +@item New Calls +@itemize @bullet +@item +65=re_lookup_person +@item +66=re_lookup_conf +@end itemize +@end table + +@subsection Protocol Version 4 (first implemented in lyskomd 1.1.1) + +@table @asis +@item New Calls +@itemize @bullet +@item +62=login +@item +63=who_is_on_ident +@item +64=get_session_info_ident +@end itemize +@end table + +@subsection Protocol Version 3 (first implemented in lyskomd 1.1.0) + +@table @asis +@item New Calls +@itemize @bullet +@item +61=find_previous_text_no +@item +60=find_next_text_no +@item +59=create_anonymous_text +@item +58=get_last_text +@end itemize +@end table + +@subsection Protocol Version 2 (first implemented in lyskomd 0.30.0) + +@table @asis +@item New Calls +@itemize @bullet +@item +57=set_user_area +@end itemize +@end table + +@subsection Protocol Version 1 (first implemented in lyskomd 0.29.2) + +@table @asis +@item New Calls +All calls from 0--56. +@end table + + +@node Protocol Design Principles, Notation, Protocol Revision History, Overview +@section Transport Protocol Requirements + +LysKOM protocol A can be run on top of any reliable, bidirectional, +8-bit data stream. All current implementations use TCP/IP. At Lysator +port 4894 is used on the host @code{kom.lysator.liu.se}. + +Data in protocol A is ASCII clear text except within hollerith strings, where +arbitrary eight-bit characters are allowed. Data arguments are separated by +whitespace. The reason for this unorthodox design is that the protocol should +be usable from a text-only terminal, something that is very useful during +server and early client development. + + +@node Notation, , Protocol Design Principles, Overview +@section Notation + +This specification uses a BNF-like grammar to describe the protocol and its +data elements. It does not use ASN.1 because we don't know ASN.1 and probably +wouldn't like it very much even if we did. + +Data fields have been given names that start with a lower-case letter. Data +types have names that start with an upper-case letter. The operator @code{::=} +defines the name to its left and @code{:} (a colon) specifies a type. Comments +start with @code{!} (exclamation mark) and alternatives are separated by a +@code{|} (vertical bar.) A @code{;} (semicolon) terminates statements in the +grammar. In some specifications there are literal strings. There is to be no +whitespace before or after literal strings unless there is whitespace in the +literal itself. + + +@node Introduction, , , Top +@chapter Introduction + +This chapter introduces the concepts used in LysKOM, such as articles, +conferences and sessions. + +@menu +* Articles :: +* Conferences :: +* Persons and Sessions :: +* The Misc-Info List :: +* Security :: +* Membership and Reading:: +* Client-Server Dialog :: +@end menu + + +@node Articles, Conferences, , Introduction +@section Articles + +An article is represented as a value of the type @code{Text-Stat} and a +string containing the article contents. An article will usually have one +or more recipients and may be a comment or footnote to other +articles. Each article is kept in the database until it is older than +the @code{nice} value of each of its recipients and it is not marked by +any user. + +Currently there is a structure called a @code{Misc-Info-List} associated with +the @code{Text-Stat}. This list contains information about recipients, +senders, comments and footnotes. In the future the information contained in +the @code{Misc-Info-List} will be integrated into the @code{Text-Stat}. + +Every article has at least one number, the global article number. Global +numbers are assigned in ascending order to new articles, and are never +reused. If an article has recipients it will also have a local number for each +recipients. Local numbers are used in some data structures to provide more +compact storage and to provida an ordering of articles for a particular +recipient. Local numbers are assigned in ascending order and are never reused +for a particular recipient, though different recipients will have articles +with the same local numbers. + +Occasionally it is necessary to map between local and global numbers. The +server call @code{get-map} does this. + + + +@node Conferences, Persons and Sessions, Articles, Introduction +@section Conferences + +Conferences hold articles. They are represented in the protocol as a data type +called @code{Conference}. Each conference has a @emph{creator}, the person who +created the conference, and a @emph{supervisor}, a conference whose members can +modify the conference. If the supervisor is a person, the members of that +person's letterbox are supervisors, which in most cases is only that person. +We have also introduced a type called @code{UConference} (pronounced +micro-conf-stat) which holds a subset of the information contained in the full +@code{Conference} type. Use the @code{UConference} type whenever possible since +it places a much smaller load on the LysKOM server. + +Each conference has a type, which is essentially a collection of boolean +flags. Currently the types @code{rd-prot}, @code{letterbox}, +@code{secret}, @code{original} and @code{anarchy} are defined. + +@table @code +@item rd-prot +The conference is protected from reading by non-members. Persons become +members by having one of the existing members or supervisors add him or +her to the conference. This restriction is enforced by the server. +@item original +Conferences of this type are intended for original articles +only. Comments are to be redirected to the super-conference +instead. This restriction is currently not enforced by the server; +clients must implement this functionality. +@item letterbox +Conferences of this type are connected to persons. Letters to a person are +sent to the letterbox and the name of the letterbox is synchronised with the +person name. It is currently not possible to explicitly set or clear this flag +on a conference. +@item secret +Conferences of this type are secret. The server will not divulge any +information of the existence of the conference to persons who are not +members or supervisors of the conference. If a letterbox is made secret, +that person cannot log in using the person name, but must specify a +person number instead. +@item anarchy +Conferences of this type accept anonymous articles. Other conferences will +reject anonymous articles. This restriction is currently not enforced by the +server, but will be soon. +@end table + + + +@node Persons and Sessions, The Misc-Info List, Conferences, Introduction +@subsection Persons and Sessions + +Persons are represented in the protocol by values of the type +@code{Person}. Associated with persons are statistics, a set of personal flags +and a set of privileges (@pxref{Security}.) Persons are also associated with a +conference that has the same number as the person and the @code{letterbox} bit +set. + +Connections to the server are represented as values of the type +@code{Session-Info-Ident} or @code{Session-Info}. Sessions have session number +that are unique for each session in the lifetime of the server execution. A +single user can have several sessions running at once. The session is not +released until the network connection is closed; a user can log in and out +repeatedly in a single session. + + +@node The Misc-Info List, Security, Persons and Sessions, Introduction +@section The Misc-Info List + +The @code{Misc-Info} list contains tagged data. The fields are sent in groups +pertaining to a particular type of information: information about recipient; +carbon copy recipient, comment to; footnote to; comment in and footnote in. The +information groups may be sent in any order and there may be any number of +groups. Within each group the elements are always sent in the order listed +below. + +@subsubsection Recipient + +@table @code +@item recpt +Starts a recipient group. It contains the conference number of a recipient of +the article. +@item loc-no +Always present within a recipient group. It contains the local text number of +the article in the conference specified by the preceding @code{recpt} field. +@item rec-time +If the recipient is a person, this element is added by the server when the +recipient marks the article as read. It contains the time when the text was +read. +@item sent-by +Present when the recipient was added by a person other than the author (after +the article was created.) It contains the person number of the person who added +the recipient. +@item sent-at +Present when the recipient was added after the article was created. It contains +the time when the recipient was added. +@end table + + +@subsubsection Carbon Copy (CC) Recipient + +The carbon-copy recipient group is identical to the recipient group above. The +difference is how new comments to an article with a recipient or carbon-copy +recipient are treated. A comment to an article is sent to all recipients, but +not to carbon-copy recipients of the original article. + +@table @code +@item cc-recpt +Starts a carbon-copy recipient group. It contains the conference number of a +carbon-copy recipient of the article. +@item loc-no +Always present in a CC recipient group. It contains the local text number of +the article in the conference specified by the most recent @code{cc-recpt} +field. +@item rec-time +Present after the CC recipient has read the article. It contains the time when +the article was read. +@item sent-by +Present when a CC recipient was added by a person other than the author +after the article had been created. It contains the person number of the +person who added the cc recipient. +@item sent-at +Present when a CC recipient was added after the article had been +created. It is the time when the CC recipient was added. +@end table + + +@subsubsection Comment To + +@table @code +@item comm-to +Always present when the article is a comment to another article. +@item sent-by +Present when the article was added as a comment by a person other than +the author, after the article had been created. It contains the person +number of the person who added the article as a comment. +@item sent-at +Present when the article was added as a comment after the article had +been created. It contains the time when is was added as a comment. +@end table + + +@subsubsection Footnote To + +@table @code +@item foot-to +Always present when the article is a footnote to another article. +@item sent-at +Present when the article was added as a footnote after the article had +been created. It contains the time when is was added as a footnote. +@end table + + +@subsubsection Comment in + +@table @code +@item comm-in +Present when there are comments to this article. It contains the article +number which is a comment to this article. +@end table + + +@subsubsection Footnote in + +@table @code +@item foot-in +Present when there are footnotes to this article. It contains the +article number which is a footnote to this article. +@end table + + +@node Security, Membership and Reading, The Misc-Info List, Introduction +@subsection Security + +Security in LysKOM is based on two components. Each person has a set of +privileges and each session has a security level. Rights in the system +require both the sufficient privileges and a sufficient security +level. The privileges currently available are wheel, admin, statistic, +create-conf, create-pers and change-name. Security levels range from 0 +to 255. + + +@table @code +@item wheel +@emph{Normally not assigned} +@table @asis +@item Level 0 +Person may always log in, even when LysKOM is crowded. +@item Level 6 +Person may set Priv-Bits for all persons. +@item Level 7 +Person may set password for all persons. +@item Level 8 +Person acts as supervisor for everything. +@item Level 10 +Person can read all articles. +@end table + +@item admin +@emph{Normally not assigned} +@table @asis +@item Level 1 +Shut down the server@* +Set motd_of_kom@* +Read last_login +@item Level 2 +Read status of secret conferences and persons@* +Read the protected parts of person and conference statuses@* +Read the entire text status, even when there are secret recipients +@item Level 3 +Change everybody's names +@item Level 4 +Add/remove members@* +Add/remove recipients to articles +@item Level 5 +Set super-conference@* +Remove articles +@item Level 6 +Set administrator +@end table + +@item statistic +@emph{Normally not assigned} +@table @asis +@item Level 2 +Read the statistics portions of persons, even if protected +@end table + +@item create_conf +@emph{Normally assigned} +@table @asis +@item Level 0 +Create conferences +@end table + +@item create_pers +@emph{Normally assigned} +@table @asis +@item Level 0 +Create persons +@end table + +@end table + + +@node Membership and Reading, Client-Server Dialog, Security, Introduction +@section Membership and Reading + +Persons' memberships in conferences are represented in the protocol as arrays +of @code{Membership}-typed values. This structure contains a record of what +the person has read in that conference. + +The first part of the record is the @code{last-text-read} field. It contains +the highest local text number such that the person has read every text with an +equal or lower local number. The second part of the record is the +@code{read-texts} array, which contains the local text numbers higher than +@code{last-text-read} that are also read. + +Finding out which articles a person has read in a particular conference +requires a few calls. Normally, a client will retrieve a batch of perhaps 50 +articles at a time. The outline of the process is as follows: + +@enumerate +@item Fetch the membership to get the @code{last-text-read} +@item Translate 50 local numbers starting as @code{last-text-read} to global +numbers. +@item Remove the local numbers that are in @code{read-texts} from the result +@item Get and translate more texts as needed. +@end enumerate + +The process is complicated because of the translation between local and global +text numbers. In the future there will hopefully be a single call that does +this work in the server. + + +@node Client-Server Dialog, ,Membership and Reading , Introduction +@section Client-Server Dialog + +The client-server dialog consists of two phases, establishing the connection +and the LysKOM session itself. + +@subsection Connecting to the Server + +A connection to the server is initiated by connecting to the appropriate +network port@footnote{The default port for a LysKOM server is 4894} and sending +a single letter which is used to select a protocol version followed by +connection information required by that protocol. In protocol A the connection +information is a Hollerith string saying who the user connecting is followed +by a hewline character. + +When the server has accepted the connection its reply is +protocol-dependent. Protocol A servers will reply with the string +@code{LysKOM} on a single line. + +@example + % telnet kom.lysator.liu.se + Trying 130.236.254.151 ... + Connected to varg.lysator.liu.se. + Escape character is '^]'. + A5Hbyers + LysKOM +@end example + +After connecting, calls to the server can be made. Most calls require the user +to log in, but some calls can be made without a log-in. Calls to the server +are made by sending a reference number followed by the call as specified. + +@example + server-call ::= + ( ref-no : INT32; + request : Protocol-Request; + ) +@end example + +At some future point the server will reply with the result of the request or +an error code preceded by an indicator and the reference number. + +@example + server-reply ::= ok-reply | error-reply; + + ok-reply ::= + ( "=" + ref-no : INT32; + reply-data; + ) + + error-reply ::= + ( "%" + ref-no : INT32; + error-no : Error-No; + error-statuc : INT32; + ) + + error-no ::= INT32; +@end example + +Our notation is not flexible enough to specify the two-way nature of the +communication. @code{ref-no} in the reply is always the same as @code{ref-no} +in the corresponding request. @code{reply-data} depends on which request was +made and is specified together with each request. + +Please note that there is no whitespace after the initial indicator in the +reply. + + +@node Data Types, , , Top +@chapter Data Types + +The data types in protocol A come in two flavors. The first (vanilla) are the +simple data types from which the LysKOM (chocolate) data types are +built. Simple data types include things like integers and strings while +complex data types include things such as conferences and people. + +@menu +* Simple Data Types:: +* LysKOM Data Types:: +@end menu + +@node Simple Data Types, LysKOM Data Types, Data Types, Data Types +@section Simple Data Types + +Data elements are sent from client to server separated by one or more ASCII +spaces (0x20), tab characters (0x09), line feeds (0x0A) or carriage returns +(0x0D.) In messages from server to client the data elements are separated by +exactly one space character and the entire message terminated with a line +feed. + + +@subsection Integers + +@dfn{INT32}, @dfn{INT16}, @dfn{INT8} and @dfn{BOOL} are non-negative integers +which must fit in 32, 16, 8 and 1 bits, respectively. They are transmitted to +the server in ASCII-encoded decimal notation. + + +@subsection Strings + +@dfn{HOLLERITH} denotes character strings of arbitrary length. They are +transmitted as @code{<n>H<text>} where @code{<text>} is the string and +@code{<n>} is the number of characters in @code{<text>} in decimal +notation. All byte values are allowed in the string itself, including nulls. + + + +@subsection Bit Strings + +@dfn{BITSTRING} is a string of bits, commonly used for a set of boolean-valued +flags. Bit strings are denoted as + +@example + BITSTRING ( name-1; name-2; name-3; ... ) +@end example + +in this specification. They are transmitted as a sequence of ASCII ones and +zeroes in the order the fields are listed. + +For instance, given the specification + +@example + shape-of-world : BITSTRING ( + is-flat; + is-round; + is-2d; + is-3d; + ) +@end example + +most peoples idea of @code{shape-of-world} would be sent as @code{0101} (round +and three-dimensional.) + + +@subsection Arrays + +@dfn{ARRAY} is a list of a fixed number of elements of a single type. The +specification for an array is @code{ARRAY <type>} where @code{<type>} is the +type of the array elements. + +Arrays are transmitted as an @code{<n> @{ <element> <element> ... @}} where +@code{<n>} is the number of elements and each @code{<element>} is an element +of the array. A special case is when the array is empty, in which case it is +transmitted as @code{0 *}. + +In some calls the client can ask the server not to send the array contents, +only its length. In these cases the array is transmitted as @code{<n> *} where +@code{<n>} is the number of elements in the array. + + +@subsection Selection + +@dfn{SELECTION} is tagged data. It consists of an INT32 selector followed by a +tail of an arbitrary type and is specified as + +@example + SELECTION ( + <n>=<name> <tail> : <type>; + <n>=<name> <tail> : <type>; + ... + ) +@end example + +where each @code{<n>} is the selector value, @code{<name>} the selector name +and @code{<tail>} the name of the selector tail and @code{<type>} its type. + +When transmitted, the selector is transmitted as an INT32 followed by the tail +belonging to that selector. For instance, given the specification + +@example + phrase : SELECTION ( + 1=hello name : HOLLERITH; + 2=howdy ; + ) +@end example + +two legal messages of the type @code{phrase} are @samp{1 4HJohn} and @samp{2}. + + +@subsection RPC + +@dfn{RPC} is a notation used to specify calls to the server. An RPC +specification has the following form: + +@example + RPC ( + <call> [<n>] ( <request> ) -> <reply> ; + <call> [<n>] ( <request> ) -> <reply> ; + ) +@end example + +where each @code{<call>} is the name of a call, @code{<n>} is the call number, +@code{<request>} is a single data element sent as a request and @code{<reply>} +is a single data element sent in reply from the server. + +RPC calls are trasmitted as @code{<n> <request>} where @code{<n>} and +@code{<request>} have the same meaning as above. Note that in the client-server +dialog a reference number must also be supplied with each request. This +reference number is not part of the RPC itself, but is required for +communications @xref{Client-Server Dialog}. + + + +@subsection Structure + +Structures are collections of several data items. In the specification they +are written as + +@example + ( <name> : <type> ; + <name> : <type> ; + ... + ) +@end example + +where each @code{<name>} is the name of a data field and the corresponding +@code{<type>} is its type. + +Structures are transmitted as a sequence of their fields. + + +@node LysKOM Data Types, , Simple Data Types, Data Types +@section LysKOM Data Types + +In this section the data types specific to LysKOM are defined. Most of these +will probably make very little sense until you know what calls there are. This +section does not include the server calls or asynchronous messages, even +though these are also data types. + +Since the types defined here are all based on the simple types, the +definitions are more concise in this section. + +@subsection Common Types + +The types defined in this section are fairly simple and used in many of the +more complex data types. + +@subsubsection Time + +@example + Time ::= + ( seconds : INT32; + minutes : INT32; + hours : INT32; + day : INT32; + month : INT32; + year : INT32; + day-of-week : INT32; + day-of-year : INT32; + is-dst : BOOL; + ) +@end example + +@code{Time} is used to specify times in several data structures. The fields +@code{seconds}, @code{minutes} and @code{hours} give wall clock time. +@code{day} is the day of month and @code{month} is the current month, starting +with zero for January. @code{year} is the number of years since +1900. @code{day-of-week} is the current weekday, with zero used for +Sunday. @code{day-of-year} is how many days of the year have passed starting +with zero and @code{is-dst} is true when the time indicated is daylight +savings time. + +When the server receives a @code{Time} structure from a client it ignores the +@code{day-of-week} and @code{day-of-year} fields. + +All times are expressed in the time zone of the server. + +@subsubsection Conference Numbers + +@example + Conf-No ::= INT16; + Conf-No-List ::= ARRAY Conf-No +@end example + +These two types denote conference numbers. @code{Conf-No} is used when only a +single number is permitted and @code{Conf-No-List} when multiple conference +numbers can be specified. + + +@subsubsection Text Numbers + +@example + Text-No ::= INT32; + Local-Text-No ::= INT32; + Text-List ::= + ( first-local-no : Local-Text-No; + texts : ARRAY Text-No; + ) +@end example + +These three types are used to indicate articles in the LysKOM +database. @code{Text-No} is a global text number and @code{Local-Text-No} a +local text number. @code{Text-List} is used when a mapping from local to +global numbers are required. + +@subsubsection Person and Session Numbers + +@example + Pers-No ::= Conf-No; + Pers-List ::= ARRAY Pers-No; + Session-No ::= INT32; +@end example + +@code{Pers-No} is used to indicate a person and @code{Pers-List} to indicate +several. @code{Session-No} is used in a few data structures relating to +information about active LysKOM sessions. + + + +@subsection Conference Types + +@example + Conf-Type ::= BITSTRING + ( rd_prot; + original; + secret; + letterbox; + ) + + Extended-Conf-Type ::= BITSTRING + ( rd_prot; + original; + secret; + letterbox; + anarchy; + reserved1; + reserved2; + reserved3; + ) + + Any-Conf-Type ::= Conf-Type | Extended-Conf-Type; +@end example + +These types are used to specify the type of a conference. @code{Conf-Type} is +used in data types and calls that were created before version 8.0 of the +protocol and has been augmented in @code{Extended-Conf-Type}. The type +@code{Any-Conf-Type} is used when either is admissible. + +The bits have the following meaning (@pxref{Conferences}, for more info.) + +@table @code +@item rd_prot +If unset anyone can add themselves as members to the conference. + +@item original +If set, comments are not allowed in the conference. + +@item secret +If set the conference is secret. It's existence will only be revealed to +members and supervisors. + +@item letterbox +Set if the conference is a person's mailbox. + +@item anarchy +Set if anonymous articles are allowed in the conference. + +@item reserved1 +@itemx reserved2 +@itemx reserved3 +Reserved for future use. The values of these bits should be never be modified +or used by clients who do not know their meaning. When a new conference is +created these should always be set to zero. +@end table + + +@subsection Conference Search Results + +@example + Conf-Z-Info ::= + ( name : HOLLERITH; + type : Conf-Type; + conf_no : Conf_no; + ) + + Conf-Z-Info-List ::= ARRAY Conf-Z-Info; +@end example + +These types are used for the result of some calls that search for conferences +based on their names. + + +@subsection Conference Status Types + +@example + Garb-Nice ::= INT32; + + Conference ::= + ( name : HOLLERITH; + type : Conf-Type; + creation-time : Time; + last-written : Time; + creator : Pers-No; + presentation : Text-No; + supervisor : Conf-No; + permitted-submitters : Conf-No; + super-conf : Conf-No; + msg-of-day : Text-No; + nice : Garb-Nice; + no-of-members : INT16; + first-local-no : Local-Text-No; + no-of-texts : INTEGER; + ) + + UConference ::= + ( name : HOLLERITH; + type : Extended-Conf-Type; + highest-local-no : Local-Text-No; + nice : Garb-Nice; + ) +@end example + +These three types are used to specify information about a +conference. @code{Garb-Nice} is a quantity used to specify how long articled +are kept in a conference before being removed. @code{Conference} is the full +information about a conference and @code{UConference} is brief information +about a conference. + +The fields of @code{Conference} are + +@table @code +@item name +The name of this conference. +@item type +The type of the conference. +@item creation-time +The date and time when the conference was created. +@item last-written +The date when something was last written in the conference. +@item creator +The person who created the conference. +@item presentation +The article containing the conference presentation or zero if the conference +has no presentation. +@item supervisor +The conference@footnote{The @code{supervisor} may be a person, in which case +the members of that person's letterbox become supervisors.} who supervises this +conference. +@item permitted-submitters +The conference whose members@footnote{@code{permitted-submitters} can be a +person, in which case all persons who are members of the associated letterbox +are allowed to submit articles to the conference.} may submit articles to the +conference, or zero if anyone may do so. +@item super-conf +The conference that receives comments if this conference does not accept +them. Zero means the author of the comment in question. +@item msg-of-day +The conference notice, if any. +@item nice +The number of days an article should be kept before being removed from the conference. +@item no-of-members +The number of members of this conference. +@item first-local-no +The local number of the oldest existing article in the conference. +@item no-of-texts +The number of articles in the conference. +@end table + +The fields of @code{UConference} are + +@table @code +@item name +The name of this conference. +@item type +The conference type. Note that this is an extended conference type, unlike the +type field of @code{Conference}. +@item highest-local-no +The local number of the newest article in the conference. +@item nice +The number of days an article should be kept before being removed from the conference. +@end table + + +@subsection Server Information + +@example + Info ::= + ( version : INT32; + conf-pres-conf : Conf-No; + pers-pres-conf : Conf-No; + motd-conf : Conf-No; + kom-news-conf : Conf-No; + motd-of-lyskom : Text-No; + ) +@end example + +This data type contains information about the LysKOM server. The fields are + +@table @code +@item version +The server version encoded as a number @code{aabbcc} where @code{aa} is the +major version number, @code{bb} the minor number and @code{cc} the secondary +minor version. For instance, @code{10607} is version 1.6.7 of the server. If +greater than 10699 the @code{get-version-info} should be used instead. +@item conf-pres-conf +The conference that contains conference presentations. +@item pers-pres-conf +The conference that contains person presentations. +@item motd-conf +The conference that contains conference and person notices. +@item kom-news-conf +The conference that contains news about LysKOM. +@item motd-of-lyskom +The number of an article to display when LysKOM is entered or zero if there is +none. +@end table + + +@subsection Person Status Types + +@example + Person ::= + ( username : HOLLERITH; + privileges : Priv-Bits; + flags : Personal-Flags; + last-login : Time; + user-area : Text-No; + total-time-present : INT32; + sessions : INT32; + created-lines : INT32; + created-bytes : INT32; + read-texts : INT32; + no-of-text-fetches : INT32; + created-persons : INT16; + created-confs : INT16; + first-created-local-no : INT32; + no-of-created-texts : INT32; + no-of-marks : INT16; + no-of-confs : INT16; + ) + + Personal-Flags ::= BITSTRING + ( unread-is-secret; + flg2; + flg3; + flg4; + flg5; + flg6; + flg7; + flg8; + ) + + + Priv-Bits ::= BITSTRING + ( wheel; + admin; + statistic; + create_pers; + create_conf; + change_name; + flg7; + flg8; + flg9; + flg10; + flg11; + flg12; + flg13; + flg14; + flg15; + flg16; + ) +@end example + +These types are used to specify information about persons. @code{Person} +contains the information about a person, @code{Personal-Flags} contains flags +set by the user and @code{Priv-Bits} contains the person's privileges. + +The fields of @code{Person} are + +@table @code +@item username +The name of the user. +@item privileges +The privileges of the person. +@item flags +Flags set by the user. +@item last-login +The time when the person last logged on. +@item user-area +The text number of the person's user area or zero if the person has no +user area. +@item total-time-present +The number of seconds the person has been using LysKOM. +@item sessions +The number of sessions the person has initiated. +@item created-lines +The number of lines of articles the person has written. +@item created-bytes +The number of characters the person has written. +@item read-texts +The number of articles the person has read. +@item no-of-text-fetches +The number of texts the person has retrieved from the server. +@item created-persons +The number of other persons this person has created. +@item created-confs +This holds the number of conferences created by the person. +@item first-created-local-no +The local number of the earliest existing article written by the person. The +local number applies to a local-to-global mapping containing all articles +written by the person. +@item no-of-created-texts +This holds the number of articles written by the person. +@item no-of-marks +The number of marked texts this person has. +@item no-of-confs +The numer of conferences the person is a member of. +@end table + + +@subsection Membership Information + +@example + Member ::= Pers-No; + Member-List ::= ARRAY Member; + + Membership ::= + ( last-time-read : Time; + conference : Conf-No; + priority : INT8; + last-text-read : Local-Text-No; + read-texts : ARRAY Local-Text-No; + ) + + Membership-List ::= ARRAY Membership; +@end example + +These data types contain information about which conferences a person is a +member of and what that person has unread in the conference. @code{Member} +represents a member and @code{Member-List} several. @code{Membership} is +information pertaining to the membership of a single person. Its fields are + +@table @code +@item last-time-read +The time when the person last read anything from the conference. +@item conference +The conference this membership data pertains to. +@item priority +The priority the person has assigned to the conference. The hihger the number, +the higher the priority. In the future, priority zero will be used to indicate +a passive membership. +@item last-text-read +The local number of last text read in the conference. +@item read-texts +Additional texts beyond @code{last-text-read} that have also been read. +@end table + + +@subsection Article Marks + +@example + Mark ::= + ( text-no : Text-No; + type : INT8 + ) + + Mark-List ::= ARRAY Mark; +@end example + +These data types hold information about a person's marks on +articles. @code{Mark} holds information on a single mark and @code{Mark-List} +on several. + +The fields of @code{Mark} are + +@table @code +@item text-no +The text number marked. +@item type +The mark value. +@end table + +Before version eight of protocol A, the meaning of the mark value was +unspecified. Work is underway to specify the meaning of certain mark values. + + + +@subsection Article Information + +@example + Misc-Info ::= SELECTION + ( 0=recpt recipient : Conf-No; + 1=cc-recpt cc-recipient : Conf-No; + 2=comm-to comment-to : Text-No; + 3=comm-in commented-i : Text-No; + 4=footn-to footnote-to : Text-No; + 5=footn-in footnoted-in : Text-No; + 6=loc-no local-no : Local-Text-No + 7=rec-time received-at : Time; + 8=sent-by sender : Pers-No; + 9=sent-at sent-at : Time; + ) + + Text-Stat ::= + ( creation-time : Time; + author : Pers-No; + no-of-lines : INTEGER; + no-of-chars : String-Size; + no-of-marks : INT16; + misc-info : ARRAY Misc-Info; + ) +@end example + +These two structures contain information about a single +article. @code{Text-Stat} contains core information about the article and +@code{Misc-Info} contains miscellaneous information related to the article. +In the future, @code{Misc-Info} will become obsolete and @code{Text-Stat} +will be extened with more information. + +A @code{Text-Stat} consists of the following: + +@table @code +@item creation-time +The time when the article was created. +@item author +The author of the article. +@item no-of-lines +The number of lines in the article. +@item no-of-chars +The number of characters in the article. +@item no-of-marks +The number of marks added to this article by persons. +@item misc-info +The @code{Misc-Info} list for this article. +@end table + +@code{Misc-Info}, when sent to the client, is sent in a particular order +(@pxref{The Misc-Info List}. The variants @code{Misc-Info} are (briefly): + +@table @code +@item recpt +Used to specify recipients of the article. +@item cc-recpt +Specifies recipients who have received a copy of the article but who will +not receive comments. +@item comm-to +Specifies an article this article is a comment to. +@item comm-in +Specifies an article in which there are comments to this article. +@item footn-to +Specifies an article this article is a footnote to. +@item footn-in +Specifies an article to which this article is a footnote. +@item loc-no +Specifies the local text number of this article in the conference specified by +@code{recpt} or @code{cc-recpt}. +@item rec-time +Specifies the time when this article was received by the conference specified +by @code{recpt} or @code{cc-recpt}. +@item sent-by +Specifies who sent this article to the conference specified by @code{recpt} or +@code{cc-recpt}. +@item sent-at +Specifies when the article was sent to the conference specified by +@code{recpt} or @code{cc-recpt}. +@end table + + +@subsection Who Information + +@example + Who-Info-Old ::= + ( person : Pers-No; + what-am-i-doing : HOLLERITH; + working-conference : Conf-No; + ) + + Who-Info-List-Old ::= ARRAY Who-Info-Old; + + Who-Info ::= + ( person : Pers-No; + working-conference : Conf-No; + session : Session-No; + what-am-i-doing : HOLLERITH; + username : HOLLERITH; + ) + + Who-Info-List ::= ARRAY Who-Info; + + Who-Info-Ident ::= + ( person : Pers-No; + working-conference : Conf-No; + session : Session-No; + what-am-i-doing : HOLLERITH; + username : HOLLERITH; + hostname : HOLLERITH; + ident-user : HOLLERITH; + ) + + Who-Info-Ident-List ::= ARRAY Who-Info-Ident; +@end example + +These structures are used to retrieve and set information on who is currently +using LysKOM. The types marked as ``old'' are obsolete but are included for +completeness. @code{Who-Info-Old} identifies a user who is currently using +LysKOM and @code{Who-Info-List-Old} identifies several. @code{Who-Info} is +used to set information about a session and is returned by one obsolete +call. @code{Who-Info-Ident} is the preferred data type to use. + + +The fields of @code{Who-Info-Old} are +@table @code +@item person +The person the information is about. +@item what-am-i-doing +A client-supplied string saying what the person is doing. +@item working-conference +The conference the person is currently in. +@end table + +The fields of @code{Who-Info} are +@table @code +@item person +The person the information is about. +@item working-conference +The conference the person is currently in. +@item session +The person's session number. +@item what-am-i-doing +A client-supplied string saying what the person is doing. +@item username +The name of the ``real'' user constructed from @code{hostname} and +@code{ident-user} (see below) and information from the client. +@end table + + + +The fields of @code{Who-Info-Ident} are +@table @code +@item person +The person the information is about. +@item working-conference +The conference the person is currently in. +@item session +The person's session number. +@item what-am-i-doing +A client-supplied string saying what the person is doing. +@item username +The name of the ``real'' user constructed from @code{hostname} and +@code{ident-user}. +@item hostname +The host the connection originated at. +@item ident-user +The user name according to the Ident +@ifinfo +daemon +@end ifinfo +@iftex +d@ae{}mon +@end iftex + at the user's machine or ``unknown'' if Ident was not used. +@end table + + + +@subsection Session Information +@example + Session-Info ::= + ( person : Pers-No; + working-conference : Conf-No; + session : Session-No; + what-am-i-doing : HOLLERITH; + username : HOLLERITH; + idle-time : INTEGER; + connection-time : Time; + ) + + Session-Info-Ident ::= + ( person : Pers-No; + working-conference : Conf-No; + session : Session-No; + what-am-i-doing : HOLLERITH; + username : HOLLERITH; + hostname : HOLLERITH; + ident-user : HOLLERITH; + idle-time : INTEGER; + connection-time : Time; + ) +@end example + +These data types give information about a particular LysKOM +session. @code{Session-Info} has been superseded by @code{Session-Info-Ident} +but is documented here for completeness. + +The fields of @code{Session-Info} are +@table @code +@item person +The person using this session. +@item working-conference +The conference the session is currently in. +@item session +The number of this session. +@item what-am-i-doing +A client-supplied string saying what the person is currently doing. +@item username +The name of the ``real'' user (see @code{Who-Info} above.) +@item idle-time +The number of seconds since the last server call. +@item connection-time +The time when the connection was initiated. This is not the same as the amount +of time the person has been on. +@end table + +The fields of @code{Session-Info-Ident} are +@table @code +@item person +The person using this session. +@item working-conference +The conference the session is currently in. +@item session +The number of this session. +@item what-am-i-doing +A client-supplied string saying what the person is currently doing. +@item username +The name of the ``real'' user (see @code{Who-Info-Ident} above.) +@item hostname +The host the connection originated at. +@item ident-user +The user name accoring to the Ident +@ifinfo +daemon +@end ifinfo +@iftex +d@ae{}mon +@end iftex +at the user's machine or ``unknown'' +if Ident was not used. +@item idle-time +The number of seconds since the last server call. +@item connection-time +The time when the connection was initiated. This is not the same as the amount +of time the person has been on. +@end table + +@node Protocol Requests, , , Top +@chapter Protocol Requests + +This chapter deocuments all calls that can be made to the server. All calls +are annoted with the protocol version in which they appeared and their current +status, which is one of + +@table @samp +@item Experimental +The call is experimental. No client should rely on the existence of this +call. Experimental calls that are useful will often become recommended in +future versions. +@item Recommended +The call is a standard call. Clients are recommended to use these calls rather +than experimental or obsolete ones. Servers are required to implement all +recommended calls. +@item Obsolete +The call should no longer be used by clients. Servers should implement these, +or they will be incompatible with old client versions. +@end table + +@menu + Call Name Ststus Description Number +------------------------------------------------------------------------------- +* login-old:: O Log in to LysKOM. Call 62 is preferred (0) +* logout:: Log out. Call 62 to log in again (1) +* pepsi:: Change current conference (2) +* change-name:: Change name of a conference or person (3) +* change-what-i-am-doing:: Whance what-am-i-doing in who information (4) +* create-person:: Create a person (5) +* get-person-stat-old:: O Get person information. Use call 49 (6) +* set-priv-bits:: Set privileges of a person (7) +* set-passwd:: Set password of a person (8) +* query-read-texts:: Get info on what is read (9) +* create-conf:: Create a conference (10) +* delete-conf:: Delete a conference (11) +* lookup-name:: O Look up a name. Replaced by call 76 (12) +* get-conf-stat-old:: O Get conference information. Use call 50 (13) +* add-member:: Add a member to a conference (14) +* sub-member:: Remove a member from a conference (15) +* set-presentation:: Set the presentation of a conference (16) +* set-etc-motd:: Set conference notice (17) +* set-supervisor:: Set supervisor of a conference (18) +* set-permitted-submitters:: Set permitted subumitters of a conference (19) +* set-super-conf:: Set super-conference of a conference (20) +* set-conf-type:: Set the type of a conference (21) +* set-garb-nice:: Set garb-nice of a conference (22) +* get-marks:: Get marks for a person (23) +* mark-text-old:: O Mark a text. Replaced by calls 72 and 73 (24) +* get-text:: Get an article or part of an article (25) +* get-text-stat:: Get text status information (26) +* mark-as-read:: Mark an article as read in a conference (27) +* create-text:: Create an article (28) +* delete-text:: Delete an article (29) +* add-recipient:: Add a recipient to an article (30) +* sub-recipient:: Remove a recipient from an article (31) +* add-comment:: Add a comment to an article (32) +* sub-comment:: Remove a comment from an article (33) +* get-map:: Map local text numbers to global ones (34) +* get-time:: Get the current time (35) +* get-info:: Get server information (36) +* add-footnote:: Add an article as a footnote to another (37) +* sub-footnote:: Remove a foornote from an article (38) +* who-is-on-old:: O Get active sessions. Replaced by call 63 (39) +* set-unread:: Set number of unread in a conference (40) +* set-motd-of-lyskom:: Set LysKOM message of the day (41) +* enable:: Set security level (42) +* sync-kom:: Save the database (43) +* shutdown-kom:: Shut LysKOM down (44) +* broadcast:: O Broadcast a message. Replaced by call 53 (45) +* get-membership:: Get membership for a person (46) +* get-created-texts:: Get texts created by a user (47) +* get-members:: Get members of a conference (48) +* get-person-stat:: Get status information for a person (49) +* get-conf-stat:: Get status information for a conference (50) +* who-is-on:: O Get current sessions. Replaced by call 63 (51) +* get-unread-confs:: Get conferences with unread articles (52) +* send-message:: Send a personal message (53) +* get-session-info:: O Get session information. Use call 64 (54) +* disconnect:: Disconnect a session (55) +* who-am-i:: Get current session number (56) +* set-user-area:: Set a person's user area (57) +* get-last-text:: E Get text created before a certain time (58) +* create-anonymous-text:: E Create an anonymous text (59) +* find-next-text-no:: E Get next text number (60) +* find-previous-text-no:: E Get previous text number (61) +* login:: Log in to LysKOM (62) +* who-is-on-ident:: Get current sessions (63) +* get-session-info-ident:: Get session information (64) +* re-lookup-person:: O Look up a person based on name (65) +* re-lookup-conf:: O Look up a conference based on name (66) +* lookup-person:: O Find persons matching abbreviated name (67) +* lookup-conf:: Find conference matching abbreviated name (68) +* set-client-version:: Set the name and version the client (69) +* get-client-name:: Get the name of the client (70) +* get-client-version:: Get the version of the client (71) +* mark-text:: Mark a text (72) +* unmark-text:: Unmark a text (73) +* re-z-lookup:: Lookup for conferences and persons (74) +* get-version-info:: Get protocol version of server (75) +* lookup-z-name:: Look up an abbreviated name (76) +* set-last-read:: E Set text last read in a conference (77) +* get-uconf-stat:: E Get abbreviated conference status (78) +@end menu + +@iftex +@section Available Requests +@end iftex + +@node login-old, logout, , Protocol Requests +@subsection login-old (1) Obsolete + +@example + login-old <0> (( person : Pers-No; + passwd : HOLLERITH )) -> ( ); +@end example + +Log in as a person. This call has been replaced by call 62, @ref{login}. + +@node logout, pepsi, login-old, Protocol Requests +@subsection logout (1) Recommended + +@example + logout <1> ( ) -> ( ); +@end example + +Log out from LysKOM. This call never fails. + +This call does not disconnect the session; use @ref{disconnect} for +that. After issuing a logout call the client can reconnect as the same or a +different person using the @ref{login} command. + +For a client that needs to log in as several different users, issuing multiple +logout and login requests during one session is faster and places less load on +the server than does creating new sessions. + +@node pepsi, change-name, logout, Protocol Requests +@subsection pepsi (1) Recommended + +@example + pepsi <2> ( conference : Conf-No ) -> ( ) ; +@end example + +Change current conference of a session. The name of this call is a joke +(if you figure it out, email us, but I'm not telling.) I haven't figured out +what good this call is yet. + +@node change-name, change-what-i-am-doing, pepsi, Protocol Requests +@subsection change-name (1) Recommended + +@example + change-name <3> (( conference : Conf-No; + new-name : HOLLERITH )) -> ( ) ; +@end example + +This call changes the name of a conference or a person. To change the name of +a conference the session issuing the call must be logged in as a person who +either has special privileges or is the supervisor of the conference. + +@node change-what-i-am-doing, create-person, change-name, Protocol Requests +@subsection change-what-i-am-doing (1) Recommended + +@example + change-what-i-am-doing <4> ( what-am-i-doing : HOLLERITH ) + -> ( ); +@end example + +This call tells the server what the logged-in user is doing. The string is +usually displayed when a user requests that a client list who is using +LysKOM. Clients are encouraged to use this call creatively. + + +@node create-person, get-person-stat-old, change-what-i-am-doing, Protocol Requests +@subsection create-person (1) Recommended + +@example + create-person <5> (( name : HOLLERITH; + passwd : HOLLERITH; )) -> Pers-No; +@end example + +This call requests that the server create a new person with the name and +password given as arguments. To create a person the session must be logged in +as a person with sufficient privileges. + +@i{Example:} +@example + 1 5 24HLysKOM Statistics Daemon 6Hsecret + @i{=1 6} +@end example + +This example creates a new person named ``LysKOM statistics Daemon'' with the +password ``secret.'' The server has returned the person number six for the +person. + +@node get-person-stat-old, set-priv-bits, create-person, Protocol Requests +@subsection get-person-stat-old (1) Obsolete + +@example + get-person-stat-old <6> (( person : Pers_No; + mask : INT32 )) + -> Person; +@end example + +I don't know how this call works. It's obsolete and has been replaced by call +49 @ref{get-person-stat}. + +@node set-priv-bits, set-passwd, get-person-stat-old, Protocol Requests +@subsection set-priv-bits (1) Recommended + +@example + set-priv-bits <7> (( person : Pers-No; + privileges : Priv-Bits; )) -> ( ); +@end example + +This call sets the privileges of a person (see @ref{Security}.) To +successfully issue this call the session must be logged in as a person with +sufficient privileges. + +@i{Example:} +@example + 1 7 6 0010000000000000 + @i{=1} +@end example + +This example sets the privileges of person 6 to nothing but +@code{statistic}. This particular set of privileges might be useful for a +person used by a statistics-collecting +@ifinfo +daemon. +@end ifinfo +@iftex +d@ae{}mon. +@end iftex + +@node set-passwd, query-read-texts, set-priv-bits, Protocol Requests +@subsection set-passwd (1) Recommended + +@example + set-passwd <8> (( person : Pers-No; + old-pwd : HOLLERITH; + new-pwd : HOLLERITH; )) -> ( ); +@end example + +This call is used to set the password of a person. Providing @code{old-pwd} +matches @code{person}'s old password, that person's password is changed to +@code{new-pwd}. Any person may set it's own password. In addition persons with +sufficient privileges may ser other persons' passwords. + +@i{Example:} +@example + 1 8 5 6Hgazonk 7Ht9go8hw + @i{=1} +@end example + +This example sets the password of the LysKOM administrator to ``t9go8hw'' +provided that the old password was ``gazonk.'' + +@node query-read-texts, create-conf, set-passwd, Protocol Requests +@subsection query-read-texts (1) Recommended + +@example + query-read-texts <9> (( person : Pers-No; + conference : Conf-No; )) + -> ( read-texts : Membership ); +@end example + +This call is used to find the number of unread texts in a conference. The data +it returns is actually a membership structure which specifies which texts have +been read. It is up to the client to transform the data to a more usable form. +@code{person} is the person being queried is to be made and @code{conference} +is the conference in question. + +Calling @code{query-read-texts} does not require the session to be logged in. + +@i{Example:} +@example + 1 9 6 1 + @i{=1 32 5 11 12 7 93 1 193 1 1 20 133 3 @{ 135 136 137 @}} +@end example + +This example finds the read texts for user 6 in conference 1. The returned data +indicates that the user last read conference 1 (the tenth number) on Monday +July 12th, 1993 at 11:05:32 (the first nine numbers), that the person has +assigned priority 20 to the conference (the eleventh number) and that all +articles up to and including local number 133 plus articles 135, 136 and 137 +have been read. + +@node create-conf, delete-conf, query-read-texts, Protocol Requests +@subsection create-conf (1) Recommended + +@example + create-conf <10> (( name : HOLLERITH; + type : Any-Conf-Type; )) + -> ( conference : Conf-No ); +@end example + +This call is used to create new conferences. @code{name} is the name of the new +conference and @code{type} is its type. If successful, the call returns the +conference number of the newly created conference. + +To use this call the session must have logged in as a user with privileges to +create conferences (@pxref{Security}). + +@i{Example} +@ifinfo +@example + 1 10 13HInl�gg �t mig 00001000 + @i{=1 7} +@end example +@end ifinfo +@iftex +@example + 1 13HInl@"a{}gg @aa{}t mig 00001000 + @i{=1 7} +@end example +@end iftex + +This example creates a new conference named +@ifinfo +``Inl�gg �t +@end ifinfo +@iftex +``Inl@"a{}gg @aa{}t +@end iftex +mig''@footnote{This conference is a standard Lysator conference. It's +all Padrone's fault.} which accepts all users as members and accepts +anonymous articles. The server returns 7 as the new conference number. + +@node delete-conf, lookup-name, create-conf, Protocol Requests +@subsection delete-conf (1) Recommended + +@example + delete-conf <11> ( conf : Conf-No; ) -> ( ); +@end example + +This call deletes the conference @code{conf} from the LysKOM +database. Only privileged users and the supervisors of a conference may +delete it. @b{[Is it possible to delete mailboxes?]} + +@example + 1 11 7 + @i{=} +@end example + +This example shows the successful deletion of conference number seven. + +@node lookup-name, get-conf-stat-old, delete-conf, Protocol Requests +@node get-conf-stat-old, add-member, lookup-name, Protocol Requests +@node add-member, sub-member, get-conf-stat-old, Protocol Requests +@node sub-member, set-presentation, add-member, Protocol Requests +@node set-presentation, set-etc-motd, sub-member, Protocol Requests +@node set-etc-motd, set-supervisor, set-presentation, Protocol Requests +@node set-supervisor, set-permitted-submitters, set-etc-motd, Protocol Requests +@node set-permitted-submitters, set-super-conf, set-supervisor, Protocol Requests +@node set-super-conf, set-conf-type, set-permitted-submitters, Protocol Requests +@node set-conf-type, set-garb-nice, set-super-conf, Protocol Requests +@node set-garb-nice, get-marks, set-conf-type, Protocol Requests +@node get-marks, mark-text-old, set-garb-nice, Protocol Requests +@node mark-text-old, get-text, get-marks, Protocol Requests +@node get-text, get-text-stat, mark-text-old, Protocol Requests +@node get-text-stat, mark-as-read, get-text, Protocol Requests +@node mark-as-read, create-text, get-text-stat, Protocol Requests +@node create-text, delete-text, mark-as-read, Protocol Requests +@node delete-text, add-recipient, create-text, Protocol Requests +@node add-recipient, sub-recipient, delete-text, Protocol Requests +@node sub-recipient, add-comment, add-recipient, Protocol Requests +@node add-comment, sub-comment, sub-recipient, Protocol Requests +@node sub-comment, get-map, add-comment, Protocol Requests +@node get-map, get-time, sub-comment, Protocol Requests +@node get-time, get-info, get-map, Protocol Requests +@node get-info, add-footnote, get-time, Protocol Requests +@node add-footnote, sub-footnote, get-info, Protocol Requests +@node sub-footnote, who-is-on-old, add-footnote, Protocol Requests +@node who-is-on-old, set-unread, sub-footnote, Protocol Requests +@node set-unread, set-motd-of-lyskom, who-is-on-old, Protocol Requests +@node set-motd-of-lyskom, enable, set-unread, Protocol Requests +@node enable, sync-kom, set-motd-of-lyskom, Protocol Requests +@node sync-kom, shutdown-kom, enable, Protocol Requests +@node shutdown-kom, broadcast, sync-kom, Protocol Requests +@node broadcast, get-membership, shutdown-kom, Protocol Requests +@node get-membership, get-created-texts, broadcast, Protocol Requests +@node get-created-texts, get-members, get-membership, Protocol Requests +@node get-members, get-person-stat, get-created-texts, Protocol Requests +@node get-person-stat, get-conf-stat, get-members, Protocol Requests +@node get-conf-stat, who-is-on, get-person-stat, Protocol Requests +@node who-is-on, get-unread-confs, get-conf-stat, Protocol Requests +@node get-unread-confs, send-message, who-is-on, Protocol Requests +@node send-message, get-session-info, get-unread-confs, Protocol Requests +@node get-session-info, disconnect, send-message, Protocol Requests +@node disconnect, who-am-i, get-session-info, Protocol Requests +@node who-am-i, set-user-area, disconnect, Protocol Requests +@node set-user-area, get-last-text, who-am-i, Protocol Requests +@node get-last-text, create-anonymous-text, set-user-area, Protocol Requests +@node create-anonymous-text, find-next-text-no, get-last-text, Protocol Requests +@node find-next-text-no, find-previous-text-no, create-anonymous-text, Protocol Requests +@node find-previous-text-no, login, find-next-text-no, Protocol Requests +@node login, who-is-on-ident, find-previous-text-no, Protocol Requests +@node who-is-on-ident, get-session-info-ident, login, Protocol Requests +@node get-session-info-ident, re-lookup-person, who-is-on-ident, Protocol Requests +@node re-lookup-person, re-lookup-conf, get-session-info-ident, Protocol Requests +@node re-lookup-conf, lookup-person, re-lookup-person, Protocol Requests +@node lookup-person, lookup-conf, re-lookup-conf, Protocol Requests +@node lookup-conf, set-client-version, lookup-person, Protocol Requests +@node set-client-version, get-client-name, lookup-conf, Protocol Requests +@node get-client-name, get-client-version, set-client-version, Protocol Requests +@node get-client-version, mark-text, get-client-name, Protocol Requests +@node mark-text, unmark-text, get-client-version, Protocol Requests +@node unmark-text, re-z-lookup, mark-text, Protocol Requests +@node re-z-lookup, get-version-info, unmark-text, Protocol Requests +@node get-version-info, lookup-z-name, re-z-lookup, Protocol Requests +@node lookup-z-name, set-last-read, get-version-info, Protocol Requests +@node set-last-read, get-uconf-stat, lookup-z-name, Protocol Requests +@node get-uconf-stat, , set-last-read, Protocol Requests + + + + +@node Asynchronous Messages, , , Top +@chapter Asynchronous Messages + +@node Examples, , , Top +@chapter Examples + + +@bye