The lichat-protocol Reference Manual

Table of Contents

Next: , Previous: , Up: (dir)   [Contents][Index]

The lichat-protocol Reference Manual

This is the lichat-protocol Reference Manual, version 1.3, generated automatically by Declt version 2.4 "Will Decker" on Wed Jun 20 12:05:11 2018 GMT+0.


Next: , Previous: , Up: Top   [Contents][Index]

1 Introduction

About Lichat-Protocol

This system specifies and implements the protocol of the Lichat chat system. It offers both verbal and programmatical descriptions of the protocol. If you are working with a Common Lisp system, you can use this system straight-away to process Lichat messages.

Protocol Specification

1. Wire Format

The wire format is based on UTF-8 character streams on which objects are serialised in a secure, simplified s-expression format. The format is as follows:

WIREABLE ::= OBJECT | STRING | SYMBOL | NUMBER
OBJECT   ::= '(' WHITE* SYMBOL (WHITE+ KEYWORD WHITE+ EXPR)* WHITE* ')'
EXPR     ::= STRING | LIST | SYMBOL | NUMBER
STRING   ::= '"' ('\' ANY | !('"' | NULL))* '"'
LIST     ::= '(' WHITE* (EXPR (WHITE+ EXPR)*)? WHITE* ')'
SYMBOL   ::= KEYWORD | '#' ':' NAME | NAME ':' NAME
KEYWORD  ::= ':' NAME
NUMBER   ::= '0..9'+ ( '.' '0..9'*)? | '.' '0..9'*
NAME     ::= (('\' ANY) | !(TERMINAL | NULL))+
TERMINAL ::= ('0..9' | ':' | ' ' | '"' | '.' | '(' | ')')
WHITE    ::= U+0009 | U+000A | U+000B | U+000C | U+000D | U+0020
NULL     ::= U+0000
ANY      ::= !NULL

See to-wire, from-wire.

1.1 Symbols

Special care must be taken when reading and printing symbols. Symbols that come from the lichat-protocol package must be printed without the package name prefix. Symbols from the keyword package must be printed by their name only prefixed by a :. Symbols without a package must be printed by their name only and prefixed by a #:. Every other symbol must be prefixed by the symbol's package's name followed by a :. When a symbol is read, it is checked whether it exists in the corresponding package laid out by the previous rules. If it does not exist, the expression is not valid and an error must be generated, but only after the expression has been read to completion.

1.2 Objects

Only Common Lisp objects of type wireable can be serialised to the wire format. Special care must also be taken when wire-objects are read from the wire. An error must be generated if the object is malformed by either a non-symbol in the first place of its list, imbalanced key/value pairs in the tail, or non-keywords in the key position. An error must also be generated if the symbol at the first position does not name a class that is a subclass of wire-object. If it is a subclass of update, the keys (and values) named :id and :clock must also be present, lest an error be generated.

1.3 Null Characters

Null characters (U+0000) must not appear anywhere within a wireable. If a string were to contain null characters, they must be filtered out. If a symbol were to contain null characters, the message may not be put to the wire.

2. Server Objects

The server must keep track of a number of objects that are related to the current state of the chat system. The client may also keep track of some of these objects for its own convenience.

2.1 Connection

Each client is connected to the server through a connection object. Each connection in turn is tied to a user object. A user may have up to an implementation-dependant number of connections at the same time.

2.2 User

users represent participants on the chat network. A user has a globally unique name and a number of connections that can act as the user. Each user can be active in a number of channels, the maximal number of which is implementation-dependant. A user must always inhabit the primary channel. A user may have a profile object associated with it. When such a profile exists, the user is considered to be "registered." The server itself must also have an associated user object, the name of which is up to the specific server instance.

2.2.1 User Name Constraints

A user's name must be between 1 and 32 characters long, where each character must be from the Unicode general categories Letter, Mark, Number, Punctuation, and Symbol, or be a Space (U+0020).

2.3 Profile

The profile primarily exists to allow end-users to log in to a user through a password and thus secure the username from being taken by others. A profile has a maximal lifetime. If the user associated with the profile has not been used for longer than the profile's lifetime, the profile is deleted.

2.3.1 Password Constraints

A profile's password must be between 6 and 32 characters long. It may contain any kind of character that is not Null (U+0000).

2.4 Channel

channels represent communication channels for users over which they can send messages to each other. A channel has a set of permission rules that constrain what kind of updates may be performed on the channel by whom. There are three types of channels that only differ in their naming scheme and their permissions.

2.4.1 Primary Channels

Exactly one of these must exist on any server, and it must be named the same as the server's user. All users that are currently connected to the server must inhabit this channel. The channel may not be used for sending messages by anyone except for system administrators or the server itself. The primary channel is also used for updates that are "channel-less," to check them for permissions.

2.4.2 Anonymous Channels

Anonymous channels must have a random name that is prefixed with an @. Their permissions must prevent users that are not already part of the channel from sending join, channels, users, or any other kind of update to it, thus essentially making it invisible safe for specially invited users.

2.4.3 Regular Channels

Any other channel is considered a "regular channel".

2.4.4 Channel Name Constraints

The names of channels are constrained in the same way as user names. See §2.2.1.

2.5 Permission Rules

A permission rule specifies the restrictions of an update type on who is allowed to perform the update on the channel. The structure is as follows:

RULE     ::= (type EXPR*)
EXPR     ::= COMPOUND | username | t | nil
COMPOUND ::= (not EXPR) | (or EXPR*) | (and EXPR*)

Where type is the name of an update class, and username is the name of a user object. t is the CL symbol T and indicates "anyone". nil is the CL symbol NIL and indicates "no one". The compound operators combine the expressions logically as sensible. The expressions within the rule are combined as by an or compound.

3. General Interaction

The client and the server communicate through update objects over a connection. Each such object that is issued from the client must contain a unique id. This is important as the ID is reused by the server in order to communicate replies. The client can then compare the ID of the incoming updates to find the response to an earlier request, as responses may be reordered or delayed. The server does not check the ID in any way-- uniqueness and avoidance of clashing is the responsibility of the client. Each update must also contain a clock slot that specifies the time of sending. This is used to calculate latency and potential connection problems.

When an update is sent to a channel, it is distributed to all the users currently in the channel. When an update is sent to a user, it is distributed to all the connections of the user. When an update is sent to a connection, it is serialised to the wire according to the above wire format specification. The actual underlying mechanism that transfers the characters of the wire format to the remote host is implementation-dependant.

3.1 Null Termination of Updates

Following each update that is put on the wire has to be a single null character (U+0000). This character can be used to distinguish individual updates on the wire and may serve as a marker to attempt and stabilise the stream in case of malformed updates or other problems that might occur on the lower level.

4. Connection

4.1 Connection Establishment

After the connection between a client and a server has been established through some implementation-dependant means, the client must send a connect update. The update will attempt to register the user on the server, as follows:

  1. If the server cannot sustain more connections, a too-many-connections update is returned and the connection is closed.
  2. If the update's version denotes a version that is not compatible to the version of the protocol on the server, an incompatible-version update is returned and the connection is closed.
  3. If the update's from field contains an invalid name, a bad-name update is returned and the connection is closed.
  4. If the update does not contain a password, and the from field denotes a username that is already taken by an active user or a registered user, an username-taken update is returned and the connection is closed.
  5. If the update does contain a password, and the from field denotes a username that is not registered, a no-such-profile update is returned and the connection is closed.
  6. If the update does contain a password, and the from field denotes a username that is registered, but whose password does not match the given one, an invalid-password update is returned and the connection is closed.
  7. If the server cannot sustain more connections for the requested user, a too-many-connections update is returned and the connection is closed.
  8. A user corresponding in name to the from field is created if it does not yet exist.
  9. The connection is tied to its corresponding user object.
  10. The server responds with a connect update of the same id as the one the client sent. The from field must correspond to the server's user object's name.
  11. If the user already existed, the server responds with join updates for each of the channels the user is currently inhabiting.
  12. If the user did not already exist, it is joined to the primary channel.

4.2 Connection Maintenance

If the clock of an update diverges too much from the one known by the server, the server may drop the connection after replying with a connection-unstable update.

The server must receive an update on a connection within at least a certain implementation-dependant interval that must be larger than 100 seconds. If this does not happen, the server may assume a disconnection and drop the client after replying with a connection-unstable update. If the server does not receive an update from the client within an interval of up to 60 seconds, the server must send a ping update to the client, to which the client must respond with a pong update. This is to ensure the stability of the connection.

If the client sends too many updates in too short a time interval, the server may start dropping updates, as long as it responds with a too-many-updates update when it starts doing so. This throttling may be sustained for an implementation-dependant length of time. The client might send occasional ping requests to figure out if the throttling has been lifted. The server may also close the connection if it deems the flooding too severe.

4.3 Connection Closure

A connection may be closed either due to a disconnect update request from the client, or due to problems on the server side. When the connection is closed, the server must act as follows:

  1. The server responds with a disconnect update, if it still can.
  2. The underlying connection between the client and the server is closed.
  3. The connection object is removed from the associated user object.
  4. If the user does not have any remaining connections, the user leaves all channels it inhabited.

The exceptional situation being during connection establishment. If the server decides to close the connection then, it may do so without responding with a disconnect update and may immediately close the underlying connection.

5. Client Interaction

5.1 General Update Checks

An update is always checked as follows:

  1. If the update is not at all recognisable and cannot be parsed, a malformed-update update is sent back and the request is dropped.
  2. If the update is too long (contains too many characters), a update-too-long update is sent back and the request is dropped.
  3. If the class of the update is not known or not a subclass of wire-object, an invalid-update update is sent back and the request is dropped.
  4. If the from, channel, or target fields contain an invalid name, a bad-name update is sent back and the request is dropped.
  5. If the from field does not match the name known to the server by the user associated to the connection, a username-mismatch update is sent back and the request is dropped.
  6. If the channel field denotes a channel that does not exist, but must, a no-such-channel update is sent back and the request is dropped.
  7. If the target field denotes a user that does not exist, a no-such-user update is sent back and the request is dropped.
  8. If the update is an operation that is not permitted on its target channel, or the primary channel if no target channel is applicable, an insufficient-permissions update is sent back and the request is dropped.

5.2 Profile Registration

When a user sends a register update, the server must act as follows:

  1. If a profile of the same name as the user does not already exist, the profile is created.
  2. The password of the profile associated to the user is changed to match the one from the update.
  3. The profile must stay live until at least 30 days after the user associated with the profile has existed on the server.

Note that the server does not need to store the password verbatim, and is instead advised to only store and compare a hash of it.

5.3 Channel Creation & Management

Since a channel has only two bits of information associated with it, the management of channels is rather simple. Creating a new channel happens with the create update:

  1. The update is checked for permissions by the primary channel.
  2. If a channel of the channel name in the update already exists, the server responds with a channelname-taken update and drops the request.
  3. If the channel field is NIL, an anonymous channel is created, otherwise a regular channel is created.
  4. The user is automatically joined to the channel.
  5. The server responds with a join update to the user with the id being the same as the id of the create update.

From there on out the channel's permissions can be viewed or changed with the permissions update, if the channel allows you to do so. Note that the server must only update the channel's permissions, if the update's permissions field is not NIL.

See §2.5 for an explanation of the proper syntax of the permissions.

5.4 Channel Interaction

A user can interact with a channel in several ways.

5.4.1 Joining a Channel

Joining a channel happens with the join update, after which the server acts as follows:

  1. If the user is already in the named channel, an already-in-channel update is sent back and the request is dropped.
  2. The user is added to the channel's list of users.
  3. The user's join update is distributed to all users in the channel.
5.4.2 Leaving a Channel

Leaving a channel again happens with the leave update, after which the server acts as follows:

  1. If the user is not in the named channel, a not-in-channel update is sent back and the request is dropped.
  2. The user's leave update is distributed to all users in the channel.
  3. The user is removed from the channel's list of users.
5.4.3 Pulling a User

Another user can be pulled into the channel by the pull update, after which the server acts as follows:

  1. If the user is not in the named channel, a not-in-channel update is sent back and the request is dropped.
  2. If the target user is already in the named channel, an already-in-channel update is sent back and the request is dropped.
  3. The target user is added to the channel's list of users.
  4. A join update for the target user with the same id as the pull update is distributed to all users in the channel.
5.4.4 Kicking a User

Another user can be kicked from a channel by the kick update, after which the server acts as follows:

  1. If the user is not in the named channel, a not-in-channel update is sent back and the request is dropped.
  2. If the target user is not in the named channel, a not-in-channel update is sent back and the request is dropped.
  3. The user's kick update is distributed to all users in the channel.
  4. A leave update for the target user is distributed to all users in the channel.
  5. The target user is removed from the channel's list of users.
5.4.5 Sending a Message

Finally, a user can send a message to all other users in a channel with the message update, after which the server acts as follows:

  1. If the user is not in the named channel, a not-in-channel update is sent back and the request is dropped.
  2. The user's message update is distributed to all users in the channel.

5.5 Server Information Retrieval

The server can provide a client with several pieces of information about its current state.

5.5.1 Listing Public Channels

Retrieving a list of channels can be done with the channels update, after which the server acts as follows:

  1. For each channel known to the server, the server checks the update against the channel's permissions.
  2. If the permissions allow the update, the channel's name is recorded.
  3. A channels update with the same id as the request is sent back with the channels field set to the list of names of channels that were recorded.
5.5.2 Listing All Users of a Channel

The list of users currently in a channel can be retrieved by the users update, after which the server acts as follows:

  1. A list of the users in the channel is recorded.
  2. A users update with the same id as the request is sent back with the users field set to the list of names of users that were recorded.
5.5.3 Requesting Information About a User

Finally, information about a particular user can be retrieved by the user-info update, after which the server acts as follows:

  1. A user-info update with the same id as the request is sent back with the connections field set to the number of connections the user object has associated with it and with the registered field set to T if the user has a profile associated with it.

6. Protocol Extension

A server or client may provide extensions to the protocol in the following manners:

Each extension to the protocol should receive a unique name of the form producer-name where producer is an identifier for who wrote up the extension's protocol, and name should be a name for the extension itself. For each extension that a server and client support, they must include the unique name of it as a string in the connect update's extensions list.

7. Protocol Extensions

The extensions outlined in this section are not mandatory and a server or client may choose not to implement them.

7.1 Backfill (shirakumo-backfill)

A new update type called backfill is introduced, which is a channel-update. If the server receives such an update from a connection, it reacts as follows:

  1. If the user is not in the named channel, a not-in-channel update is sent back and the request is dropped.
  2. Following this, updates are sent back to the connection the update came from. These updates should include all updates that were distributed to users in the channel, spanning from now to an arbitrary point in time that is at most when the user of this connection last joined the channel. The fields of the updates must be the equal to the first time the update was sent out. The initial event of the user that requested the backfill joining the channel cannot be sent back.

The purpose of this extension is to allow users to catch up with the contents of a channel should they initiate a new connection which does not currently have access to all the past updates of the channel. In order to facilitate this, the server is forced to keep copies of the updates. The server is allowed to only keep updates for a certain duration, or only a certain number of total updates. In order to avoid spying, the server must not distribute updates that the user did not already receive previously through another connection. The server does not have to make any guarantee about the order in which the updates are sent back to the connection. The client on the other side is responsible for ordering them as appropriate according to the clock.

7.2 Data (shirakumo-data)

A new update type called data is introduced, which is a channel-update. Additionally, a new failure type called bad-content-type is introduced, which is an update-failure. If the server receives a data update from a connection, it reacts as follows:

  1. If the user is not in the named channel, a not-in-channel update is sent back and the request is dropped.
  2. If the update's content-type is not accepted by the server, a bad-content-type update is sent back and the request is dropped.
  3. The user's data update is distributed to all users in the channel.

The data update contains three slots, with the following intentions:

The purpose of this extension is to allow users to send binary data over channels. Particularly, the intention is to allow embedding of images, audio, video, and other media.

7.3 Emotes (shirakumo-emotes)

Two new update types called emotes and emote are introduced. If the server receives an emotes update from a connection, it reacts as follows:

  1. The server computes a set difference between the known emote names, and the names listed in the event's names slot. Emote names are case-insensitive.
  2. For each emote in the calculated set, the server sends back an emote update, where the name is set to the emote's name, and the payload is set to the base-64 encoded image representing the emote. The content-type must be set accordingly.

When the client receives an emote update from the server, it reacts as follows:

  1. The payload and content-type are associated with the name and persisted on the client. When the client sends an emotes event it to the server it should include the name of this emote in the names list.

The emotes update contains one slot, with the following intentions:

The emote update contains three slots, with the following intentions:

When the client sees a message update, every match of the regex :([^:]+): in the text where the group matched by the regex is the name of an emote from the known list of emotes, then the match of the regex should be displayed to the user by an image of the emote's image.

The purpose of this extension is to allow the server manager to configure emote images for the users to use, similar in functionality to what is often found on forums and other platforms.

See Also


Next: , Previous: , Up: Top   [Contents][Index]

2 Systems

The main system appears first, followed by any subsystem dependency.


Previous: , Up: Systems   [Contents][Index]

2.1 lichat-protocol

Maintainer

Nicolas Hafner <shinmera@tymoon.eu>

Author

Nicolas Hafner <shinmera@tymoon.eu>

Home Page

https://github.com/Shirakumo/lichat-protocol

License

Artistic

Description

The independent protocol part of Lichat.

Version

1.3

Dependencies
Source

lichat-protocol.asd (file)

Components

Next: , Previous: , Up: Top   [Contents][Index]

3 Files

Files are sorted by type and then listed depth-first from the systems components trees.


Previous: , Up: Files   [Contents][Index]

3.1 Lisp


Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.1 lichat-protocol.asd

Location

lichat-protocol.asd

Systems

lichat-protocol (system)


Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.2 lichat-protocol/package.lisp

Parent

lichat-protocol (system)

Location

package.lisp

Packages

lichat-protocol


Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.3 lichat-protocol/conditions.lisp

Dependency

package.lisp (file)

Parent

lichat-protocol (system)

Location

conditions.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.4 lichat-protocol/printer.lisp

Dependency

conditions.lisp (file)

Parent

lichat-protocol (system)

Location

printer.lisp

Exported Definitions

print-sexpr (function)

Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.5 lichat-protocol/reader.lisp

Dependency

printer.lisp (file)

Parent

lichat-protocol (system)

Location

reader.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.6 lichat-protocol/typed-slot-class.lisp

Dependency

reader.lisp (file)

Parent

lichat-protocol (system)

Location

typed-slot-class.lisp

Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.7 lichat-protocol/protocol.lisp

Dependency

typed-slot-class.lisp (file)

Parent

lichat-protocol (system)

Location

protocol.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.8 lichat-protocol/wire.lisp

Dependency

protocol.lisp (file)

Parent

lichat-protocol (system)

Location

wire.lisp

Exported Definitions

Previous: , Up: Lisp files   [Contents][Index]

3.1.9 lichat-protocol/documentation.lisp

Dependency

wire.lisp (file)

Parent

lichat-protocol (system)

Location

documentation.lisp


Next: , Previous: , Up: Top   [Contents][Index]

4 Packages

Packages are listed by definition order.


Previous: , Up: Packages   [Contents][Index]

4.1 lichat-protocol

Source

package.lisp (file)

Nickname

org.shirakumo.lichat.protocol

Use List

common-lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Top   [Contents][Index]

5 Definitions

Definitions are sorted by export status, category, package, and then by lexicographic order.


Next: , Previous: , Up: Definitions   [Contents][Index]

5.1 Exported definitions


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.1 Special variables

Special Variable: *default-anonymous-channel-permissions*

Default permissions for anonymous channels.

Package

lichat-protocol

Source

protocol.lisp (file)

Special Variable: *default-channel-lifetime*

The default lifetime for a new channel in seconds.

Should equal to one standard month (30 days).

Package

lichat-protocol

Source

protocol.lisp (file)

Special Variable: *default-primary-channel-permissions*

Default permissions for primary/server channels.

Package

lichat-protocol

Source

protocol.lisp (file)

Special Variable: *default-profile-lifetime*

The default lifetime for a registered profile in seconds.

Should equal to one non-leap year.

Package

lichat-protocol

Source

protocol.lisp (file)

Special Variable: *default-regular-channel-permissions*

Default permissions for non-primary, non-anonymous channels.

Package

lichat-protocol

Source

protocol.lisp (file)

Special Variable: *id-counter*

Counter variables for update IDs.

Starts at a random integer between 0 and the current universal-time. This is done to make the clashing of IDs less likely to occur between users of the protocol library.

See NEXT-ID

Package

lichat-protocol

Source

protocol.lisp (file)


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.2 Macros

Macro: define-protocol-class NAME DIRECT-SUPERCLASSES DIRECT-SLOTS &rest OPTIONS

Defines a new protocol class.

See DEFINE-TYPED-CLASS

Package

lichat-protocol

Source

protocol.lisp (file)


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.3 Functions

Function: channelname-p NAME

Returns true if the given name is a valid name for channels.

That is to say, the name must be a string in [1,32] of length.

Package

lichat-protocol

Source

protocol.lisp (file)

Function: check-update-options SEXPR

Checks the given sexpr for conformity to use as initargs for an update.

The items after the first symbol in the list are checked
as follows: they must be balanced pairs of KEYWORD to
atom. If this is not the case, an error of type MALFORMED-WIRE-OBJECT is signalled. If no key :ID is
found, an error of type MISSING-ID is signalled. If no
key :CLOCK is found, an error of type MISSING-CLOCK is
signalled.

See FROM-WIRE
See MISSING-ID
See MISSING-CLOCK
See MALFORMED-WIRE-OBJECT

Package

lichat-protocol

Source

wire.lisp (file)

Function: from-wire STREAM &optional LIMIT

Read a wire object from the stream.

First an object is read from stream by READ-SEXPR. If the returned object is not a cons, it is returned immediately. Otherwise, the procedure is as follows: The first element must be a symbol. If it isn’t, an error of type MALFORMED-WIRE-OBJECT is signalled. If the symbol does not designate a class, or designates a class that is not a subclass of WIRE-OBJECT, an error of type UNKNOWN-WIRE-OBJECT is signalled. If the class is a subclass of UPDATE, the rest of the items in the list are checked by CHECK-UPDATE-OPTIONS. Finally MAKE-INSTANCE is called with the full expression as arguments. If the class is a subclass of wire-object, MAKE-INSTANCE is called with the full expression as arguments immediately.

See READ-SEXPR
See MALFORMED-WIRE-OBJECT
See UNKNOWN-WIRE-OBJECT
See CHECK-UPDATE-OPTIONS

Package

lichat-protocol

Source

wire.lisp (file)

Function: id-p ID

Returns true if the given object is a valid ID.

Package

lichat-protocol

Source

protocol.lisp (file)

Function: next-id ()

Returns a fresh ID.

See *ID-COUNTER*

Package

lichat-protocol

Source

protocol.lisp (file)

Function: password-p PASS

Returns true if the given object is a string of at least six characters.

Package

lichat-protocol

Source

protocol.lisp (file)

Function: print-sexpr SEXPR STREAM

Print an s-expression to the stream.

Only the following types are allowed:
LIST STRING REAL SYMBOL
Any other type will signal an error of type UNPRINTABLE-OBJECT.

See PRINT-SEXPR-LIST
See PRINT-SEXPR-STRING
See PRINT-SEXPR-NUMBER
See PRINT-SEXPR-SYMBOL
See UNPRINTABLE-OBJECT

Package

lichat-protocol

Source

printer.lisp (file)

Function: protocol-version ()

Returns the version string for the protocol.

Package

lichat-protocol

Source

protocol.lisp (file)

Function: read-sexpr STREAM

Reads an s-expression from the stream.

Skips all the whitespace at the beginning. Depending on the character following, the reading is dispatched as follows:
( => READ-SEXPR-LIST
) => Signals an INCOMPLETE-TOKEN error " => READ-SEXPR-STIRNG
012345689. => READ-SEXPR-NUMBER
: => READ-SEXPR-KEYWORD
otherwise => READ-SEXPR-SYMBOL

See READ-SEXPR-LIST
See READ-SEXPR-STRING
See READ-SEXPR-NUMBER
See READ-SEXPR-KEYWORD
See READ-SEXPR-SYMBOL

Package

lichat-protocol

Source

reader.lisp (file)

Function: to-wire WIREABLE STREAM

Print the wireable object to the stream.

Only handles objects of type WIRE-OBJECT and WIREABLE.

WIRE-OBJECTS are printed as a list in the following format: a list of the object’s type symbol followed by pairs of keyword to value of the object’s slots that have an initarg. Slots without an initarg are not printed.

The output is forced once written fully.

See PRINT-SEXPR
See FORCE-OUTPUT

Package

lichat-protocol

Source

wire.lisp (file)

Function: username-p NAME

Returns true if the given name is a valid name for users.

That is to say, the name must be a string in [1,32] of length and each character must be in the allowed unicode regions.

See VALID-NAME-CHAR-P

Package

lichat-protocol

Source

protocol.lisp (file)

Function: whitespace-p CHAR

Returns T if the character is considered to be whitespace.

See *WHITESPACE*

Package

lichat-protocol

Source

reader.lisp (file)


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.4 Generic functions

Generic Function: allowed-content-types OBJECT
Generic Function: (setf allowed-content-types) NEW-VALUE OBJECT
Package

lichat-protocol

Methods
Method: allowed-content-types (BAD-CONTENT-TYPE bad-content-type)

automatically generated reader method

Source

protocol.lisp (file)

Method: (setf allowed-content-types) NEW-VALUE (BAD-CONTENT-TYPE bad-content-type)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: channel OBJECT

Accessor to the name of the channel the update relates to.

See CHANNEL-UPDATE

Package

lichat-protocol

Writer

(setf channel) (generic function)

Methods
Method: channel (CREATE create)

automatically generated reader method

Source

protocol.lisp (file)

Method: channel (CHANNEL-UPDATE channel-update)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf channel) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

channel (generic function)

Methods
Method: (setf channel) NEW-VALUE (CREATE create)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf channel) NEW-VALUE (CHANNEL-UPDATE channel-update)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: channels OBJECT

Accessor to the list of channels of the object.

See USER
See CHANNELS

Package

lichat-protocol

Writer

(setf channels) (generic function)

Methods
Method: channels (CHANNELS channels)

automatically generated reader method

Source

protocol.lisp (file)

Method: channels (USER user)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf channels) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

channels (generic function)

Methods
Method: (setf channels) NEW-VALUE (CHANNELS channels)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf channels) NEW-VALUE (USER user)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: clock OBJECT

Accessor to the clock of the update.

Must be a universal-time timestamp set at the time the update was constructed.

See UPDATE

Package

lichat-protocol

Writer

(setf clock) (generic function)

Methods
Method: clock (UPDATE update)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf clock) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

clock (generic function)

Methods
Method: (setf clock) NEW-VALUE (UPDATE update)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: connections OBJECT

Accessor to the list of connections of the user or count of connections of the user-info.

See USER
See USER-INFO

Package

lichat-protocol

Writer

(setf connections) (generic function)

Methods
Method: connections (USER-INFO user-info)

automatically generated reader method

Source

protocol.lisp (file)

Method: connections (USER user)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf connections) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

connections (generic function)

Methods
Method: (setf connections) NEW-VALUE (USER-INFO user-info)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf connections) NEW-VALUE (USER user)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: content-type OBJECT
Generic Function: (setf content-type) NEW-VALUE OBJECT
Package

lichat-protocol

Methods
Method: content-type (EMOTE emote)

automatically generated reader method

Source

protocol.lisp (file)

Method: (setf content-type) NEW-VALUE (EMOTE emote)

automatically generated writer method

Source

protocol.lisp (file)

Method: content-type (DATA data)

automatically generated reader method

Source

protocol.lisp (file)

Method: (setf content-type) NEW-VALUE (DATA data)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: extensions OBJECT
Generic Function: (setf extensions) NEW-VALUE OBJECT
Package

lichat-protocol

Methods
Method: extensions (CONNECT connect)

automatically generated reader method

Source

protocol.lisp (file)

Method: (setf extensions) NEW-VALUE (CONNECT connect)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: filename OBJECT
Generic Function: (setf filename) NEW-VALUE OBJECT
Package

lichat-protocol

Methods
Method: filename (DATA data)

automatically generated reader method

Source

protocol.lisp (file)

Method: (setf filename) NEW-VALUE (DATA data)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: from OBJECT

Accessor to the sender of the update.

Must be a username string identifying the user that sent it.

See UPDATE

Package

lichat-protocol

Writer

(setf from) (generic function)

Methods
Method: from (UPDATE update)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf from) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

from (generic function)

Methods
Method: (setf from) NEW-VALUE (UPDATE update)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: id OBJECT

Accessor to the ID of the update.

IDs should be connection-unique, meaning the same ID should not appear on different connections at the same time.

See UPDATE

Package

lichat-protocol

Writer

(setf id) (generic function)

Methods
Method: id (UPDATE update)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf id) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

id (generic function)

Methods
Method: (setf id) NEW-VALUE (UPDATE update)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: lifetime OBJECT

Accessor to the lifetime of the object.

The object should stay alive for at least this many seconds after it has ceased to be used.

See PROFILE
See CHANNEL

Package

lichat-protocol

Writer

(setf lifetime) (generic function)

Methods
Method: lifetime (CHANNEL channel)

automatically generated reader method

Source

protocol.lisp (file)

Method: lifetime (PROFILE profile)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf lifetime) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

lifetime (generic function)

Methods
Method: (setf lifetime) NEW-VALUE (CHANNEL channel)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf lifetime) NEW-VALUE (PROFILE profile)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: name OBJECT

Accessor to the object’s name string.

See NAMED-OBJECT

Package

lichat-protocol

Writer

(setf name) (generic function)

Methods
Method: name (EMOTE emote)

automatically generated reader method

Source

protocol.lisp (file)

Method: name (NAMED-OBJECT named-object)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf name) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

name (generic function)

Methods
Method: (setf name) NEW-VALUE (EMOTE emote)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf name) NEW-VALUE (NAMED-OBJECT named-object)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: names OBJECT
Generic Function: (setf names) NEW-VALUE OBJECT
Package

lichat-protocol

Methods
Method: names (EMOTES emotes)

automatically generated reader method

Source

protocol.lisp (file)

Method: (setf names) NEW-VALUE (EMOTES emotes)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: object CONDITION

The object related to the condition.

See UNPRINTABLE-OBJECT
See INCOMPATIBLE-VALUE-TYPE-FOR-SLOT

Package

lichat-protocol

Methods
Method: object (CONDITION incompatible-value-type-for-slot)
Source

conditions.lisp (file)

Method: object (CONDITION unprintable-object)
Source

conditions.lisp (file)

Generic Function: password OBJECT

Accessor to the password of the object.

See PROFILE
See REGISTER
See CONNECT

Package

lichat-protocol

Writer

(setf password) (generic function)

Methods
Method: password (REGISTER register)

automatically generated reader method

Source

protocol.lisp (file)

Method: password (CONNECT connect)

automatically generated reader method

Source

protocol.lisp (file)

Method: password (PROFILE profile)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf password) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

password (generic function)

Methods
Method: (setf password) NEW-VALUE (REGISTER register)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf password) NEW-VALUE (CONNECT connect)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf password) NEW-VALUE (PROFILE profile)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: payload OBJECT
Generic Function: (setf payload) NEW-VALUE OBJECT
Package

lichat-protocol

Methods
Method: payload (EMOTE emote)

automatically generated reader method

Source

protocol.lisp (file)

Method: (setf payload) NEW-VALUE (EMOTE emote)

automatically generated writer method

Source

protocol.lisp (file)

Method: payload (DATA data)

automatically generated reader method

Source

protocol.lisp (file)

Method: (setf payload) NEW-VALUE (DATA data)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: permissions OBJECT

Accessor to the permissions list of the object.

See CHANNEL
See PERMISSIONS

Package

lichat-protocol

Writer

(setf permissions) (generic function)

Methods
Method: permissions (PERMISSIONS permissions)

automatically generated reader method

Source

protocol.lisp (file)

Method: permissions (CHANNEL channel)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf permissions) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

permissions (generic function)

Methods
Method: (setf permissions) NEW-VALUE (PERMISSIONS permissions)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf permissions) NEW-VALUE (CHANNEL channel)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: registered OBJECT

Accessor to whether the user is registered or not.

See USER-INFO

Package

lichat-protocol

Writer

(setf registered) (generic function)

Methods
Method: registered (USER-INFO user-info)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf registered) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

registered (generic function)

Methods
Method: (setf registered) NEW-VALUE (USER-INFO user-info)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: symbol-designator CONDITION

A symbol designator.

Returns a CONS of two strings for the package- and symbol-name respectively.

See NULL-IN-SYMBOL-DESIGNATOR
See UNKNOWN-SYMBOL

Package

lichat-protocol

Methods
Method: symbol-designator (CONDITION unknown-symbol)
Source

conditions.lisp (file)

Method: symbol-designator (CONDITION null-in-symbol-designator)
Source

conditions.lisp (file)

Generic Function: target OBJECT

Accessor to the name of the user being targeted.

See TARGET-UPDATE

Package

lichat-protocol

Writer

(setf target) (generic function)

Methods
Method: target (TARGET-UPDATE target-update)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf target) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

target (generic function)

Methods
Method: (setf target) NEW-VALUE (TARGET-UPDATE target-update)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: text OBJECT

Accessor to the text string carried by the update.

See TEXT-UPDATE

Package

lichat-protocol

Writer

(setf text) (generic function)

Methods
Method: text (TEXT-UPDATE text-update)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf text) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

text (generic function)

Methods
Method: (setf text) NEW-VALUE (TEXT-UPDATE text-update)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: update CONDITION

The update object that relates to the condition.

See MISSING-UPDATE-ARGUMENT
See UNKNOWN-WIRE-OBJECT

Package

lichat-protocol

Methods
Method: update (CONDITION malformed-wire-object)
Source

conditions.lisp (file)

Method: update (CONDITION unknown-wire-object)
Source

conditions.lisp (file)

Method: update (CONDITION missing-update-argument)
Source

conditions.lisp (file)

Generic Function: update-id OBJECT

Accessor to the ID of the update that failed to be completed.

See UPDATE-FAILURE

Package

lichat-protocol

Writer

(setf update-id) (generic function)

Methods
Method: update-id (UPDATE-FAILURE update-failure)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf update-id) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

update-id (generic function)

Methods
Method: (setf update-id) NEW-VALUE (UPDATE-FAILURE update-failure)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: user OBJECT

Accessor to the user tied to the connection.

See CONNECTION
See USER

Package

lichat-protocol

Writer

(setf user) (generic function)

Methods
Method: user (CONNECTION connection)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf user) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

user (generic function)

Methods
Method: (setf user) NEW-VALUE (CONNECTION connection)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: users OBJECT

Accessor to the list of users of the object.

See CHANNEL
See USERS

Package

lichat-protocol

Writer

(setf users) (generic function)

Methods
Method: users (USERS users)

automatically generated reader method

Source

protocol.lisp (file)

Method: users (CHANNEL channel)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf users) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

users (generic function)

Methods
Method: (setf users) NEW-VALUE (USERS users)

automatically generated writer method

Source

protocol.lisp (file)

Method: (setf users) NEW-VALUE (CHANNEL channel)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: version OBJECT

Accessor to the version of the connection update.

See CONNECT

Package

lichat-protocol

Writer

(setf version) (generic function)

Methods
Method: version (CONNECT connect)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf version) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

version (generic function)

Methods
Method: (setf version) NEW-VALUE (CONNECT connect)

automatically generated writer method

Source

protocol.lisp (file)


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.5 Conditions

Condition: incompatible-value-type-for-slot ()

Condition signalled when an incompatible type is attempted to be set on a slot.

See OBJECT
See SLOT
See VALUE
See REQTYPE

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: object
Initargs

:object

Readers

object (generic function)

Slot: slot
Initargs

:slot

Readers

slot (generic function)

Slot: value
Initargs

:value

Readers

value (generic function)

Slot: type
Initargs

:type

Readers

reqtype (generic function)

Condition: incomplete-token ()

Condition signalled when a token is not complete on the wire and thus can’t be read fully.

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Condition: malformed-wire-object ()

Condition signalled when an object is found on the wire but is malformed and can’t be parsed.

See UPDATE

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Direct methods

update (method)

Direct slots
Slot: update
Initargs

:update

Readers

update (generic function)

Condition: missing-clock ()

Condition signalled when the CLOCK field is missing from an update.

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Condition: missing-id ()

Condition signalled when the ID field is missing from an update.

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Condition: missing-update-argument ()

Superclass for all conditions relating to missing required arguments in updates.

See MISSING-ID
See MISSING-CLOCK
See UPDATE

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses

wire-condition (condition)

Direct subclasses
Direct methods

update (method)

Direct slots
Slot: update
Initargs

:update

Readers

update (generic function)

Condition: null-in-symbol-designator ()

Condition signalled when a symbol is attempted to be put to the wire whose designator contains NULL characters.

See SYMBOL-DESIGNATOR

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Direct methods

symbol-designator (method)

Direct slots
Slot: symbol-designator
Initargs

:symbol-designator

Readers

symbol-designator (generic function)

Condition: printer-condition ()

Superclass for all conditions relating to printing to the wire.

See UNPRINTABLE-OBJECT

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses

wire-condition (condition)

Direct subclasses
Condition: protocol-condition ()

Superclass for all conditions relating to the protocol.

See WIRE-CONDITION
See INCOMPATIBLE-VALUE-TYPE-FOR-SLOT

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses

condition (condition)

Direct subclasses
Condition: read-limit-hit ()
Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Condition: reader-condition ()

Superclass for all conditions relating to reading from the wire.

See INCOMPLETE-TOKEN
See UNKNOWN-SYMBOL

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses

wire-condition (condition)

Direct subclasses
Condition: stray-null-found ()

Condition signalled when a null character was found in the middle of an update.

See READER-CONDITION

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Condition: unknown-symbol ()

Condition signalled when an unknown symbol is found on the wire.

See SYMBOL-DESIGNATOR

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Direct methods

symbol-designator (method)

Direct slots
Slot: symbol-designator
Initargs

:symbol-designator

Readers

symbol-designator (generic function)

Condition: unknown-wire-object ()

Condition signalled when an object is found on the wire that has an unknown type.

See UPDATE

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Direct methods

update (method)

Direct slots
Slot: update
Initargs

:update

Readers

update (generic function)

Condition: unprintable-object ()

Condition signalled when an unprintable object is attempted to be put onto the wire.

See OBJECT

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses
Direct methods

object (method)

Direct slots
Slot: object
Initargs

:object

Readers

object (generic function)

Condition: wire-condition ()

Superclass for all conditions relating to the wire format.

See PRINTER-CONDITION
See READER-CONDITION
See MISSING-UPDATE-ARGUMENT
See UNKNOWN-WIRE-OBJECT
See MALFORMED-WIRE-OBJECT

Package

lichat-protocol

Source

conditions.lisp (file)

Direct superclasses

protocol-condition (condition)

Direct subclasses

Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.6 Classes

Class: already-in-channel ()

Update in response to a JOIN/PULL request for a user that is already in the specified channel.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the user is already in the channel."
Class: backfill ()
Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: bad-content-type ()
Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: allowed-content-types
Initargs

:allowed-content-types

Readers

allowed-content-types (generic function)

Writers

(setf allowed-content-types) (generic function)

Direct Default Initargs
InitargValue
:text"the supplied content type for the data update is not accepted by this server."
:allowed-content-typesnil
Class: bad-name ()

Update in response to any named request with a name that is not valid.

Relevant are the FROM, TARGET, and CHANNEL fields.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the specified name is not a valid name."
Class: channel ()

Class to represent a channel.

See NAMED-OBJECT
See SERVER-OBJECT
See PERMISSIONS
See LIFETIME
See USERS
See *DEFAULT-CHANNEL-LIFETIME*

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: name
Slot: permissions
Initargs

:permissions

Readers

permissions (generic function)

Writers

(setf permissions) (generic function)

Slot: lifetime
Initargs

:lifetime

Readers

lifetime (generic function)

Writers

(setf lifetime) (generic function)

Slot: users
Initargs

:users

Readers

users (generic function)

Writers

(setf users) (generic function)

Direct Default Initargs
InitargValue
:permissionsnil
:lifetimelichat-protocol:*default-channel-lifetime*
:usersnil
Class: channel-update ()

Superclass for all updates relating to a channel.

See CHANNEL
See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct subclasses
Direct methods
  • print-object (method)
  • channel (method)
  • channel (method)
Direct slots
Slot: channel
Initargs

:channel

Readers

channel (generic function)

Writers

(setf channel) (generic function)

Class: channelname-taken ()

Update in response to a CREATE request for a channel that already exists.

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the requested channelname is already taken."
Class: channels ()

Update to represent a channels listing request.

Possible responses:
CHANNELS
BAD-NAME
USERNAME-MISMATCH

See CHANNELS
See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: channels
Initargs

:channels

Readers

channels (generic function)

Writers

(setf channels) (generic function)

Direct Default Initargs
InitargValue
:channelsnil
Class: connect ()

Update to represent a connection request.

This update must be the first thing sent by the client upon connection establishment.

Possible responses:
CONNECT
BAD-NAME
INVALID-PASSWORD
USERNAME-TAKEN
NO-SUCH-PROFILE
INCOMPATIBLE-VERSION

See PASSWORD
See VERSION
See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: password
Initargs

:password

Readers

password (generic function)

Writers

(setf password) (generic function)

Slot: version
Initargs

:version

Readers

version (generic function)

Writers

(setf version) (generic function)

Slot: extensions
Initargs

:extensions

Readers

extensions (generic function)

Writers

(setf extensions) (generic function)

Direct Default Initargs
InitargValue
:passwordnil
:version(lichat-protocol:protocol-version)
:extensionsnil
Class: connection ()

Class to represent a connection of a user.

See SERVER-OBJECT
See USER

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
  • print-object (method)
  • user (method)
  • user (method)
Direct slots
Slot: user
Initargs

:user

Readers

user (generic function)

Writers

(setf user) (generic function)

Direct Default Initargs
InitargValue
:usernil
Class: connection-unstable ()

Update in response to an unstable or slow connection.

See FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the connection is unstable. you may be disconnected soon."
Class: create ()

Update to represent a channel creation request.

The channel may be NIL, in which case an anonymous channel is constructed. You can obtain the name of the anonymous channel by reading it out of the JOIN response.

Possible responses:
JOIN
BAD-NAME
USERNAME-MISMATCH
CHANNELNAME-TAKEN
BAD-NAME
INSUFFICIENT-PERMISSIONS

See CHANNEL-UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
  • channel (method)
  • channel (method)
Direct slots
Slot: channel
Initargs

:channel

Readers

channel (generic function)

Writers

(setf channel) (generic function)

Direct Default Initargs
InitargValue
:channelnil
Class: data ()
Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: content-type
Initargs

:content-type

Readers

content-type (generic function)

Writers

(setf content-type) (generic function)

Slot: filename
Initargs

:filename

Readers

filename (generic function)

Writers

(setf filename) (generic function)

Slot: payload
Initargs

:payload

Readers

payload (generic function)

Writers

(setf payload) (generic function)

Direct Default Initargs
InitargValue
:file-namenil
Class: disconnect ()

Update to represent a disconnection request.

Possible responses:
DISCONNECT
USERNAME-MISMATCH

See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: emote ()
Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: content-type
Initargs

:content-type

Readers

content-type (generic function)

Writers

(setf content-type) (generic function)

Slot: name
Initargs

:name

Readers

name (generic function)

Writers

(setf name) (generic function)

Slot: payload
Initargs

:payload

Readers

payload (generic function)

Writers

(setf payload) (generic function)

Class: emotes ()
Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
  • names (method)
  • names (method)
Direct slots
Slot: names
Initargs

:names

Readers

names (generic function)

Writers

(setf names) (generic function)

Direct Default Initargs
InitargValue
:namesnil
Class: failure ()

Superclass for all failure response updates.

See TEXT-UDPATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct subclasses
Class: incompatible-version ()

Update in response to a connection attempt with an incompatible protocol version.

See COMPATIBLE-VERSIONS
See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: compatible-versions
Initargs

:compatible-versions

Readers

compatible-versions (generic function)

Writers

(setf compatible-versions) (generic function)

Direct Default Initargs
InitargValue
:text"the server and client versions are not compatible."
Class: insufficient-permissions ()

Update in response to a request that is not permitted on the current or primary channel.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"you do not have sufficient permissions to perform the requested action."
Class: invalid-password ()

Update in response to a connection attempt with an invalid password for the profile.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"invalid username or password."
Class: invalid-permissions ()

Update in response to a PERMISSIONS request that attempted to set malformed permissions.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the permissions are malformed."
Class: invalid-update ()

Update in response to an update of invalid type.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the update class is invalid."
Class: join ()

Update to represent a channel join request.

Possible responses:
JOIN
BAD-NAME
USERNAME-MISMATCH
ALREADY-IN-CHANNEL
NO-SUCH-CHANNEL INSUFFICIENT-PERMISSIONS

See CHANNEL-UDPATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: kick ()

Update to represent a user kick request.

Possible responses:
KICK
BAD-NAME
USERNAME-MISMATCH
NOT-IN-CHANNEL
NO-SUCH-USER
NO-SUCH-CHANNEL INSUFFICIENT-PERMISSIONS

See TARGET-UPDATE
See CHANNEL-UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: leave ()

Update to represent a channel leave request.

Possible responses:
LEAVE
BAD-NAME
USERNAME-MISMATCH
NOT-IN-CHANNEL
NO-SUCH-CHANNEL
INSUFFICIENT-PERMISSIONS

See CHANNEL-UDPATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: malformed-update ()

Update in response to a malformed update.

See FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"update was malformed and could not be parsed."
Class: message ()

Update to represent a channel message request.

Possible responses:
MESSAGE
BAD-NAME
USERNAME-MISMATCH
NO-SUCH-CHANNEL
INSUFFICIENT-PERMISSIONS

See CHANNEL-UPDATE
See TEXT-UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: named-object ()

Superclass for all objects that are named.

See NAME

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses

typed-object (class)

Direct subclasses
Direct methods
  • print-object (method)
  • name (method)
  • name (method)
Direct slots
Slot: name
Initargs

:name

Readers

name (generic function)

Writers

(setf name) (generic function)

Class: no-such-channel ()

Update in response to a CHANNEL-UPDATE for a channel that does not exist.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"no such channel exists on the server."
Class: no-such-profile ()

Update in response to a connection attempt with a password for an inexistent profile.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"no such profile could be found."
Class: no-such-user ()

Update in response to a TARGET-UPDATE request that refers to user that does not exist.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the requested user does not exist."
Class: not-in-channel ()

Update in response to a LEAVE/KICK request for a user that is not in the specified channel.

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the user is not part of the channel."
Class: permissions ()

Update to represent a channel permissions view or change request.

If PERMISSIONS is NIL, the permissions are not changed.

Possible responses:
PERMISSIONS
BAD-NAME
USERNAME-MISMATCH
NO-SUCH-CHANNEL
INSUFFICIENT-PERMISSIONS

See PERMISSIONS
See CHANNEL-UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: permissions
Initargs

:permissions

Readers

permissions (generic function)

Writers

(setf permissions) (generic function)

Direct Default Initargs
InitargValue
:permissionsnil
Class: ping ()

Update to represent a ping request.

The recipient must reply with a PONG update.

Possible responses:
PONG

See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: pong ()

Update to represent a pong response.

See PING
See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: profile ()

Class to represent user profiles. Only registered users have a profile.

See NAMED-OBJECT
See SERVER-OBJECT
See NAME
See PASSWORD
See LIFETIME
See *DEFAULT-PROFILE-LIFETIME*

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: name
Slot: password
Initargs

:password

Readers

password (generic function)

Writers

(setf password) (generic function)

Slot: lifetime
Initargs

:lifetime

Readers

lifetime (generic function)

Writers

(setf lifetime) (generic function)

Direct Default Initargs
InitargValue
:lifetimelichat-protocol:*default-profile-lifetime*
Class: pull ()

Update to represent a user pull request.

The user will be automatically joined to the channel.

Possible responses:
JOIN
BAD-NAME
USERNAME-MISMATCH
ALREADY-IN-CHANNEL
NO-SUCH-USER
NO-SUCH-CHANNEL
INSUFFICIENT-PERMISSIONS

See TARGET-UPDATE
See CHANNEL-UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Class: register ()

Update to represent a registration request.

Possible responses:
REGISTER
BAD-NAME
USERNAME-MISMATCH INSUFFICIENT-PERMISSIONS

See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: password
Initargs

:password

Readers

password (generic function)

Writers

(setf password) (generic function)

Class: server-object ()

Superclass for all objects that exist on the server-side.

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses

typed-object (class)

Direct subclasses
Class: target-update ()

Superclass for all updates that target a user.

See TARGET
See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct subclasses
Direct methods
  • print-object (method)
  • target (method)
  • target (method)
Direct slots
Slot: target
Initargs

:target

Readers

target (generic function)

Writers

(setf target) (generic function)

Class: text-update ()

Superclass for all updates that carry a text string.

See TEXT
See UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct subclasses
Direct methods
  • print-object (method)
  • text (method)
  • text (method)
Direct slots
Slot: text
Initargs

:text

Readers

text (generic function)

Writers

(setf text) (generic function)

Class: too-many-connections ()

Update in response to too many connections being requested on the server globally, or for a single user.

See FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"there are too many connections for this user or on this server."
Class: too-many-updates ()

Update in response to a flooding of the server.

When this update is sent, any number of future updates that are received may be dropped instead.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"you have been sending too many updates and have been throttled."
Class: update ()

Base class for all updates.

See WIRE-OBJECT
See ID
See CLOCK
See FROM
See NEXT-ID

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct subclasses
Direct methods
  • print-object (method)
  • from (method)
  • from (method)
  • clock (method)
  • clock (method)
  • id (method)
  • id (method)
Direct slots
Slot: id
Initargs

:id

Readers

id (generic function)

Writers

(setf id) (generic function)

Slot: clock
Initargs

:clock

Readers

clock (generic function)

Writers

(setf clock) (generic function)

Slot: from
Initargs

:from

Readers

from (generic function)

Writers

(setf from) (generic function)

Direct Default Initargs
InitargValue
:id(lichat-protocol:next-id)
:clock(get-universal-time)
Class: update-failure ()

Update in response to an update request that failed.

See UPDATE-ID

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct subclasses
Direct methods
  • print-object (method)
  • update-id (method)
  • update-id (method)
Direct slots
Slot: update-id
Initargs

:update-id

Readers

update-id (generic function)

Writers

(setf update-id) (generic function)

Class: update-too-long ()
Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the update was too long and has been dropped."
Class: user ()

Class to represent a user. Anything that can communicate with the server must have a user obuject.

See NAMED-OBJECT
See SERVER-OBJECT
See CONNECTIONS
See CHANNELS

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: name
Slot: connections
Initargs

:connections

Readers

connections (generic function)

Writers

(setf connections) (generic function)

Slot: channels
Initargs

:channels

Readers

channels (generic function)

Writers

(setf channels) (generic function)

Direct Default Initargs
InitargValue
:connectionsnil
:channelsnil
Class: user-info ()

Update to represent a user information request.

Possible responses:
USER-INFO
BAD-NAME
USERNAME-MISMATCH
NO-SUCH-USER

See REGISTERED
See CONNECTIONS
See TARGET-UPDATE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
Direct slots
Slot: registered
Initargs

:registered

Readers

registered (generic function)

Writers

(setf registered) (generic function)

Slot: connections
Initargs

:connections

Readers

connections (generic function)

Writers

(setf connections) (generic function)

Direct Default Initargs
InitargValue
:registerednil
:connections1
Class: username-mismatch ()

Update in response to a mismatch between the known username and the one in the FROM field.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the from field did not match the known username of the connection."
Class: username-taken ()

Update in response to a connection attempt with a username that is already taken.

See UPDATE-FAILURE

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct Default Initargs
InitargValue
:text"the requested username is already taken."
Class: users ()

Update to represent a channel users listing request.

Possible responses:
USERS
BAD-NAME
USERNAME-MISMATCH
NO-SUCH-CHANNEL
INSUFFICIENT-PERMISSIONS

See CHANNEL-UPDATE
See USERS

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses
Direct methods
  • users (method)
  • users (method)
Direct slots
Slot: users
Initargs

:users

Readers

users (generic function)

Writers

(setf users) (generic function)

Direct Default Initargs
InitargValue
:usersnil
Class: wire-object ()

Superclass for all classes that can be put onto the wire.

Package

lichat-protocol

Source

protocol.lisp (file)

Direct superclasses

typed-object (class)

Direct subclasses

update (class)


Previous: , Up: Exported definitions   [Contents][Index]

5.1.7 Types

Type: channelname ()

Type that is satisfied for all channelname strings.

See CHANNELNAME-P

Package

lichat-protocol

Source

protocol.lisp (file)

Type: id ()

Type that is satisfied for all ID objects.

See ID-P

Package

lichat-protocol

Source

protocol.lisp (file)

Type: password ()

Type that is satisfied for all password strings.

See PASSWORD-P

Package

lichat-protocol

Source

protocol.lisp (file)

Type: username ()

Type that is satisfied for all username strings.

See USERNAME-P

Package

lichat-protocol

Source

protocol.lisp (file)

Type: wireable ()

Type for all objects that are permitted to appear on the wire.

Should be the union of REAL STRING CONS SYMBOL WIRE-OBJECT

Package

lichat-protocol

Source

protocol.lisp (file)


Previous: , Up: Definitions   [Contents][Index]

5.2 Internal definitions


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.1 Special variables

Special Variable: *errors*

A list of errors that occurred during reading.

Package

lichat-protocol

Source

reader.lisp (file)

Special Variable: *invalid-symbol*

Placeholder symbol for symbols that could not be properly read.

Package

lichat-protocol

Source

reader.lisp (file)

Special Variable: *read-counter*
Package

lichat-protocol

Source

reader.lisp (file)

Special Variable: *read-limit*
Package

lichat-protocol

Source

reader.lisp (file)

Special Variable: *unbound-value*

Placeholder value for unbound values.

Package

lichat-protocol

Source

typed-slot-class.lisp (file)

Special Variable: *whitespace*

A vector of whitespace characters.

Package

lichat-protocol

Source

reader.lisp (file)


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.2 Macros

Macro: define-typed-class NAME DIRECT-SUPERCLASSES DIRECT-SLOTS &body OPTIONS

Shorthand wrapper around defclass to set it up for a typed-class.

See TYPED-OBJECT
See TYPED-SLOT-CLASS

Package

lichat-protocol

Source

typed-slot-class.lisp (file)


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.3 Functions

Function: check-compatible-slot-value VALUE OBJECT SLOT

Checks whether the given value is suitable for the given object’s slot.

If it is not, an error of type INCOMPATIBLE-VALUE-TYPE-FOR-SLOT
is signalled.

Package

lichat-protocol

Source

typed-slot-class.lisp (file)

Function: lpeek STREAM
Package

lichat-protocol

Source

reader.lisp (file)

Function: lread STREAM &optional EOF
Package

lichat-protocol

Source

reader.lisp (file)

Function: lunread CHAR STREAM
Package

lichat-protocol

Source

reader.lisp (file)

Function: maybe-sval OBJECT SLOT

Returns the slot’s value if it is bound, or *UNBOUND-VALUE* if it is not.

Package

lichat-protocol

Source

protocol.lisp (file)

Function: print-sexpr-list LIST STREAM

Print an s-expression list to the stream.

This only handles proper lists. List items are printed recursively.

See PRINT-SEXPR

Package

lichat-protocol

Source

printer.lisp (file)

Function: print-sexpr-number NUMBER STREAM

Print an s-expression number to the stream.

Only integers and floats can be printed, which are printed according to the CLHS rules on printing numbers.

Package

lichat-protocol

Source

printer.lisp (file)

Function: print-sexpr-string STRING STREAM

Print an s-expression string to the stream.

Prints all characters verbatim, with the exception of ", which is escaped with a backslash.

Package

lichat-protocol

Source

printer.lisp (file)

Function: print-sexpr-symbol SEXPR STREAM

Print an s-expression symbol to the stream.

Symbols are printed as follows: KEYWORD:FOO => :FOO LICHAT-PROTOCOL:FOO => FOO
#:FOO => #:FOO SOMEWHERE:FOO => SOMEWHERE:FOO

See PRINT-SEXPR-TOKEN

Package

lichat-protocol

Source

printer.lisp (file)

Function: print-sexpr-token TOKEN STREAM SYMBOL

Print an s-expression token to the stream.

All characters in the token string are printed verbatim, with the exception of "():0123456789. #
which are escaped by a backslash.

Package

lichat-protocol

Source

printer.lisp (file)

Function: read-sexpr-keyword STREAM

Read a keyword from the stream. It is assumed that the colon has already been read.

See SAFE-FIND-SYMBOL
See READ-SEXPR-TOKEN

Package

lichat-protocol

Source

reader.lisp (file)

Function: read-sexpr-list STREAM

Read a list from the stream. It is assumed that the opening paren has already been read.

Package

lichat-protocol

Source

reader.lisp (file)

Function: read-sexpr-number STREAM

Reads a number from the stream. The number can be either an integer or a float.

Package

lichat-protocol

Source

reader.lisp (file)

Function: read-sexpr-string STREAM

Read a string from the stream. It is assumed that the opening double-quote has already been read.

Package

lichat-protocol

Source

reader.lisp (file)

Function: read-sexpr-symbol STREAM

Reads a symbol from the stream.

See READ-SEXPR-TOKEN
See SAFE-FIND-SYMBOL

Package

lichat-protocol

Source

reader.lisp (file)

Function: read-sexpr-token STREAM

Reads a token from the stream.

Tokens are sequences of characters that are terminated by one of the following:
"():0123456789.
These characters may still appear in a token, but must be escaped by a backslash.

Package

lichat-protocol

Source

reader.lisp (file)

Function: safe-find-symbol NAME PACKAGE

Similar to FIND-SYMBOL, but recording an error for unknown symbols.

If the symbol cannot be found, a condition of type UNKNOWN-SYMBOL is pushed onto the *ERRORS* list and *INVALID-SYMBOL* is returned.

See FIND-SYMBOL
See UNKNOWN-SYMBOL
See *INVALID-SYMBOL*
See *ERRORS*

Package

lichat-protocol

Source

reader.lisp (file)

Function: skip-whitespace STREAM

Consumes all characters from the stream until a non-whitespace character is found.

See WHITESPACE-P

Package

lichat-protocol

Source

reader.lisp (file)

Function: valid-name-char-p C

Returns true if the given character is an allowed character in names.

This is according to §2.2.1 and §2.4.4.

Package

lichat-protocol

Source

protocol.lisp (file)


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.4 Generic functions

Generic Function: compatible-versions OBJECT

Accessor to the list of version strings that this server is compatible with.

See INCOMPATIBLE-VERSION

Package

lichat-protocol

Writer

(setf compatible-versions) (generic function)

Methods
Method: compatible-versions (INCOMPATIBLE-VERSION incompatible-version)

automatically generated reader method

Source

protocol.lisp (file)

Generic Function: (setf compatible-versions) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

compatible-versions (generic function)

Methods
Method: (setf compatible-versions) NEW-VALUE (INCOMPATIBLE-VERSION incompatible-version)

automatically generated writer method

Source

protocol.lisp (file)

Generic Function: reqtype CONDITION

The required type for the slot that was attempted to be set.

See INCOMPATIBLE-VALUE-TYPE-FOR-SLOT

Package

lichat-protocol

Methods
Method: reqtype (CONDITION incompatible-value-type-for-slot)
Source

conditions.lisp (file)

Generic Function: slot CONDITION

The slot that was attempted to be set.

See INCOMPATIBLE-VALUE-TYPE-FOR-SLOT

Package

lichat-protocol

Methods
Method: slot (CONDITION incompatible-value-type-for-slot)
Source

conditions.lisp (file)

Generic Function: slot-type OBJECT

Accessor to the type constraint of the typed-slot.

See TYPED-SLOT

Package

lichat-protocol

Writer

(setf slot-type) (generic function)

Methods
Method: slot-type (TYPED-SLOT typed-slot)

automatically generated reader method

Source

typed-slot-class.lisp (file)

Generic Function: (setf slot-type) NEW-VALUE OBJECT
Package

lichat-protocol

Reader

slot-type (generic function)

Methods
Method: (setf slot-type) NEW-VALUE (TYPED-SLOT typed-slot)

automatically generated writer method

Source

typed-slot-class.lisp (file)

Generic Function: value CONDITION

The value that was attempted to be set.

See INCOMPATIBLE-VALUE-TYPE-FOR-SLOT

Package

lichat-protocol

Methods
Method: value (CONDITION incompatible-value-type-for-slot)
Source

conditions.lisp (file)


Previous: , Up: Internal definitions   [Contents][Index]

5.2.5 Classes

Class: typed-direct-slot-definition ()

Direct-slot class for typed slots.

See TYPED-SLOT

Package

lichat-protocol

Source

typed-slot-class.lisp (file)

Direct superclasses
  • standard-direct-slot-definition (class)
  • typed-slot (class)
Class: typed-effective-slot-definition ()

Effective-slot class for typed slots.

See TYPED-SLOT

Package

lichat-protocol

Source

typed-slot-class.lisp (file)

Direct superclasses
  • standard-effective-slot-definition (class)
  • typed-slot (class)
Class: typed-object ()

Superclass for objects with strictly typed slots.

See TYPED-SLOT-CLASS
See DEFINE-TYPED-CLASS

Package

lichat-protocol

Source

typed-slot-class.lisp (file)

Direct superclasses

standard-object (class)

Direct subclasses
Direct methods

shared-initialize (method)

Class: typed-slot ()

Slot class for slots with a strict type check.

See SLOT-TYPE
See TYPED-DIRECT-SLOT-DEFINITION
See TYPED-EFFECTIVE-SLOT-DEFINITION
See TYPED-SLOT-CLASS

Package

lichat-protocol

Source

typed-slot-class.lisp (file)

Direct superclasses

standard-slot-definition (class)

Direct subclasses
Direct methods
  • slot-makunbound-using-class (method)
  • slot-value-using-class (method)
  • print-object (method)
  • slot-type (method)
  • slot-type (method)
Direct slots
Slot: slot-type
Initargs

:slot-type

Readers

slot-type (generic function)

Writers

(setf slot-type) (generic function)

Class: typed-slot-class ()

Metaclass for classes with strictly typed slots.

See TYPED-SLOT
See TYPED-OBJECT

Package

lichat-protocol

Source

typed-slot-class.lisp (file)

Direct superclasses

standard-class (class)

Direct methods
  • slot-makunbound-using-class (method)
  • slot-value-using-class (method)
  • compute-effective-slot-definition (method)
  • effective-slot-definition-class (method)
  • direct-slot-definition-class (method)
  • validate-superclass (method)
  • validate-superclass (method)

Previous: , Up: Top   [Contents][Index]

Appendix A Indexes


Next: , Previous: , Up: Indexes   [Contents][Index]

A.1 Concepts

Jump to:   F   L  
Index Entry  Section

F
File, Lisp, lichat-protocol.asd: The lichat-protocol<dot>asd file
File, Lisp, lichat-protocol/conditions.lisp: The lichat-protocol/conditions<dot>lisp file
File, Lisp, lichat-protocol/documentation.lisp: The lichat-protocol/documentation<dot>lisp file
File, Lisp, lichat-protocol/package.lisp: The lichat-protocol/package<dot>lisp file
File, Lisp, lichat-protocol/printer.lisp: The lichat-protocol/printer<dot>lisp file
File, Lisp, lichat-protocol/protocol.lisp: The lichat-protocol/protocol<dot>lisp file
File, Lisp, lichat-protocol/reader.lisp: The lichat-protocol/reader<dot>lisp file
File, Lisp, lichat-protocol/typed-slot-class.lisp: The lichat-protocol/typed-slot-class<dot>lisp file
File, Lisp, lichat-protocol/wire.lisp: The lichat-protocol/wire<dot>lisp file

L
lichat-protocol.asd: The lichat-protocol<dot>asd file
lichat-protocol/conditions.lisp: The lichat-protocol/conditions<dot>lisp file
lichat-protocol/documentation.lisp: The lichat-protocol/documentation<dot>lisp file
lichat-protocol/package.lisp: The lichat-protocol/package<dot>lisp file
lichat-protocol/printer.lisp: The lichat-protocol/printer<dot>lisp file
lichat-protocol/protocol.lisp: The lichat-protocol/protocol<dot>lisp file
lichat-protocol/reader.lisp: The lichat-protocol/reader<dot>lisp file
lichat-protocol/typed-slot-class.lisp: The lichat-protocol/typed-slot-class<dot>lisp file
lichat-protocol/wire.lisp: The lichat-protocol/wire<dot>lisp file
Lisp File, lichat-protocol.asd: The lichat-protocol<dot>asd file
Lisp File, lichat-protocol/conditions.lisp: The lichat-protocol/conditions<dot>lisp file
Lisp File, lichat-protocol/documentation.lisp: The lichat-protocol/documentation<dot>lisp file
Lisp File, lichat-protocol/package.lisp: The lichat-protocol/package<dot>lisp file
Lisp File, lichat-protocol/printer.lisp: The lichat-protocol/printer<dot>lisp file
Lisp File, lichat-protocol/protocol.lisp: The lichat-protocol/protocol<dot>lisp file
Lisp File, lichat-protocol/reader.lisp: The lichat-protocol/reader<dot>lisp file
Lisp File, lichat-protocol/typed-slot-class.lisp: The lichat-protocol/typed-slot-class<dot>lisp file
Lisp File, lichat-protocol/wire.lisp: The lichat-protocol/wire<dot>lisp file

Jump to:   F   L  

Next: , Previous: , Up: Indexes   [Contents][Index]

A.2 Functions

Jump to:   (  
A   C   D   E   F   G   I   L   M   N   O   P   R   S   T   U   V   W  
Index Entry  Section

(
(setf allowed-content-types): Exported generic functions
(setf allowed-content-types): Exported generic functions
(setf channel): Exported generic functions
(setf channel): Exported generic functions
(setf channel): Exported generic functions
(setf channels): Exported generic functions
(setf channels): Exported generic functions
(setf channels): Exported generic functions
(setf clock): Exported generic functions
(setf clock): Exported generic functions
(setf compatible-versions): Internal generic functions
(setf compatible-versions): Internal generic functions
(setf connections): Exported generic functions
(setf connections): Exported generic functions
(setf connections): Exported generic functions
(setf content-type): Exported generic functions
(setf content-type): Exported generic functions
(setf content-type): Exported generic functions
(setf extensions): Exported generic functions
(setf extensions): Exported generic functions
(setf filename): Exported generic functions
(setf filename): Exported generic functions
(setf from): Exported generic functions
(setf from): Exported generic functions
(setf id): Exported generic functions
(setf id): Exported generic functions
(setf lifetime): Exported generic functions
(setf lifetime): Exported generic functions
(setf lifetime): Exported generic functions
(setf name): Exported generic functions
(setf name): Exported generic functions
(setf name): Exported generic functions
(setf names): Exported generic functions
(setf names): Exported generic functions
(setf password): Exported generic functions
(setf password): Exported generic functions
(setf password): Exported generic functions
(setf password): Exported generic functions
(setf payload): Exported generic functions
(setf payload): Exported generic functions
(setf payload): Exported generic functions
(setf permissions): Exported generic functions
(setf permissions): Exported generic functions
(setf permissions): Exported generic functions
(setf registered): Exported generic functions
(setf registered): Exported generic functions
(setf slot-type): Internal generic functions
(setf slot-type): Internal generic functions
(setf target): Exported generic functions
(setf target): Exported generic functions
(setf text): Exported generic functions
(setf text): Exported generic functions
(setf update-id): Exported generic functions
(setf update-id): Exported generic functions
(setf user): Exported generic functions
(setf user): Exported generic functions
(setf users): Exported generic functions
(setf users): Exported generic functions
(setf users): Exported generic functions
(setf version): Exported generic functions
(setf version): Exported generic functions

A
allowed-content-types: Exported generic functions
allowed-content-types: Exported generic functions

C
channel: Exported generic functions
channel: Exported generic functions
channel: Exported generic functions
channelname-p: Exported functions
channels: Exported generic functions
channels: Exported generic functions
channels: Exported generic functions
check-compatible-slot-value: Internal functions
check-update-options: Exported functions
clock: Exported generic functions
clock: Exported generic functions
compatible-versions: Internal generic functions
compatible-versions: Internal generic functions
connections: Exported generic functions
connections: Exported generic functions
connections: Exported generic functions
content-type: Exported generic functions
content-type: Exported generic functions
content-type: Exported generic functions

D
define-protocol-class: Exported macros
define-typed-class: Internal macros

E
extensions: Exported generic functions
extensions: Exported generic functions

F
filename: Exported generic functions
filename: Exported generic functions
from: Exported generic functions
from: Exported generic functions
from-wire: Exported functions
Function, channelname-p: Exported functions
Function, check-compatible-slot-value: Internal functions
Function, check-update-options: Exported functions
Function, from-wire: Exported functions
Function, id-p: Exported functions
Function, lpeek: Internal functions
Function, lread: Internal functions
Function, lunread: Internal functions
Function, maybe-sval: Internal functions
Function, next-id: Exported functions
Function, password-p: Exported functions
Function, print-sexpr: Exported functions
Function, print-sexpr-list: Internal functions
Function, print-sexpr-number: Internal functions
Function, print-sexpr-string: Internal functions
Function, print-sexpr-symbol: Internal functions
Function, print-sexpr-token: Internal functions
Function, protocol-version: Exported functions
Function, read-sexpr: Exported functions
Function, read-sexpr-keyword: Internal functions
Function, read-sexpr-list: Internal functions
Function, read-sexpr-number: Internal functions
Function, read-sexpr-string: Internal functions
Function, read-sexpr-symbol: Internal functions
Function, read-sexpr-token: Internal functions
Function, safe-find-symbol: Internal functions
Function, skip-whitespace: Internal functions
Function, to-wire: Exported functions
Function, username-p: Exported functions
Function, valid-name-char-p: Internal functions
Function, whitespace-p: Exported functions

G
Generic Function, (setf allowed-content-types): Exported generic functions
Generic Function, (setf channel): Exported generic functions
Generic Function, (setf channels): Exported generic functions
Generic Function, (setf clock): Exported generic functions
Generic Function, (setf compatible-versions): Internal generic functions
Generic Function, (setf connections): Exported generic functions
Generic Function, (setf content-type): Exported generic functions
Generic Function, (setf extensions): Exported generic functions
Generic Function, (setf filename): Exported generic functions
Generic Function, (setf from): Exported generic functions
Generic Function, (setf id): Exported generic functions
Generic Function, (setf lifetime): Exported generic functions
Generic Function, (setf name): Exported generic functions
Generic Function, (setf names): Exported generic functions
Generic Function, (setf password): Exported generic functions
Generic Function, (setf payload): Exported generic functions
Generic Function, (setf permissions): Exported generic functions
Generic Function, (setf registered): Exported generic functions
Generic Function, (setf slot-type): Internal generic functions
Generic Function, (setf target): Exported generic functions
Generic Function, (setf text): Exported generic functions
Generic Function, (setf update-id): Exported generic functions
Generic Function, (setf user): Exported generic functions
Generic Function, (setf users): Exported generic functions
Generic Function, (setf version): Exported generic functions
Generic Function, allowed-content-types: Exported generic functions
Generic Function, channel: Exported generic functions
Generic Function, channels: Exported generic functions
Generic Function, clock: Exported generic functions
Generic Function, compatible-versions: Internal generic functions
Generic Function, connections: Exported generic functions
Generic Function, content-type: Exported generic functions
Generic Function, extensions: Exported generic functions
Generic Function, filename: Exported generic functions
Generic Function, from: Exported generic functions
Generic Function, id: Exported generic functions
Generic Function, lifetime: Exported generic functions
Generic Function, name: Exported generic functions
Generic Function, names: Exported generic functions
Generic Function, object: Exported generic functions
Generic Function, password: Exported generic functions
Generic Function, payload: Exported generic functions
Generic Function, permissions: Exported generic functions
Generic Function, registered: Exported generic functions
Generic Function, reqtype: Internal generic functions
Generic Function, slot: Internal generic functions
Generic Function, slot-type: Internal generic functions
Generic Function, symbol-designator: Exported generic functions
Generic Function, target: Exported generic functions
Generic Function, text: Exported generic functions
Generic Function, update: Exported generic functions
Generic Function, update-id: Exported generic functions
Generic Function, user: Exported generic functions
Generic Function, users: Exported generic functions
Generic Function, value: Internal generic functions
Generic Function, version: Exported generic functions

I
id: Exported generic functions
id: Exported generic functions
id-p: Exported functions

L
lifetime: Exported generic functions
lifetime: Exported generic functions
lifetime: Exported generic functions
lpeek: Internal functions
lread: Internal functions
lunread: Internal functions

M
Macro, define-protocol-class: Exported macros
Macro, define-typed-class: Internal macros
maybe-sval: Internal functions
Method, (setf allowed-content-types): Exported generic functions
Method, (setf channel): Exported generic functions
Method, (setf channel): Exported generic functions
Method, (setf channels): Exported generic functions
Method, (setf channels): Exported generic functions
Method, (setf clock): Exported generic functions
Method, (setf compatible-versions): Internal generic functions
Method, (setf connections): Exported generic functions
Method, (setf connections): Exported generic functions
Method, (setf content-type): Exported generic functions
Method, (setf content-type): Exported generic functions
Method, (setf extensions): Exported generic functions
Method, (setf filename): Exported generic functions
Method, (setf from): Exported generic functions
Method, (setf id): Exported generic functions
Method, (setf lifetime): Exported generic functions
Method, (setf lifetime): Exported generic functions
Method, (setf name): Exported generic functions
Method, (setf name): Exported generic functions
Method, (setf names): Exported generic functions
Method, (setf password): Exported generic functions
Method, (setf password): Exported generic functions
Method, (setf password): Exported generic functions
Method, (setf payload): Exported generic functions
Method, (setf payload): Exported generic functions
Method, (setf permissions): Exported generic functions
Method, (setf permissions): Exported generic functions
Method, (setf registered): Exported generic functions
Method, (setf slot-type): Internal generic functions
Method, (setf target): Exported generic functions
Method, (setf text): Exported generic functions
Method, (setf update-id): Exported generic functions
Method, (setf user): Exported generic functions
Method, (setf users): Exported generic functions
Method, (setf users): Exported generic functions
Method, (setf version): Exported generic functions
Method, allowed-content-types: Exported generic functions
Method, channel: Exported generic functions
Method, channel: Exported generic functions
Method, channels: Exported generic functions
Method, channels: Exported generic functions
Method, clock: Exported generic functions
Method, compatible-versions: Internal generic functions
Method, connections: Exported generic functions
Method, connections: Exported generic functions
Method, content-type: Exported generic functions
Method, content-type: Exported generic functions
Method, extensions: Exported generic functions
Method, filename: Exported generic functions
Method, from: Exported generic functions
Method, id: Exported generic functions
Method, lifetime: Exported generic functions
Method, lifetime: Exported generic functions
Method, name: Exported generic functions
Method, name: Exported generic functions
Method, names: Exported generic functions
Method, object: Exported generic functions
Method, object: Exported generic functions
Method, password: Exported generic functions
Method, password: Exported generic functions
Method, password: Exported generic functions
Method, payload: Exported generic functions
Method, payload: Exported generic functions
Method, permissions: Exported generic functions
Method, permissions: Exported generic functions
Method, registered: Exported generic functions
Method, reqtype: Internal generic functions
Method, slot: Internal generic functions
Method, slot-type: Internal generic functions
Method, symbol-designator: Exported generic functions
Method, symbol-designator: Exported generic functions
Method, target: Exported generic functions
Method, text: Exported generic functions
Method, update: Exported generic functions
Method, update: Exported generic functions
Method, update: Exported generic functions
Method, update-id: Exported generic functions
Method, user: Exported generic functions
Method, users: Exported generic functions
Method, users: Exported generic functions
Method, value: Internal generic functions
Method, version: Exported generic functions

N
name: Exported generic functions
name: Exported generic functions
name: Exported generic functions
names: Exported generic functions
names: Exported generic functions
next-id: Exported functions

O
object: Exported generic functions
object: Exported generic functions
object: Exported generic functions

P
password: Exported generic functions
password: Exported generic functions
password: Exported generic functions
password: Exported generic functions
password-p: Exported functions
payload: Exported generic functions
payload: Exported generic functions
payload: Exported generic functions
permissions: Exported generic functions
permissions: Exported generic functions
permissions: Exported generic functions
print-sexpr: Exported functions
print-sexpr-list: Internal functions
print-sexpr-number: Internal functions
print-sexpr-string: Internal functions
print-sexpr-symbol: Internal functions
print-sexpr-token: Internal functions
protocol-version: Exported functions

R
read-sexpr: Exported functions
read-sexpr-keyword: Internal functions
read-sexpr-list: Internal functions
read-sexpr-number: Internal functions
read-sexpr-string: Internal functions
read-sexpr-symbol: Internal functions
read-sexpr-token: Internal functions
registered: Exported generic functions
registered: Exported generic functions
reqtype: Internal generic functions
reqtype: Internal generic functions

S
safe-find-symbol: Internal functions
skip-whitespace: Internal functions
slot: Internal generic functions
slot: Internal generic functions
slot-type: Internal generic functions
slot-type: Internal generic functions
symbol-designator: Exported generic functions
symbol-designator: Exported generic functions
symbol-designator: Exported generic functions

T
target: Exported generic functions
target: Exported generic functions
text: Exported generic functions
text: Exported generic functions
to-wire: Exported functions

U
update: Exported generic functions
update: Exported generic functions
update: Exported generic functions
update: Exported generic functions
update-id: Exported generic functions
update-id: Exported generic functions
user: Exported generic functions
user: Exported generic functions
username-p: Exported functions
users: Exported generic functions
users: Exported generic functions
users: Exported generic functions

V
valid-name-char-p: Internal functions
value: Internal generic functions
value: Internal generic functions
version: Exported generic functions
version: Exported generic functions

W
whitespace-p: Exported functions

Jump to:   (  
A   C   D   E   F   G   I   L   M   N   O   P   R   S   T   U   V   W  

Next: , Previous: , Up: Indexes   [Contents][Index]

A.3 Variables

Jump to:   *  
A   C   E   F   I   L   N   O   P   R   S   T   U   V  
Index Entry  Section

*
*default-anonymous-channel-permissions*: Exported special variables
*default-channel-lifetime*: Exported special variables
*default-primary-channel-permissions*: Exported special variables
*default-profile-lifetime*: Exported special variables
*default-regular-channel-permissions*: Exported special variables
*errors*: Internal special variables
*id-counter*: Exported special variables
*invalid-symbol*: Internal special variables
*read-counter*: Internal special variables
*read-limit*: Internal special variables
*unbound-value*: Internal special variables
*whitespace*: Internal special variables

A
allowed-content-types: Exported classes

C
channel: Exported classes
channel: Exported classes
channels: Exported classes
channels: Exported classes
clock: Exported classes
compatible-versions: Exported classes
connections: Exported classes
connections: Exported classes
content-type: Exported classes
content-type: Exported classes

E
extensions: Exported classes

F
filename: Exported classes
from: Exported classes

I
id: Exported classes

L
lifetime: Exported classes
lifetime: Exported classes

N
name: Exported classes
name: Exported classes
name: Exported classes
name: Exported classes
name: Exported classes
names: Exported classes

O
object: Exported conditions
object: Exported conditions

P
password: Exported classes
password: Exported classes
password: Exported classes
payload: Exported classes
payload: Exported classes
permissions: Exported classes
permissions: Exported classes

R
registered: Exported classes

S
slot: Exported conditions
Slot, allowed-content-types: Exported classes
Slot, channel: Exported classes
Slot, channel: Exported classes
Slot, channels: Exported classes
Slot, channels: Exported classes
Slot, clock: Exported classes
Slot, compatible-versions: Exported classes
Slot, connections: Exported classes
Slot, connections: Exported classes
Slot, content-type: Exported classes
Slot, content-type: Exported classes
Slot, extensions: Exported classes
Slot, filename: Exported classes
Slot, from: Exported classes
Slot, id: Exported classes
Slot, lifetime: Exported classes
Slot, lifetime: Exported classes
Slot, name: Exported classes
Slot, name: Exported classes
Slot, name: Exported classes
Slot, name: Exported classes
Slot, name: Exported classes
Slot, names: Exported classes
Slot, object: Exported conditions
Slot, object: Exported conditions
Slot, password: Exported classes
Slot, password: Exported classes
Slot, password: Exported classes
Slot, payload: Exported classes
Slot, payload: Exported classes
Slot, permissions: Exported classes
Slot, permissions: Exported classes
Slot, registered: Exported classes
Slot, slot: Exported conditions
Slot, slot-type: Internal classes
Slot, symbol-designator: Exported conditions
Slot, symbol-designator: Exported conditions
Slot, target: Exported classes
Slot, text: Exported classes
Slot, type: Exported conditions
Slot, update: Exported conditions
Slot, update: Exported conditions
Slot, update: Exported conditions
Slot, update-id: Exported classes
Slot, user: Exported classes
Slot, users: Exported classes
Slot, users: Exported classes
Slot, value: Exported conditions
Slot, version: Exported classes
slot-type: Internal classes
Special Variable, *default-anonymous-channel-permissions*: Exported special variables
Special Variable, *default-channel-lifetime*: Exported special variables
Special Variable, *default-primary-channel-permissions*: Exported special variables
Special Variable, *default-profile-lifetime*: Exported special variables
Special Variable, *default-regular-channel-permissions*: Exported special variables
Special Variable, *errors*: Internal special variables
Special Variable, *id-counter*: Exported special variables
Special Variable, *invalid-symbol*: Internal special variables
Special Variable, *read-counter*: Internal special variables
Special Variable, *read-limit*: Internal special variables
Special Variable, *unbound-value*: Internal special variables
Special Variable, *whitespace*: Internal special variables
symbol-designator: Exported conditions
symbol-designator: Exported conditions

T
target: Exported classes
text: Exported classes
type: Exported conditions

U
update: Exported conditions
update: Exported conditions
update: Exported conditions
update-id: Exported classes
user: Exported classes
users: Exported classes
users: Exported classes

V
value: Exported conditions
version: Exported classes

Jump to:   *  
A   C   E   F   I   L   N   O   P   R   S   T   U   V  

Previous: , Up: Indexes   [Contents][Index]

A.4 Data types

Jump to:   A   B   C   D   E   F   I   J   K   L   M   N   P   R   S   T   U   W  
Index Entry  Section

A
already-in-channel: Exported classes

B
backfill: Exported classes
bad-content-type: Exported classes
bad-name: Exported classes

C
channel: Exported classes
channel-update: Exported classes
channelname: Exported types
channelname-taken: Exported classes
channels: Exported classes
Class, already-in-channel: Exported classes
Class, backfill: Exported classes
Class, bad-content-type: Exported classes
Class, bad-name: Exported classes
Class, channel: Exported classes
Class, channel-update: Exported classes
Class, channelname-taken: Exported classes
Class, channels: Exported classes
Class, connect: Exported classes
Class, connection: Exported classes
Class, connection-unstable: Exported classes
Class, create: Exported classes
Class, data: Exported classes
Class, disconnect: Exported classes
Class, emote: Exported classes
Class, emotes: Exported classes
Class, failure: Exported classes
Class, incompatible-version: Exported classes
Class, insufficient-permissions: Exported classes
Class, invalid-password: Exported classes
Class, invalid-permissions: Exported classes
Class, invalid-update: Exported classes
Class, join: Exported classes
Class, kick: Exported classes
Class, leave: Exported classes
Class, malformed-update: Exported classes
Class, message: Exported classes
Class, named-object: Exported classes
Class, no-such-channel: Exported classes
Class, no-such-profile: Exported classes
Class, no-such-user: Exported classes
Class, not-in-channel: Exported classes
Class, permissions: Exported classes
Class, ping: Exported classes
Class, pong: Exported classes
Class, profile: Exported classes
Class, pull: Exported classes
Class, register: Exported classes
Class, server-object: Exported classes
Class, target-update: Exported classes
Class, text-update: Exported classes
Class, too-many-connections: Exported classes
Class, too-many-updates: Exported classes
Class, typed-direct-slot-definition: Internal classes
Class, typed-effective-slot-definition: Internal classes
Class, typed-object: Internal classes
Class, typed-slot: Internal classes
Class, typed-slot-class: Internal classes
Class, update: Exported classes
Class, update-failure: Exported classes
Class, update-too-long: Exported classes
Class, user: Exported classes
Class, user-info: Exported classes
Class, username-mismatch: Exported classes
Class, username-taken: Exported classes
Class, users: Exported classes
Class, wire-object: Exported classes
Condition, incompatible-value-type-for-slot: Exported conditions
Condition, incomplete-token: Exported conditions
Condition, malformed-wire-object: Exported conditions
Condition, missing-clock: Exported conditions
Condition, missing-id: Exported conditions
Condition, missing-update-argument: Exported conditions
Condition, null-in-symbol-designator: Exported conditions
Condition, printer-condition: Exported conditions
Condition, protocol-condition: Exported conditions
Condition, read-limit-hit: Exported conditions
Condition, reader-condition: Exported conditions
Condition, stray-null-found: Exported conditions
Condition, unknown-symbol: Exported conditions
Condition, unknown-wire-object: Exported conditions
Condition, unprintable-object: Exported conditions
Condition, wire-condition: Exported conditions
connect: Exported classes
connection: Exported classes
connection-unstable: Exported classes
create: Exported classes

D
data: Exported classes
disconnect: Exported classes

E
emote: Exported classes
emotes: Exported classes

F
failure: Exported classes

I
id: Exported types
incompatible-value-type-for-slot: Exported conditions
incompatible-version: Exported classes
incomplete-token: Exported conditions
insufficient-permissions: Exported classes
invalid-password: Exported classes
invalid-permissions: Exported classes
invalid-update: Exported classes

J
join: Exported classes

K
kick: Exported classes

L
leave: Exported classes
lichat-protocol: The lichat-protocol system
lichat-protocol: The lichat-protocol package

M
malformed-update: Exported classes
malformed-wire-object: Exported conditions
message: Exported classes
missing-clock: Exported conditions
missing-id: Exported conditions
missing-update-argument: Exported conditions

N
named-object: Exported classes
no-such-channel: Exported classes
no-such-profile: Exported classes
no-such-user: Exported classes
not-in-channel: Exported classes
null-in-symbol-designator: Exported conditions

P
Package, lichat-protocol: The lichat-protocol package
password: Exported types
permissions: Exported classes
ping: Exported classes
pong: Exported classes
printer-condition: Exported conditions
profile: Exported classes
protocol-condition: Exported conditions
pull: Exported classes

R
read-limit-hit: Exported conditions
reader-condition: Exported conditions
register: Exported classes

S
server-object: Exported classes
stray-null-found: Exported conditions
System, lichat-protocol: The lichat-protocol system

T
target-update: Exported classes
text-update: Exported classes
too-many-connections: Exported classes
too-many-updates: Exported classes
Type, channelname: Exported types
Type, id: Exported types
Type, password: Exported types
Type, username: Exported types
Type, wireable: Exported types
typed-direct-slot-definition: Internal classes
typed-effective-slot-definition: Internal classes
typed-object: Internal classes
typed-slot: Internal classes
typed-slot-class: Internal classes

U
unknown-symbol: Exported conditions
unknown-wire-object: Exported conditions
unprintable-object: Exported conditions
update: Exported classes
update-failure: Exported classes
update-too-long: Exported classes
user: Exported classes
user-info: Exported classes
username: Exported types
username-mismatch: Exported classes
username-taken: Exported classes
users: Exported classes

W
wire-condition: Exported conditions
wire-object: Exported classes
wireable: Exported types

Jump to:   A   B   C   D   E   F   I   J   K   L   M   N   P   R   S   T   U   W